top
Loading...
ASP.NET中實現DataGrid數據排序

Visual Studio .Net為編寫WinForm程序(即:在Windows平臺下運行的程序)所提供的DataGrid組件比起微軟以往的各種開發環境中提供的DataGrid組件都要"高級"許多。其"高級"的地方就在于不需要再進行任何其他設置或編程,DataGrid就能夠對其中的數據分別按照升、降序進行排列。這種"高級"功能給我們編程提供了許多方便。圖01是在WinForm程序中的DataGrid組件按照"EmployeeID"升序進行排列時的界面:


圖01:在WinForm程序中使用DataGrid對數據進行排序

此時很多的朋友肯定會問這樣的問題,Visual Studio .Net不僅為編寫WinForm程序提供了DataGrid組件,同樣也為編寫WebForm程序(即:ASP.NET頁面程序)提供了DataGrid組件,那么在WebForm中的DataGrid是否也像在WinForm中的DataGrid那樣具備這樣"高級"的功能?答案是:雖然微軟為WebForm提供的DataGrid組件也考慮了數據排序功能,但卻不像為編寫WinForm程序提供的DataGrid組件在實現數據排序功能上的操作步驟那么簡單,在ASP.NET頁面中要實現DataGrid組件的數據排序需要設定組件的某些屬性和加入一些處理代碼才可以實現。本文就將詳細討論一下這個問題。

一.本文中介紹的程序的設計和運行環境:

(1).視窗2000高級服務器版

(2).Visual Studio .Net中文正式版,.Net FrameWork SDK版本號3705

二.ASP.NET頁面中DataGrid實現數據排序的實現原理:

在ASP.NET頁面中實現DataGrid的數據綁定數據排序,有二種實現方法,這二種方法有異曲同工之效,具體如下:

1. 在實現ASP.NET頁面中的DataGrid組件數據綁定時,設定DataGrid組件數據源使用的是DataView,DataView有一個屬性"Sort"。通過"Sort"屬性設定此數據源以何排序和排序的方式(即升、降序),從而實現對DataGrid中數據排序。

2. 通過設定Sql語句,為數據綁定產生不同的DataSet,從而實現DataGrid中的數據排序。

這二種方法雖然能夠實現相同的功能,但第一種方法實現較簡單,但實現功能有限,

第二種方法雖然實現起來較復雜,但卻可以以此實現較強大的功能。但無論那一種方法,實現DataGrid的數據綁定是首先要完成的。下面首先介紹DataGrid數據綁定的實現方法:

三.ASP.NET中DataGrid組件數據綁定實現步驟:

在ASP.NET中實現DataGrid組件的數據綁定方法和在WinForm中數據綁定的方法基本相似。下面是在ASP.NET實現DataGrid組件數據綁定的實現步驟:

1. 啟動Visual Studio .Net。

2. 選擇菜單【文件】|【新建】|【項目】后,彈出【新建項目】對話框。

3. 將【項目類型】設置為【Visual C#項目】。

4. 將【模板】設置為【ASP.NET Web 應用程序】。

5. 在【位置】的文本框中輸入"http://localhost/dataGridSort"。然后單擊【確定】按鈕,這樣在Visual Studio .Net就會在當前項目文件所在目錄中建立一個名稱為"dataGridSort"文件夾,里面存放是此項目的項目文件,項目中的其他文件存放的位置是IIS默認的Web站點所在的目錄。具體如圖02所示:


圖02:新建一個ASP.NET項目對話框

6. 把Visual Studio .Net當前窗口切換到WebForm的設計窗口,并從【工具箱】|【Web組件】選項卡中拖入一個DataGrid組件到WebForm的設計窗口,名稱為DataGrid1。

7. 選中DataGrid1,單擊鼠標右鍵,在彈出的菜單中【自動套用格式】。并在彈出的【自動套用格式】對話框中的【選擇方案】欄中選擇【專業型 1】。

8. 設定DataGrid1的字體大小為"X-Small"。此時的DataGrid1為圖03所示:


圖03:設計后的DataGrid組件樣式

9. 把Visual Studio .Net的當前窗口切換到WebForm的代碼編輯窗口,即:WebForm1.aspx.cs文件的編輯窗口。

10. 在WebForm1.aspx.cs文件首部,用下列代碼替換WebForm1.aspx.cs中導入命名空間的代碼:

