首页 技术 正文
技术 2022年11月21日
0 收藏 579 点赞 4,579 浏览 1711 个字

事件回顾


今天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 事件,但仍建议您使用该表中列出的事件来执行该操作。

参考

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,024
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,514
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,362
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,143
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,776
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,854