现在的位置: 首页 > 综合 > 正文

[翻译]用DataSource控件以外的方法为GridView提供数据

2012年09月04日 ⁄ 综合 ⁄ 共 2468字 ⁄ 字号 评论关闭

译序:此文章是今天在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控件的时,系统就会自动完成其分页和排序的功能,而我们基本上是不用写一行代码的。然而,我们也会碰到直接把DataViewDataTable作为GridView绑定的对象的时候。幸运的是,GridView是可以用DataSource控件以外的方法来绑定数据的。但是需要开发人员敲额外的一些代码,而你对ASP.NET1.XDataGrid很熟悉的话,就会发现其过程是很象的。本文我们将来完成直接用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事件:

protected void Page_Load(object sender, EventArgs e)

{

if(!IsPostBack)

{

BindGrid();

}


}

然后,我们让页面在第一次显示的时候调用BindGrid()方法。这个方法是我们自定义的方法,后面我们将介绍它的具体实现。这个方法实际上是让一个DataView绑定到一个GridView上。而这个DataView里面是Employees表里的所有记录。

实现分页:

首先需要把GridViewAllowPaging属性设置为True,这样我们才可以实现分页的功能。然后我们把PageSize属性设置成3。这里有两个和分页有关的方法,它们分贝是:

·PageIndexChanging

·PageIndexChanged

第一个方法是在当前页的这个属性改变的时候被触发的,第二个方法是这个属性已经被更改以后触发的。而前一个方法你是可以在分页的时候终止这个(分页)操作的。

GridViewPageIndexChanging事件里我们写如下的代码:

protected void GridView1_PageIndexChanging

(
object sender, GridViewPageEventArgs e)

{

GridView1.PageIndex 
= e.NewPageIndex;

BindGrid();

}

PageIndexChanging事件句柄里接收一个GridViewPageEventArgs类型的参数。这个参数通过一个叫做NewPageIndex的属性来获得用户选择的新页的页码。我们再次调用BindGrid()方法把GridViewPageIndex的属性设置成新页码。GridView就会把相应的内容显示出来。下面的截图是GridView实现分页以后的效果

 

实现排序:

实现排序的方法相对来说就要多做一些工作。首先,需要把GridViewAllowSorting属性设置成True,然后,我们要给需要进行排列的BoundField列上设置SortExpression属性.当你给相应的列设置好这个属性以后你就会发现这个列的头边成了一个可点击的Link button.单击它会触发如下的两个事件:

·Sorting

·Sorted

和分页方法一样这两个方法是有前后区别的。而Sorting事件也同样允许你取消这个(排序)动作。

排序事件的句柄接收一个GridViewSortEventArgs类型的参数。GridViewSortEventArgs类有三个重要的属性。SortExpression属性提供先前你指定的排序表达式。SortDirection属性描述是采用升序排序还是降序排序。着儿歌属性在你用自己创建的列表里排序是没什么用的,但是,当你用DataSource控件来为GridView做数据源的话它会为你自动指定排序的方法并且你可以通过通过这个属性利用getset的方法指定排序的方向。

既然我们不是用DataSource控件来作为数据源那么我们需要自己来写排序的事件。我们用如下的方法来存储一个ViewState变量,填加如下代码到Sorting事件中。

protected void GridView1_Sorting(object sender, 

GridViewSortEventArgs e)

{

ViewState[
"sortexpression"= e.SortExpression;

 

if (ViewState["sortdirection"== null)

{

ViewState[
"sortdirection"= "asc";

}

抱歉!评论已关闭.