当前位置 > 首页 > 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


  • How to create a AddIn for Visual Studio 2008

    2009-1-31 20:31:00

    I had to create a Visual Studio AddIn, no as simple task as I thought in the beginning

  • ASP.NET AJAX官方资源大量更新

    2007-3-23 16:40:00

    摘要: 这次更新最主要的可能就是 官方文档 的更新,尤其是对页面的客户端页面生命周期与UpdatePanel客户端生命周期(事实上前者包含了后者)提供了详细的说明和举例。 阅读全文 Jef

  • NUMA架构

    2009-12-27 3:05:00

    阅读: 263 评论: 0 作者: geff zhang 发表于 2009-12-26 23:03 原文链接 最近在学习.NET的并行计算技术,学到一个服务器NUMA架构,NUMA架构在中

  • 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例

    2007-1-22 11:48:00

    摘要: 今天开始,我打算开始学习WWF,从网上搜索到了部分相关资料,也找到了一些文档和实验。但是,资料以英文的占多数,所以,在学习起来似乎比较吃力,不过相信我能坚持下来,顺便提高点英语阅读能力,不过

  • 设计模式之单例模式 王泽宾

    2009-4-2 12:42:00

    摘要: 1 单例模式的日常应用我们在浏览BBS、SNS网站的时候,常常会看到“当前在线人数”这样的一项内容。对于这样的一项功能,我们通常的做法是把当前的在线人数存放到一个内存

  • Silverlight的业务场景

    2007-5-31 20:57:00

    下文是我目前正在写的Silverlight White paper其中一章,主要用来介绍Silverlight的业务场景,还没有最终定稿,现在发布在此处,希望征集一些大家的意见反馈,同时,也欢迎更多

  • 推荐the productive programmer

    2009-10-27 20:06:00

    阅读: 129 评论: 0 作者: 老三 发表于 2009-10-27 18:36 原文链接 很高兴,这一个月的阅读列表中有本书《the productive programmer》,在这

  • ajax基础教程.pdf

    2007-3-13 9:34:00

    正在宁波找工作,都要有经验的,哎```郁闷中,做个电子书给大家,希望有工作机会的给提供一个,谢谢。 只做了1--3章,以后的待续~~~ http://www.cnblogs.com/Files/ba

  • Objective-C --- 1,前言

    2009-3-27 18:23:00

    摘要: 1,前言相信iPhone不久就要在国内发布了,和我们在国内可以通过正规渠道买得到的iPod Touch一样,iPhone也是一个激动人心的产品。iPhone发布的同时,基于iPhone的程序

  • 闲话领域驱动设计

    2009-11-17 20:40:00

    阅读: 174 评论: 0 作者: pillow 发表于 2009-11-17 18:55 原文链接   Eric Evans的《领域驱动设计——软件核心复杂性应