当前位置 > 首页 > Asp.net

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

10/19/2012 7:59:00 AM来源: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


  • UpdatePanel终于可以上传文件了!

    3/26/2007 9:46:00 PM

    摘要: UpdatePanel终于可以上传文件了!我们要做的,只是在页面上添加一个控件而已。 阅读全文 Jeffrey Zhao 2007-03-26 20:23 发表评论

  • 门户网站的形成—CMS内容管理系统

    4/5/2009 4:13:00 PM

    摘要: 终于可以稍微停下来不用加班了,这是我进时代财富©过得最轻松的一个双休,总算是可以放下心来好好的调整一下。话说我三月份开始在时代财富公司上班,那怎一个忙字了得?别以为你是刚进公司新员

  • Workflow WF Reference Links for 2009-02-06

    2/6/2009 5:48:00 PM

    摘要: Workflow Reference Links:1. 到底谁需要BPEL? 文章中,作者Keith对当今BPM产品中的BPEL使用情况进行了评估,并建议用可以直接执行的、基于BPMN的流程

  • 聊聊如何处理程序中的“分支条件”更加合理

    2/22/2010 9:57:00 AM

    阅读: 143 评论: 0 作者: 酸甜西瓜 发表于 2010-02-22 09:23 原文链接 在编写代码的过程中,我们编写的类往往会有需要支持多条分支条件的情况,一般

  • Enhancing Desktop Spreadsheet applications into Web UI

    5/3/2009 8:06:00 PM

    After evaluating Visual WebGuion a few small projectsWorksLink decidedto employ it on a major proje

  • 跟我学MVC系列(Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX)(二)Models(ORM)

    9/3/2009 1:08:00 PM

    摘要: 我们将以实例为主,关于MVC的具体理论请在博客园中搜索,到处都有。在设计好数据库之后,打开VS2008,选择创建项目“ASP.NET MVC WEB APLLICATION

  • C#实现扫雷出炉

    4/28/2009 5:16:00 AM

    前阵子想用C#写个扫雷,检验一下学习一年多C#的功力如何。扫雷的基本实现很简单,动态生成控件,然后用Controls.Add添加到窗口中,用随机数布雷,处理Mouse事件...最麻烦的事情不过是在点

  • Sql server 2000导入 Sql server 2005的数据

    3/21/2009 11:58:00 AM

    摘要: 从sql server2005中导入2000的数据不是难事。 做法如下: 1:把sql server 2000的数据库backup,做成一个bak的备份文件 2:在sql server

  • 什么是依赖注入?(听来的一个笑话)

    6/13/2009 2:58:00 AM

    首先,马桶是一个大大的容器,能够容纳各种秽物。而且您应该明确这个观点:这个技术的根本目的就是让您和您拉的屎能够轻松的进行分离,不至于在您排泄的过程中拉的满裤子都是而无法清理,否则您就得通过其他手段,

  • 四.Visitor Pattern(訪問者模式)

    3/2/2007 3:55:00 PM

    摘要: 阅读全文 自適應軟件...... 2007-02-28 14:45 发表评论