事件回顾


今天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. vuex学习笔记

    一.vuex的目的 把组件的共享状态抽取出来,以一个全局单例模式管理.在这种模式下,组件树构成了一个巨大的视图,不管在树的哪个位置,任何组件都能获取状态或触发行为. 二.vuex集中式管理数据 安装 ...

  2. 解决asp.net MVC中 当前上下文中不存在名称“model” 的问题

    在vs2013下打开同事上传的cshtml视图文件报错,出现当前上下文中不存在名称“model”,ViewBag,Url等等,在视图中也没有智能提示了:但是不影响编译运行,只是开发时候比较麻烦,但在同 ...

  3. gradle一个已删除的项目找不到

    排查了已有模块未果,到.idea目录中找到了gradle.xml文件,发现其中externalProjectPath指向的正是报错的那个已删除项目,改之,刷gradle,解决.

  4. gitlab手动安装

    [博客园 淡水的天空]] 老版 新版 Omnibus package installation Manually

  5. 手机APP中使用history.back()返回没有效果的解决

    样式是一个超链接A标签,通过点击事件来达到返回上一页的效果. 所以通常做饭是把A标签的href写成#,然后onClick事件,刚开始我只是当成一个普通点击事件,然后使用JS进行返回. 写法如下: &l ...

  6. 论 Java 中的内存分配

    Java内存分配主要包括以下几个区域: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 3. 堆:存放用new产生的数据 4. 静 ...

  7. Django开发基础----创建项目/应用

    环境: 1.python  3.6.2 2.安装django:pip install django==1.10.3 *下面以开发一个简单的用户签到系统介绍Django的使用 创建Django项目: 命 ...

  8. MVC5中使用Log4Net

    最早搜到的是这篇: http://www.codeproject.com/Articles/823247/How-to-use-Apache-log-net-library-with-ASP-NET- ...

  9. dubbo filter实现接口认证springboot idea

    最近公司有业务需求,要对Dubbo接口调用者进行身份验证,验证通过才能调用,网上一些资料不够全面,遂整理了一下. 在provider方定义一个filter,需要实现com.alibaba.dubbo. ...

  10. onCreate源码分析

    原文地址Android面试题-onCreate源码都没看过,怎好意思说自己做android Activity扮演了一个界面展示的角色,堪称四大组件之首,onCreate是Activity的执行入口,都 ...