using System ;
using System.Collections ;
using System.ComponentModel ;
using System.Data ;
using System.Drawing ;
using System.Web ;
using System.Web.SessionState ;
using System.Web.UI ;
using System.Web.UI.WebControls ;
using System.Web.UI.HtmlControls ;
using System.Data.SqlClient ;
11. 在WebForm1.aspx.cs文件的Page_Load事件代碼區添加下列代碼,下列代碼是實現DataGrid組件的數據綁定:
SqlConnection sqlConnection1 = new SqlConnection ( "Server = localhost ; Database = NorthWind ; User ID = sa ; Password = ; " ) ;
//定義數據庫連接
DataSet dataSet1 ;
//創建數據集對象
SqlDataAdapter sqlDataAdapter1 ;
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號 , LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
dataSet1 = new DataSet ( ) ;
sqlDataAdapter1.Fill ( dataSet1 , "employee" ) ;
//以SqlDataAdapter實例來填充本地DataSet數據集
DataView dataView1 = dataSet1.Tables [ "employee" ].DefaultView ;
DataGrid1.DataSource = dataView1 ;
DataGrid1.DataBind ( ) ;
//實現數據綁定

12. 在上述步驟都正確執行后,實現DataGrid數據綁定的全部工作就完成了,如果你使用的是其他類型數據庫,只需對對第十一步驟介紹的代碼中的定義數據連接加以相應的修改就可以了。請各位讀者注意上述代碼中設定DataGrid的中文標頭的實現方法。此時單擊快捷鍵F5,就可以得到如下界面:


圖04:在ASP.NET頁面中DataGrid實現數據綁定時的界面

四.使用DataView實現DataGrid數據排序:

下面就來介紹在上面介紹的項目基礎上使用DataView實現項目中的DataGrid的數據排序,以下面是在上述項目基礎上實現DataGrid數據排序的步驟:

1. 把Visual Stuido .Net當前窗口切換到WebForm的設計界面,并設定DataGrid1組件的"AllowSorting"屬性值為"True"。則此時的DataGrid1組件的列頭就多了一個超鏈接。并且在單擊此超鏈接時,返回列頭的顯示的字符串。DataView就是根據這個返回的字符串來實現DataGrid的數據排序的。圖05是設定DataGrid1的"AllowSorting"屬性值為"True"后,在WebForm中的模樣:


圖05:設定"AllowSorting"屬性值為"True"后的DataGrid1

2. 把Visual Studio .Net的當前窗口切換到WebForm1.aspx.cs的代碼編輯窗口。并在WebForm1.aspx.cs的InitializeComponent過程中添加下列代碼,下列代碼是定義DataGrid1的"SortCommand"事件,此事件是在單擊DataGrid1列頭的超鏈接時被觸發:

this.DataGrid1.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler ( this.DataGrid1_SortCommand ) ;

3. 在WebForm1.aspx.cs的class代碼區中添加下列代碼,下列代碼是定義全局變量,請注意下面定義的變量都是Static類型的:

public static bool blId = true ;
//用以標識DataGrid組件是否已"序號"進行升序排列
public static bool blLast = false ;
//用以標識DataGrid組件是否已"姓氏"進行升序排列
public static bool blFirst=false ;
//用以標識DataGrid組件是否已"名字"進行升序排列
public static bool blTitle= false ;
//用以標識DataGrid組件是否已"職位"進行升序排列
public static bool blBirth =false ;
//用以標識DataGrid組件是否已"生日"進行升序排列

4. 在WebForm1.aspx.cs中的Page_Load事件處理代碼后,添加下列代碼,下列代碼是定義sort過程,此過程的功能是根據選擇不同的列,實現對此列數據的升級序排列:

private void Sort ( string sortString )
{
SqlConnection sqlConnection1 = new SqlConnection ( "Server = localhost ; Database = NorthWind ; User ID = sa ; Password = ; " ) ;
//定義數據庫連接
DataSet dataSet1 ;
//創建數據集對象
SqlDataAdapter sqlDataAdapter1 ;
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
dataSet1 = new DataSet ( ) ;
sqlDataAdapter1.Fill ( dataSet1 , "employee" ) ;
//以SqlDataAdapter實例來填充本地DataSet數據集
DataView dataView1 = dataSet1.Tables [ "employee" ].DefaultView ;
switch ( sortString )
{
case "序號" :
if ( blId )
{
dataView1.Sort = "序號 DESC" ;
blId = false ;
}
else
{
dataView1.Sort = "序號 ASC" ;
blId = true ;
}
break ;
case "姓氏" :
if ( blLast )
{
dataView1.Sort = "姓氏 DESC" ;
blLast = false ;
}
else
{
dataView1.Sort = "姓氏 ASC" ;
blLast = true ;
}
break ;
case "名字" :
if ( blFirst )
{
dataView1.Sort = "名字 DESC" ;
blFirst = false ;
}
else
{
dataView1.Sort = "名字 ASC" ;
blFirst = true ;
}
break ;
case "職務" :
if ( blTitle )
{
dataView1.Sort = "職務 DESC" ;
blTitle = false ;
}
else
{
dataView1.Sort = "職務 ASC" ;
blTitle = true ;
}
break ;
case "生日" :
if ( blBirth )
{
dataView1.Sort = "生日 DESC" ;
blBirth = false ;
}
else
{
dataView1.Sort = "生日 ASC" ;
blBirth = true ;
}
break ;
}
DataGrid1.DataSource = dataView1 ;
DataGrid1.DataBind ( ) ;
//實現數據綁定
}

