Visual Studio Net為編寫WinForm程序(即在Windows平台下運行的程序)所提供的DataGrid組件比起微軟以往的各種開發環境中提供的DataGrid組件都要高級許多其高級的地方就在於不需要再進行任何其他設置或編程DataGrid就能夠對其中的數據分別按照升降序進行排列這種高級功能給我們編程提供了許多方便圖是在WinForm程序中的DataGrid組件按照EmployeeID升序進行排列時的界面
圖在WinForm程序中使用DataGrid對數據進行排序
此時很多的朋友肯定會問這樣的問題Visual Studio Net不僅為編寫WinForm程序提供了DataGrid組件同樣也為編寫WebForm程序(即ASPNET頁面程序)提供了DataGrid組件那麼在WebForm中的DataGrid是否也像在WinForm中的DataGrid那樣具備這樣高級的功能?答案是雖然微軟為WebForm提供的DataGrid組件也考慮了數據排序功能但卻不像為編寫WinForm程序提供的DataGrid組件在實現數據排序功能上的操作步驟那麼簡單在ASPNET頁面中要實現DataGrid組件的數據排序需要設定組件的某些屬性和加入一些處理代碼才可以實現本文就將詳細討論一下這個問題
一.本文中介紹的程序的設計和運行環境
()視窗高級服務器版
()Visual Studio Net中文正式版Net FrameWork SDK版本號
二.ASPNET頁面中DataGrid實現數據排序的實現原理
在ASPNET頁面中實現DataGrid的數據綁定數據排序有二種實現方法這二種方法有異曲同工之效具體如下
在實現ASPNET頁面中的DataGrid組件數據綁定時設定DataGrid組件數據源使用的是DataViewDataView有一個屬性Sort通過Sort屬性設定此數據源以何排序和排序的方式(即升降序)從而實現對DataGrid中數據排序
通過設定Sql語句為數據綁定產生不同的DataSet從而實現DataGrid中的數據排序
這二種方法雖然能夠實現相同的功能但第一種方法實現較簡單但實現功能有限
第二種方法雖然實現起來較復雜但卻可以以此實現較強大的功能但無論那一種方法實現DataGrid的數據綁定是首先要完成的
下面首先介紹DataGrid數據綁定的實現方法
三.ASPNET中DataGrid組件數據綁定實現步驟
在ASPNET中實現DataGrid組件的數據綁定方法和在WinForm中數據綁定的方法基本相似下面是在ASPNET實現DataGrid組件數據綁定的實現步驟
啟動Visual Studio Net
選擇菜單【文件】|【新建】|【項目】後彈出【新建項目】對話框
將【項目類型】設置為【Visual C#項目】
將【模板】設置為【ASPNET Web 應用程序】
在【位置】的文本框中輸入http://localhost/dataGridSort然後單擊【確定】按鈕這樣在Visual Studio Net就會在當前項目文件所在目錄中建立一個名稱為dataGridSort文件夾裡面存放是此項目的項目文件項目中的其他文件存放的位置是IIS默認的Web站點所在的目錄具體如圖所示
圖新建一個ASPNET項目對話框
把Visual Studio Net當前窗口切換到WebForm的設計窗口並從【工具箱】|【Web組件】選項卡中拖入一個DataGrid組件到WebForm的設計窗口名稱為DataGrid
選中DataGrid單擊鼠標右鍵在彈出的菜單中【自動套用格式】並在彈出的【自動套用格式】對話框中的【選擇方案】欄中選擇【專業型 】
設定DataGrid的字體大小為XSmall此時的DataGrid為圖所示
圖設計後的DataGrid組件樣式
把Visual Studio Net的當前窗口切換到WebForm的代碼編輯窗口即WebFormaspxcs文件的編輯窗口
在WebFormaspxcs文件首部用下列代碼替換WebFormaspxcs中導入命名空間的代碼
using System ;
using SystemCollections ;
using SystemComponentModel ;
using SystemData ;
using SystemDrawing ;
using SystemWeb ;
using SystemWebSessionState ;
using SystemWebUI ;
using SystemWebUIWebControls ;
using SystemWebUIHtmlControls ;
using SystemDataSqlClient ;
在WebFormaspxcs文件的Page_Load事件代碼區添加下列代碼下列代碼是實現DataGrid組件的數據綁定
SqlConnection sqlConnection = new SqlConnection ( Server = localhost ; Database = NorthWind ; User ID = sa ; Password = ; ) ;
//定義數據庫連接
DataSet dataSet ;
//創建數據集對象
SqlDataAdapter sqlDataAdapter ;
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
dataSet = new DataSet ( ) ;
sqlDataAdapterFill ( dataSet employee ) ;
//以SqlDataAdapter實例來填充本地DataSet數據集
DataView dataView = dataSetTables [ employee ]DefaultView ;
DataGridDataSource = dataView ;
DataGridDataBind ( ) ;
//實現數據綁定
在上述步驟都正確執行後實現DataGrid數據綁定的全部工作就完成了如果你使用的是其他類型數據庫只需對對第十一步驟介紹的代碼中的定義數據連接加以相應的修改就可以了請各位讀者注意上述代碼中設定DataGrid的中文標頭的實現方法此時單擊快捷鍵F就可以得到如下界面
圖在ASPNET頁面中DataGrid實現數據綁定時的界面
四.使用DataView實現DataGrid數據排序
下面就來介紹在上面介紹的項目基礎上使用DataView實現項目中的DataGrid的數據排序以下面是在上述項目基礎上實現DataGrid數據排序的步驟
把Visual Stuido Net當前窗口切換到WebForm的設計界面並設定DataGrid組件的AllowSorting屬性值為True則此時的DataGrid組件的列頭就多了一個超鏈接並且在單擊此超鏈接時返回列頭的顯示的字符串DataView就是根據這個返回的字符串來實現DataGrid的數據排序的圖是設定DataGrid的AllowSorting屬性值為True後在WebForm中的模樣
圖設定AllowSorting屬性值為True後的DataGrid
把Visual Studio Net的當前窗口切換到WebFormaspxcs的代碼編輯窗口並在WebFormaspxcs的InitializeComponent過程中添加下列代碼下列代碼是定義DataGrid的SortCommand事件此事件是在單擊DataGrid列頭的超鏈接時被觸發
thisDataGridSortCommand += new SystemWebUIWebControlsDataGridSortCommandEventHandler ( thisDataGrid_SortCommand ) ;
在WebFormaspxcs的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組件是否已生日進行升序排列
在WebFormaspxcs中的Page_Load事件處理代碼後添加下列代碼下列代碼是定義sort過程此過程的功能是根據選擇不同的列實現對此列數據的升級序排列
private void Sort ( string sortString )
{
SqlConnection sqlConnection = new SqlConnection ( Server = localhost ; Database = NorthWind ; User ID = sa ; Password = ; ) ;
//定義數據庫連接
DataSet dataSet ;
//創建數據集對象
SqlDataAdapter sqlDataAdapter ;
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
dataSet = new DataSet ( ) ;
sqlDataAdapterFill ( dataSet employee ) ;
//以SqlDataAdapter實例來填充本地DataSet數據集
DataView dataView = dataSetTables [ employee ]DefaultView ;
switch ( sortString )
{
case 序號 :
if ( blId )
{
dataViewSort = 序號 DESC ;
blId = false ;
}
else
{
dataViewSort = 序號 ASC ;
blId = true ;
}
break ;
case 姓氏 :
if ( blLast )
{
dataViewSort = 姓氏 DESC ;
blLast = false ;
}
else
{
dataViewSort = 姓氏 ASC ;
blLast = true ;
}
break ;
case 名字 :
if ( blFirst )
{
dataViewSort = 名字 DESC ;
blFirst = false ;
}
else
{
dataViewSort = 名字 ASC ;
blFirst = true ;
}
break ;
case 職務 :
if ( blTitle )
{
dataViewSort = 職務 DESC ;
blTitle = false ;
}
else
{
dataViewSort = 職務 ASC ;
blTitle = true ;
}
break ;
case 生日 :
if ( blBirth )
{
dataViewSort = 生日 DESC ;
blBirth = false ;
}
else
{
dataViewSort = 生日 ASC ;
blBirth = true ;
}
break ;
}
DataGridDataSource = dataView ;
DataGridDataBind ( ) ;
//實現數據綁定
}
清除WebFormaspxcs中Page_Load事件處理代碼區中的所有代碼後並在Page_Load事件處理代碼區中添加下列下列代碼下列代碼是判斷此Web頁面是否是第一次加載如果判斷為True則對其中的DataGrid中的數據按照序號列名進行升序排列
if ( IsPostBack == false )
{
Sort ( 序號 ) ;
}
在WebFormaspxcs中的InitializeComponent過程之後添加下列代碼下列代碼是DataGrid的SortCommand事件的處理代碼
private void DataGrid_SortCommand ( object source SystemWebUIWebControlsDataGridSortCommandEventArgs e )
{
string sColName = eSortExpression ;
//獲得列名
Sort ( sColName ) ;
//以此列名並根據當前排序情況進行相應排序
}
在上述步驟都正確執行後第一種在ASPNET實現DataGrid中數據排序的方法就介紹完成了此時單擊快捷鍵F就可以運行程序圖和圖分別程序按照生日對DataGrid進行升級序排列時的運行界面
圖以生日 對DataGrid中的數據進行升序排列
圖以生日 對DataGrid中的數據進行降序排列
五.使用Sql語句實現DataGrid數據排序
使用Sql語句來實現對DataGrid組件中數據排序在操作步驟上雖然相對復雜一點但功能相對強大一點其主要思路就是根據DataGrid組件的不同列名形成不同的Sql語句從而得到不同的DataSet實例來實現對DataGrid中數據進行相應排序下面就在上面完成的【在ASPNET頁面中使用DataView實現DataGrid數據排序】項目基礎上加以修改從而完成使用Sql語句來實現DataGrid中數據排序
首先假設您已經成功完成上面項目能夠在ASPNET使用DataView實現對DataGrid中數據進行排序
把Visual Stuido Net的當前窗口切換到WebFormaspxcs中並WebFormaspxcs文件的class代碼區添加下列代碼下列代碼是創建全局使用的實例
public DataSet dataSet ;
public SqlDataAdapter sqlDataAdapter ;
用下列代碼替換WebFormaspxcs中已經定義的sort過程下面代碼是重新定義sort過程使其能夠使用Sql語句實現對DataGrid中的數據進行排序
private void Sort ( string sortString )
{
SqlConnection sqlConnection = new SqlConnection ( Server = localhost ; Database = NorthWind ; User ID = sa ; Password = ; ) ;
switch ( sortString )
{
case 序號 :
if ( blId )
{
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees ORDER BY 序號 ASC sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blId = false ;
}
else
{
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees ORDER BY 序號 DESC sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blId = true ;
}
break ;
case 姓氏 :
if ( blLast )
{
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees ORDER BY 姓氏 ASC sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blLast = false ;
}
else
{
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees ORDER BY 姓氏 DESC sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blLast = true ;
}
break ;
case 名字 :
if ( blFirst )
{
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees ORDER BY 名字 ASC sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blFirst = false ;
}
else
{
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees ORDER BY 名字 DESC sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blFirst = true ;
}
break ;
case 職務 :
if ( blTitle )
{
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees ORDER BY 職務 ASC sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blTitle = false ;
}
else
{
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees ORDER BY 職務 DESC sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blTitle = true ;
}
break ;
case 生日 :
if ( blBirth )
{
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees ORDER BY 生日 ASC sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blBirth = false ;
}
else
{
sqlDataAdapter = new SystemDataSqlClientSqlDataAdapter ( SELECT EmployeeID as 序號 LastName as 姓氏 FirstName as 名字 Title as 職務 Birthdate as 生日 From Employees ORDER BY 生日 DESC sqlConnection ) ;
//以定義的數據庫連接來初始化SqlDataAdapter實例
blBirth = true ;
}
break ;
}
dataSet = new DataSet ( ) ;
sqlDataAdapterFill ( dataSet employee ) ;
//以SqlDataAdapter實例來填充本地DataSet數據集
DataGridDataSource = dataSet ;
DataGridDataBind ( ) ;
//實現數據綁定
}
保存上面的修改步驟這樣就實現了從DataView到Sql語句實現DataGrid數據排序的轉換單擊快捷鍵F就可以看到圖和圖所示界面
六.總結
通過以上內容的介紹我們不僅了解掌握了在ASPNET頁面中實現DataGrid中數據排序的二種方法還應該了解並掌握下面內容
在ASPNET中的DataGrid組件的數據綁定
改變ASPNET頁面中的DataGrid組件中的表頭提示內容
From:http://tw.wingwit.com/Article/program/net/201311/15768.html