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


  • 在 Linux 操作系统中使用 Nginx 运行 ASP.NET 4

    1/6/2011 8:13:00 PM

    前言 在我上一篇博文“ 在 Linux 操作系统中运行 ASP.NET 4 (下) ”中讲述了如何在 openSUSE 11.3 操作系统中使用 Apache 2.2.1

  • 关于"Google限制Python"事件我的看法

    11/17/2009 4:35:00 PM

    阅读: 201 评论: 3 作者: AK747 发表于 2009-11-17 15:26 原文链接 本来做一个勤勤恳恳的码农我应该学习佩雷尔曼前辈的作风 --- 佩雷尔曼反复说他已经退出了

  • ASP.NET Web开发框架之三 报表开发

    9/20/2012 9:15:00 AM

    Enterprise Solution Web部分目前只实现了对RDLC的支持。实现一种报表格式的支持,需要做一些基础的工作以便于与系统紧密的集成。   绑定数据源

  • .Net 应用程序如何在32位操作系统下申请超过2G的内存

    1/20/2010 12:36:00 PM

    阅读: 639 评论: 10 作者: eaglet 发表于 2010-01-20 09:24 原文链接 作者: eaglet 2008 年我写过一篇博客叫 《 让.Net 应用程序突破

  • 一步一步优化SQL语句(一):逻辑查询的各个阶段

    4/26/2009 4:25:00 AM

    大家好,我是忆然,前段时间我在学习ItZik Ben-Gan、Lubor Kollar、Dejan Sarka所著的《Sql Server 2005 技术内幕:T-SQL查询》一书,在此我把

  • Speaking at the 5th UgiALT.Net Conference on Monotouch

    11/23/2009 8:12:00 AM

    Good evening! Just a quick note to say that Im going to be speaking at the 5th Italian UgiALT.NET

  • SQLSERVER中数据行所占用的最小空间

    8/22/2007 7:14:00 PM

    数据行所占的最小空间是多少呢? 先来看看下面这张经典数据行结构图(引自Inside Sql Server) 因为可变长度类型的列会有额外的空间开销,所以不考虑可

  • Flash上传文件(结合asp.net)

    2/25/2007 2:36:00 AM

    摘要: 在本文中,您可以看到Flash Ria开发中,Flash是如何与Javascript进行通信并向后台asp.net页面发送数据,从而实现Flash的“文件上传”功能。 阅读全文 Y

  • 智能播放器,也许有商业价值。

    8/13/2009 1:25:00 PM

    摘要: 几天前在路上想到一个点子,也许有些价值。和一些现有的音乐网站结合起来应该会有一个不错的发展空间。生产一个自动通过网络下载歌曲,随机播放的播放器。这个播放器会根据用户的喜好来下载音乐进行播放。

  • 判定IE的各个版本

    1/16/2010 1:32:00 PM

    阅读: 76 评论: 1 作者: 司徒正美 发表于 2010-01-16 12:51 原文链接 主要使用IE各个阶段实现的一些方法,从中也可以看出IE的发展史。暂时提供到IE4的判定。