事件回顾


今天GridView翻页时,又遇到错误:索引超出范围。必须为非负值并小于集合大小。

这是当时的PageIndexChanging和RowCommand两个事件的后台代码

protected void GridViewResult_OnPageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridViewResult.PageIndex = e.NewPageIndex;
BindResults();
}
protected void GridViewResult_OnRowCommand(object sender, GridViewCommandEventArgs e)
{
var index = Convert.ToInt32(GridViewResult.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
if (e.CommandName == "ResultExcel")
{
var da = new DataClassesDataContext();
var daSelect = (from r in da.Results
where r.Index == index
select r).First();
CreateResultExcel(daSelect);
Response.Redirect("FileDownload.aspx");
}
else if(e.CommandName == "ResultDetail")
{
var da = new DataClassesDataContext();
var daSelect = (from r in da.Results
where r.Index == index
select r).First();
FillOutModal(daSelect);
ScriptManager.RegisterStartupScript(this, GetType(), "ResultDetail", "OpenModalDefault();", true);
}
}

后经调试发现了一个一直被自己忽视的细节:点击GridView翻页按钮后,在引发PageIndexChanging事件前,先引发了RowCommand事件。

因为当时GridView翻到第二页后只有一行记录,而向前翻页(翻到第一页)的“1”按钮的e.CommandArgument=1
当这个1传递到RowCommand事件里面后,GridViewResult.DataKeys[1](第二行的主键)不存在,所以程序报错。

知道问题原因后,只需把获取index的语句移到if分支语句内部即可。

GridView中单击按钮,首先执行RowCommand事件


通过查阅MSDN,发现不但PageIndexChanging事件如此。

在单击GridView控件中的按钮时,将引发RowCommand事件。
而且可以通过设置CommandName属性,调用GridView的某些内置功能。

CommandName 值 描述
“Cancel” 取消编辑操作并将 GridView 控件返回为只读模式。引发 RowCancelingEdit 事件。
“Delete” 删除当前记录。引发 RowDeleting 和 RowDeleted 事件。
“Edit” 将当前记录置于编辑模式。引发 RowEditing 事件。
“Page” 执行分页操作。将按钮的 CommandArgument 属性设置为“First”、“Last”、“Next”、“Prev”或页码,以指定要执行的分页操作类型。引发 PageIndexChanging 和 PageIndexChanged 事件。
“Select” 选择当前记录。引发 SelectedIndexChanging 和 SelectedIndexChanged 事件。
“Sort” 对 GridView 控件进行排序。引发 Sorting 和 Sorted 事件。
“Update” 更新数据源中的当前记录。引发 RowUpdating 和 RowUpdated 事件。

尽管单击上表中所列出的按钮时将引发 RowCommand 事件,但仍建议您使用该表中列出的事件来执行该操作。

参考

GridView 翻页 索引超出范围的更多相关文章

  1. 实现GridView翻页并且实现CheckBox选中功能的保持

    在GridView与数据库进行绑定后,由得到的数据记录可能有许多条,以至一个页面无法容纳,这时需要进行多页显. 要实现分页显现,只要使用分页类 "PagedDataSource" ...

  2. gridView AspNetPager 翻页时 弹出窗体关闭报错

    gridView AspNetPager 翻页后,你右击刷新或F5会发现弹出一个刷新页面. 这是因为默认翻页都是用dopostback方式回发的.因为这时的页面已经不是原来的页面.所以会弹出提示. 这 ...

  3. Android水平(横向)翻页列表,类似水平GridVIew

    Android水平(横向)翻页列表,类似于水平方向的GridView,行列自定义,但要翻页切换,考虑加载性能,当Item数据很多时加载和翻页要流畅,翻页时要有动画效果,效果图如下: 实现方式: 1:翻 ...

  4. GridView中CheckBox翻页记住选项

    <asp:GridView ID="gvYwAssign" runat="server" AutoGenerateColumns="False& ...

  5. XtraGrid滚轮翻页

    滚轮翻页与传动的翻页更为方便,经过本人一番探讨与琢磨终于在XtraGrid的GridView中实现了鼠标滚轮翻页. 我新建了一个组件继承原本的GridControl,在组件中添加了一个ImageLis ...

  6. Android UI【android 仿微信、QQ聊天,带表情,可翻页,带翻页拖动缓冲】

    http://blog.csdn.net/lnb333666/article/details/8546497 如题,这是公司项目的一个功能模块,先上个效果图: 其次大致说说原理: 1,首先判断输入的字 ...

  7. yii2.0下,JqPaginator与load实现无刷新翻页

    JqPaginator下载地址http://jqpaginator.keenwon.com/ 控制器部分: <?php namespace backend\controllers; use co ...

  8. Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页、搜索、格式化、自定义按钮

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  9. Atitti usrQBf1801 翻页控件规范  v2

    Atitti usrQBf1801 翻页控件规范  v2 1. 参考api  参考easyui ,.net系列的1 1.1. 翻页流程  初始化翻页控件,以及绑定新页面event onSelectPa ...

随机推荐

  1. win2012 配置wamp的若干错误

    转自群友 VC2015.VC14 在 Windows 2012 R2 安装失败,0x80240017 - 未指定的错误,解决办法据朋友反应VC2013一样存在这个问题--查资料说是没有安装 KB299 ...

  2. cocos2d-x代码阅读笔记 - 入口

    每一个C\C++程序都有一个非常有名的入口函数 main(),在Windows系统下,这个函数就变成了WinMain函数. 在cocos2d-x 2.0.4的Windows版本中,main函数非常简单 ...

  3. MySQL操作中的一些细节及良好习惯--------持续更新中...

    1.尽量不要写太过复杂的SQL查询,不要想着非要一次性将结果全部以前端要求的形式返回出来,可以多次分开查询,这样逻辑清晰,问题解决速度快,方便维护,并且SQL的效率也高. 2.在使用联表查询的时候,关 ...

  4. Mac通过brew安装reds、memcached

    redis brew install php70-redis 配置文件: /usr/local/etc/php/7.0/conf.d/ext-redis.ini memcached brew inst ...

  5. 【学习笔记】 使用XML配置和注解实现Spring的依赖注入DI (2-3-2)

    Spring的四个核心组件 1.beans Bean是包装应用程序自定义对象Object的 Object中保存数据 2.core  3.context 一个Bean的关系集合 4.expression ...

  6. 测试任务汇总v1.0

    2017.08.04 整理了目前我们所在团队需要做的日常任务 定义为v1.0

  7. PHP文件头BOM头问题

    前几天我们公司服务器出现了一个离奇的问题,服务器与本地文件代码完全一致,本地运行正常,到了测试环境服务器之后,各种问题一个又一个浮现,先是后台验证码不显示,以为是session写入失败,又是怀疑gd库 ...

  8. 由select引发的思考

    一.前言 网络编程里一个经典的问题,selec,poll和epoll的区别?这个问题刚学习编程时就接触了,当时看了材料很不明白,许多概念和思想没有体会,现在在这个阶段,再重新回头看这个问题,有一种豁然 ...

  9. 打造SpringBootTemplate(SpringBoot项目的模版)

    随着框架使用的不断的更新,后面使用SpringBoot会多,这边准备构建一个SpringBoot项目使用的模版. 所谓模版,和之前一样,就是一个最简单的项目,包含所有最简单的空实现. 做模版的时候参考 ...

  10. JavaScript设计模式之策略模式

    所谓"条条道路通罗马",在现实中,为达到某种目的往往不是只有一种方法.比如挣钱养家:可以做点小生意,可以打分工,甚至还可以是偷.抢.赌等等各种手段.在程序语言设计中,也会遇到这种类 ...