摘要:GridView 是 ASP.NET 2.0 中提供的原来 DataGrid 的后继控件。提供了比 DataGrid 更为强大的功能。 GridView 现在有两种数据绑定模型。一种是向后(backward)兼容 1.x 的 DataSource 语法。一种是新的 DataSourceID 语法。 前者通过在代码中直接将数据源赋值给 DataSource 属性,并调用 DataBind 方法实现数据的绑定。后者可以在“Design”视图中,放置 DataSource 控件(SqlDataSource, AccessDataSource, ObjectDataSource, XmlDataSource等),然后将 DataSource 控件的 ID 在“Properties”面板中设置给 GridView 控件的 DataSourceID 属性。 关于第二种绑定语法,QuickStart 中的示例挺多。演示了自动的分页、排序、(通过脚本回调式的)无刷新分页、排序等等。应该很全面了。 我尝试用一个 GridView 控件列出 ASP.NET 2.0 成员资格(Membership)中的所有角色。简单的使用 System.Web.Security.Roles.GetAllRoles() 方法即可得到全部的角色列表。 Roles.GetAllRoles 方法返回的是一个 string 数组,直接按照第一种绑定语法,写上两行代码:this.GridView1.DataSource = Roles.GetAllRoles(); this.GridView1.DataBind(); 效果便出来了。 只有一列,列头是一个“Item”字样,很不好,我需要自定义的列头(比如我想写一个“Role”的列头会更好一些)。这个“需求”可以简单的用自定义 GridView 的 Columns 来实现:我添加了一个 TemplateColumn,指定列头为“Role”,模版中写的代码是 <%# Container.DataItem %>还是用 1.x 中的绑定语法。(其实 2.0 中新推出的绑定语法是 Eval 和 Bind 语法,不过我这个地方没办法使用。不信?你试试看,呵呵)另外,要顺便关闭 AutoGenerateColumns 属性。 OK,截至目前,上面的需求都顺利完成了,下面我尝试给它加入排序功能。 对于 GridView 的 Column 来说,如果其 SortExpression 没有设置,呈现后的列头不会出现排序用的 LinkButton。于是我就为刚才添加的那个 TemplateColumn 设置了 SortExpression = "role"。现在再到浏览器里去看,LinkButton 就出来了。 点一下试一试?那个再熟悉不过的错误页面出来了,“The GridView 'GridView1' fired event Sorting which wasn't handled.”查了查文档,原来,GridView 内置了对于第二种绑定模型的自动分页、排序功能。对于通过 DataSource 的第一种绑定模型,GridView 只提供 UI,不提供实现。看来还需要我们手工去实现。 文档还有刚才那个错误消息都告诉我们,实现排序是通过 Sorting 事件。这个事件处理程序,我是这么写的:protected......[阅读全文]