5. 清除WebForm1.aspx.cs中Page_Load事件處理代碼區中的所有代碼后,并在Page_Load事件處理代碼區中添加下列下列代碼,下列代碼是判斷此Web頁面是否是第一次加載,如果判斷為"True",則對其中的DataGrid1中的數據按照"序號"列名進行升序排列:

if ( IsPostBack == false )
{
Sort ( "序號" ) ;
}

6. 在WebForm1.aspx.cs中的InitializeComponent過程之后,添加下列代碼,下列代碼是DataGrid1的SortCommand事件的處理代碼:

private void DataGrid1_SortCommand ( object source , System.Web.UI.WebControls.DataGridSortCommandEventArgs e )
{
string sColName = e.SortExpression ;
//獲得列名
Sort ( sColName ) ;
//以此列名,并根據當前排序情況進行相應排序
}

7. 在上述步驟都正確執行后,第一種在ASP.NET實現DataGrid中數據排序的方法就介紹完成了,此時單擊快捷鍵F5就可以運行程序,圖06和圖07分別程序按照"生日"對DataGrid進行升、級序排列時的運行界面:


圖06:以"生日" 對DataGrid中的數據進行升序排列


圖07:以"生日" 對DataGrid中的數據進行降序排列

五.使用Sql語句實現DataGrid數據排序:

使用Sql語句來實現對DataGrid組件中數據排序,在操作步驟上雖然相對復雜一點,但功能相對強大一點。其主要思路就是根據DataGrid組件的不同列名,形成不同的Sql語句,從而得到不同的DataSet實例,來實現對DataGrid中數據進行相應排序。下面就在上面完成的【在ASP.NET頁面中使用DataView實現DataGrid數據排序】項目基礎上,加以修改從而完成使用Sql語句來實現DataGrid中數據排序。

1. 首先假設您已經成功完成上面項目,能夠在ASP.NET使用DataView實現對DataGrid中數據進行排序。

2. 把Visual Stuido .Net的當前窗口切換到WebForm1.aspx.cs中,并WebForm1.aspx.cs文件的class代碼區添加下列代碼,下列代碼是創建全局使用的實例:

public DataSet dataSet1 ;
public SqlDataAdapter sqlDataAdapter1 ;

3. 用下列代碼替換WebForm1.aspx.cs中已經定義的sort過程,下面代碼是重新定義sort過程,使其能夠使用Sql語句實現對DataGrid中的數據進行排序:

private void Sort ( string sortString )
{
SqlConnection sqlConnection1 = new SqlConnection ( "Server = localhost ; Database = NorthWind ; User ID = sa ; Password = ; " ) ;
switch ( sortString )
{
case "序號" :
if ( blId )
{
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees ORDER BY 序號 ASC" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blId = false ;
}
else
{
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees ORDER BY 序號 DESC" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blId = true ;
}
break ;
case "姓氏" :
if ( blLast )
{
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees ORDER BY 姓氏 ASC" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blLast = false ;
}
else
{
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees ORDER BY 姓氏 DESC" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blLast = true ;
}
break ;
case "名字" :
if ( blFirst )
{
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees ORDER BY 名字 ASC" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blFirst = false ;
}
else
{
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees ORDER BY 名字 DESC" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blFirst = true ;
}
break ;
case "職務" :
if ( blTitle )
{
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees ORDER BY 職務 ASC" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blTitle = false ;
}
else
{
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees ORDER BY 職務 DESC" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blTitle = true ;
}
break ;
case "生日" :
if ( blBirth )
{
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees ORDER BY 生日 ASC" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blBirth = false ;
}
else
{
sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter ( "SELECT EmployeeID as 序號, LastName as 姓氏 , FirstName as 名字 , Title as 職務 , Birthdate as 生日 From Employees ORDER BY 生日 DESC" , sqlConnection1 ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blBirth = true ;
}
break ;
}
dataSet1 = new DataSet ( ) ;
sqlDataAdapter1.Fill ( dataSet1 , "employee" ) ;
//以SqlDataAdapter實例來填充本地DataSet數據集
DataGrid1.DataSource = dataSet1 ;
DataGrid1.DataBind ( ) ;
//實現數據綁定
}

4. 保存上面的修改步驟,這樣就實現了從DataView到Sql語句實現DataGrid數據排序的轉換。單擊快捷鍵F5,就可以看到圖06和圖07所示界面。

六.總結:

通過以上內容的介紹,我們不僅了解、掌握了在ASP.NET頁面中實現DataGrid中數據排序的二種方法,還應該了解并掌握下面內容:

1. 在ASP.NET中的DataGrid組件的數據綁定。

2. 改變ASP.NET頁面中的DataGrid組件中的表頭提示內容。



作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