首页 > 编程 > .NET > 正文

ASP.NET DataGrid 控件深入研究

2024-07-10 12:57:35
字体:
来源:转载
供稿:网友
中国最大的web开发资源网站及技术社区,
首先我们将从一个示范开始,在这个示范中我将使用一个按钮点击事件排序表格中的数据。然后介绍的是一组属性——hyperlinkcolumn、bottoncolumn 和 boundcolumn,使用这些属性可以为 datagrid 添加一些有趣的自定义功能。

下面我们首先从上一次结束的地方——清单a开始。下面是清单a中代码的输出。


datagrid 的输出

要注意的第一个变化是表头中的列名现在是可点击的。自己运行一下这个示例,你会发现在点击每个字段时,数据会自动排序。

现在我们看一下引发这个变化的代码。首先我将介绍 strsortby 变量,这个变量用于存储排序参数的名字。page_load() 函数也已有改动:当页面第一次被装载时,id字段被选作默认的排序参数。

下面创建 dataview 对象的一个实例,用于在运行时期改变排列顺序。只要把这个属性设置为要排序的列,dataview 就会替我们完成排序工作。

最后,使用 datagird 控件的一些新属性将这些东西粘合到一起。allowsorting激活排序,而 onsortcommand属性指定在接收到一个排序请求时需要调用的事件处理器。第二个属性已经设置为dgsuperheroes_sort(),这个函数将在我们点击头部的字段名时由 .net 编译器自动调用。在这个函数中,sortexpression属性保存被选作排序参数的字段名,然后根据这个字段重新绑定 datagrid,从而实现排序。



向 datagrid 中添加链接


接着,我们可以通过以下方式改进 datagrid 的界面:只在前面展示信息的摘要,并在 datagrid 中插入一些超链接,然后在点击这些链接时显示详细信息。清单b 展示了如何实现这一效果,图b 展示了相应的输出:

图b

在 datagrid 中插入超链接
这里 datagrid 只包含两列——第一列是 id,第二列是名字。如果点击任何一个名字,就会调出另外一个 asp.net 脚本,显示被选项的所有详细信息。

在这个脚本中最重要的东西是 autogeneratecolumns 属性。该属性如果设为 false,那么就可以保证 .net 编译器不会根据表的字段自动产生 datagrid 的列。

很明显的问题是,然后该怎样生成列?很简单,使用 <columns> 元素,这一元素将围起需要显示的列的定义。

第一种列是 <asp:boundcolumn> 类型,该类型允许我们将 datagrid 的一列绑定到数据库表的一个字段。所需的字段被赋予 <asp:boundcolumn> 元素的 datafield属性。

然后,<asp: hyperlinkcolumn> 元素允许我们插入一个特殊列,在该列中有 datagrid 每一行的一个链接。datatextfield属性控制列中要显示的表字段,datanavigateformatstring属性控制超链接的 url 目标(注意 {0} 格式用于变量填补),datanavigateurlfield属性指定用于填补的数据库字段。

如果点击超级英雄(super hero)的名字,会进入 more.aspx 脚本,该脚本以 id 作为一个 get 参数传递,然后从数据库中获取信息,并将信息显示在页面上。
命令中心
前面的例子引入了一个包含超链接的列。现在,你将看到如何引入一个能够在用户点击时运行自定义命令的列。比如说,当用户点击一个列时,在页面上隐藏或者显示一个元素。



首先,在前面创建的 datagrid 中添加两个列。第一个新列使用被选记录的详细信息填充另外一个 datagrid(位于同一页面),而第二个列用于在用户点击一个按钮时显示或隐藏这个新的 datagrid。

清单c是产生的代码,下图是清单以中代码的简单输出:

图c


使用 datagrid 显示/隐藏详细信息
脚本中实际上包含两个 datagrid:第一个是“dgsuperheroes”,用于显示超级英雄(superheroes)的名字,第二个是“dgsuperheroes_details”,用于显示被选英雄的详细信息。默认情况下,第二个 datagrid 在页面加载时是不可见的,因为其 visible 属性设置为 false。

现在回到“dgsuperheroes” datagrid,你会发现我们已经把 autogeneratecolumns 属性设置为“false”并且引入了四个自定义列:两个用于记录 id 和名称的 <asp:boundcolumn>,还有两个用于保存命令的 <asp:buttoncolumn>。

每个 <asp:buttoncolumn> 都有三个有用的属性:headertext,控制表头行显示的文字;text,控制每一行显示的文字;commandname,用于为每个命令指定一个唯一标识符。

“dgsuperheroes” datagrid定义还引入了 onitemcommand 属性,这个属性指定在用户点击一个 <asp:buttoncolumn> 链接时被调用的事件处理器。在这个例子中,事件处理器叫做 superhero_details(),它使用 commandname 区分对“显示详细信息(show details)”和“隐藏详细信息(hide details)”请求的调用。注意这里显式地将事件(作为事件处理器的一个输入参数)转型为一个 linkbutton。

分享你的 datagrid 技巧和窍门
在学习完本文的这两部分课程之后,我已经尝试尽量深入地讲解了 asp.net 中非常酷的 datagrid 控件的很多东西。此外还展示了如何使用最简单的方法向 datagrid 中添加排序列,之后我还快速地介绍了 datagrid 控件的三个有用但有点复杂的属性:<asp:boundcolumn> 元素,用于将 datagrid 列绑定到数据库表的具体字段;<asp:hyperlinkcommand> 元素,用于在 datagrid 中插入超链接;<asp:buttoncolumn> 元素,使得将自定义命令引入到 datagrid 中更加容易。不妨到discussion board 跟大家分享你最爱的 datagrid 技巧或窍门。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表