当前位置 > 首页 > Asp.net

[原创]ExtAspNet秘密花园(十八) — 表格之事件处理

2012-10-19 7:59:00来源:Asp.net

事件通常是由用户触发的,比如按钮的点击事件、下拉列表的选择项改变事件。不过有些事件并非用户触发的,而是在程序执行的某个特定阶段触发的,比如将要介绍的表格的预绑定事件、行预绑定事件以及行绑定事件,本章将会详细描述这些和表格相关的事件。

 

有哪些事件参数类型

每个事件处理函数都会接受一个事件参数,默认的是EventArgs,不过Grid为大部分事件自定义了事件参数类型,先来看下源代码中的定义:

image

用户触发的事件参数类型:

  • GridCommandEventArgs:表格行命令事件参数,对应RowCommand事件。
    • RowIndex:行索引
    • ColumnIndex:列索引
    • CommandName:命令名称
    • CommandArgument:命令参数
  • GridPageEventArgs:表格分页事件参数,对应PageIndexChange事件。
    • NewPageIndex:新页面的索引
  • GridSortEventArgs:表格排序事件参数,对应Sort事件。
    • SortField:排序字段
    • SortDirection:排序方向
    • ColumnIndex:列索引
  • GridRowClickEventArgs:表格行点击事件参数,对应RowClick和RowDoubleClick两个事件。
    • RowIndex:行索引

 

非用户触发的事件参数类型:

  • GridPreRowEventArgs:表格行预绑定事件参数,对应PreRowDataBound事件。
  • GridRowEventArgs:表格行绑定事件参数,对应RowDataBound事件。
  • 还有一个PreDataBound事件,使用的是默认EventArgs事件参数。

 

分页和排序事件

这两个事件在前面章节已经提到过,就不再赘述。

 

行单击和行双击事件

这个两个事件也相对简单,其事件参数只有一个属性RowIndex,表示当前点击的是哪一行。

这个事件在实际项目中也经常用到,特别是主从表联动时,单击主表的某一行后更新从表的数据,下面通过一个例子来说明。

首先来看下示例的最终显示效果:

image

用户单击左侧的某一个班级时,通过更新右侧的班级信息和班级的学生列表。

 

目前我们只关心左侧主表的实现代码(完整的示例请查看官方示例),先看下ASPX标签结构:

1: <ext:Grid ID="Grid2" ShowBorder="true" ShowHeader="true" Title="表格(班级)" runat="server" 2: DataKeyNames="Id,Name" EnableMultiSelect="false" EnableRowClick="true" OnRowClick="Grid2_RowClick"> 3: <Columns> 4: <ext:TemplateField Width="60px"> 5: <ItemTemplate> 6: <asp:Label ID="Label2" runat="server" Text='<%# Container.DataItemIndex + 1 %>'></asp:Label> 7: </ItemTemplate> 8: </ext:TemplateField> 9: <ext:BoundField ExpandUnusedSpace="true" DataField="Name" DataFormatString="{0}" 10: HeaderText="姓名" /> 11: </Columns> 12: </ext:Grid>

这里有如下几个关键点:

  • 设置表格的EnableMultiSelect属性为false,让表格只能单选;
  • 设置表格的EnableRowClick属性为true;
  • 设置行点击事件处理函数OnRowClick。

 

再来看下后台的行点击处理代码:

1: protected void Grid2_RowClick(object sender, ExtAspNet.GridRowClickEventArgs e) 2: { 3: BindGrid1(); 4: } 5:   6: private void BindGrid1() 7: { 8: if (Grid2.SelectedRowIndex < 0) 9: { 10: return; 11: } 12:   13: int classId = Convert.ToInt32(Grid2.DataKeys[Grid2.SelectedRowIndex][0]); 14:   15: // 根据classId查询数据库,绑定从表和更新班级描述... 16: }

 

注意,如何启用行双击事件一定要启用EnableRowDoubl