ASP.NET中實現DataGrid資料排序

來源:互聯網
上載者:User
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組件中的表頭提示內容。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。