译序:此文章是今天在http://www.asp.net首页发现的,详细内容地址是http://www.dotnetbips.com/articles/displayarticle.aspx?id=511,作者Bipin Joshi。题目为Working with GridView without using Data Source Controls。
本文是根据原文的意思加自己的理解来翻译的,这段时间自己翻译过几篇其它的文章,发现对于有些地方的翻译真的就不能按照英文的愿意来,这也可能是文化差异的不同,所以我每篇翻译都强调是“按照自己的理解”来翻译,而且,是在保留作者原文的意思的基础之上。
介绍:
大多数的文章和演练都是介绍如何用DataSource控件来配合GridView来工作的。当一个GridView被指定到一个DataSource控件的时,系统就会自动完成其分页和排序的功能,而我们基本上是不用写一行代码的。然而,我们也会碰到直接把DataView和DataTable作为GridView绑定的对象的时候。幸运的是,GridView是可以用DataSource控件以外的方法来绑定数据的。但是需要开发人员敲额外的一些代码,而你对ASP.NET1.X的DataGrid很熟悉的话,就会发现其过程是很象的。本文我们将来完成直接用DataView(或者DataTable)绑定到GridView如何操作的,并且在此基础上实现分页和编辑等功能。
示例:雇员列表
我们用Northwind数据库的Employees表来做这个示例。在VS2005里新建一个站点,然后创建一个webform,拖拽一个GridView控件到此页面上。用下图的方法为GridView填加三个BoundFields和一个CommandField。
按照如下的表来设置各BoundField的属性
BoundField |
HeaderText |
DataField |
ReadOnly |
Employee ID |
Employee ID |
EmployeeID |
true |
First Name |
First Name |
FirstName |
false |
Last Name |
Last Name |
LastName |
false |
进入到codebehind页(也可能是code file),填加如下的代码到Page_Load事件:
{
if(!IsPostBack)
{
BindGrid();
}
}
然后,我们让页面在第一次显示的时候调用BindGrid()方法。这个方法是我们自定义的方法,后面我们将介绍它的具体实现。这个方法实际上是让一个DataView绑定到一个GridView上。而这个DataView里面是Employees表里的所有记录。
实现分页:
首先需要把GridView的AllowPaging属性设置为True,这样我们才可以实现分页的功能。然后我们把PageSize属性设置成3。这里有两个和分页有关的方法,它们分贝是:
·PageIndexChanging
·PageIndexChanged
第一个方法是在当前页的这个属性改变的时候被触发的,第二个方法是这个属性已经被更改以后触发的。而前一个方法你是可以在分页的时候终止这个(分页)操作的。
在GridView的PageIndexChanging事件里我们写如下的代码:
(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
BindGrid();
}
PageIndexChanging事件句柄里接收一个GridViewPageEventArgs类型的参数。这个参数通过一个叫做NewPageIndex的属性来获得用户选择的新页的页码。我们再次调用BindGrid()方法把GridView的PageIndex的属性设置成新页码。GridView就会把相应的内容显示出来。下面的截图是GridView实现分页以后的效果
实现排序:
实现排序的方法相对来说就要多做一些工作。首先,需要把GridView的AllowSorting属性设置成True,然后,我们要给需要进行排列的BoundField列上设置SortExpression属性.当你给相应的列设置好这个属性以后你就会发现这个列的头边成了一个可点击的Link button.单击它会触发如下的两个事件:
·Sorting
·Sorted
和分页方法一样这两个方法是有前后区别的。而Sorting事件也同样允许你取消这个(排序)动作。
排序事件的句柄接收一个GridViewSortEventArgs类型的参数。GridViewSortEventArgs类有三个重要的属性。SortExpression属性提供先前你指定的排序表达式。SortDirection属性描述是采用升序排序还是降序排序。着儿歌属性在你用自己创建的列表里排序是没什么用的,但是,当你用DataSource控件来为GridView做数据源的话它会为你自动指定排序的方法并且你可以通过通过这个属性利用get或set的方法指定排序的方向。
既然我们不是用DataSource控件来作为数据源那么我们需要自己来写排序的事件。我们用如下的方法来存储一个ViewState变量,填加如下代码到Sorting事件中。
GridViewSortEventArgs e)
{
ViewState["sortexpression"] = e.SortExpression;
if (ViewState["sortdirection"] == null)
{
ViewState["sortdirection"] = "asc";
}