四.使用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组件中的表头提示内容。