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组件中的表头提示内容