datagrid排序的若干问题 我做了一个datagrid,都是用模板列写的,但是我想实现排序功能.也就是当我点击模板列的标题(headtext)时,就马上按照这个列的升序或降排列.就是不知道怎么写语句.有代码的最好贴代码,我们好共享一下哈!在此表示感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好像只能按一个字段排序,datagrid自带的 我提供个想法:可以将datagrid绑定DataView。举例代码如下:dtView dataview (定义方法,自己找书)ds dataset (ds为查询后的结果集)dtgrid datagrid控件dtview.table =ds.table("tablname")开始当点击模板列的某个标题的时候,获得其对应的字段,比如id甚至可以获得需要排序的方式,比如当前为正序时,点击后为逆序(desc) 。反之则为正序(asc) ,然后继续:dtview.Sort = "id asc "dtgrid.datasource = dtview dtgrid.databind 结束当点击模板列的某个标题的时候,重复前面的开始到结束的过程。存在的问题:1,dataset中存放的为查询时的结果集,不一定是当前数据库的最新数据;从上面的考虑来看,datagrid等控件,不一定非得绑定dataset,可以帮定dataview,datatable等。 补充一点。目前我管的一个项目,使用到了datagrid控件。从我的使用情况来看,datagrid博大精深。国外甚至有很多程序员都在做关于DataGrid控件的继承和派生的项目。可以去网上搜索搜索。 private void DataGridReport1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e) { DataTable aDT = (DataTable) Session["COAQuery"]; DataGridISN = (DataGrid) source; string sNewSortExpression = e.SortExpression.ToString(); DataView dv = aDT.DefaultView; dv.Sort = sNewSortExpression; DataGridISN.DataSource = dv; DataGridISN.DataBind(); } carol_li(我的四十年之约)使用这行代码要注意:DataView dv = aDT.DefaultView;如果是你使用了dataview中的RowFilter时会对你原有的dataset发生影响。比如你原有的dataset有5条数据,使用dataview中的RowFilter查询到了3条数据,则此时的dataset中就有3条数据了。所以建议你使用我写的那样的方法dataview.table =dataset.table dataview.table =dataset.table("tableName") 我也相知道怎么做 顶<%@ Page Language="VB" AutoEventWireup="True" Debug="True" %><%@ Import Namespace= System.Data.SqlClient %><%@ Import Namespace= System.Data %><!--#Include File="002.xml"--><html><Script Language="VB" Runat="Server">Dim dtDataTable As DataTable=GetTable("db1", "Members")Sub Page_Load(Sender As Object, e As EventArgs) If Page.IsPostBack=False Then txtHidden.Text="UserName" dgA.DataSource=dtDataTable.DefaultView Page.DataBind() End IfEnd SubSub dgA_PageChg(Sender As Object, e As DataGridPageChangedEventArgs) If txtHidden.Enabled=True Then dtDataTable.DefaultView.Sort=txtHidden.Text Else dtDataTable.DefaultView.Sort=txtHidden.Text & " Desc" End If dgA.CurrentPageIndex = e.NewPageIndex dgA.DataSource=dtDataTable.DefaultView Page.DataBind()End SubSub dgA_Sort(Sender As Object, e As DataGridSortCommandEventArgs) If txtHidden.Enabled=False Then'TextBox 的Text 属性用来记录所要排序的字段名称,而Enabled 属性用来表示排序的方式是升幂还是降序 dtDataTable.DefaultView.Sort=e.SortExpression Else dtDataTable.DefaultView.Sort=e.SortExpression & " Desc" End If txtHidden.Enabled=Not txtHidden.Enabled'没了只能排一次序 txtHidden.Text=e.SortExpression dgA.DataSource=dtDataTable.DefaultView Page.DataBind()End Sub</Script><head><title>字段的排序</title></head><body><Form id="Form1" Runat="Server"><ASP:DataGrid Id="dgA" AllowPaging="True" PageSize="5" OnPageIndexChanged="dgA_PageChg" Runat="Server" PagerStyle-Mode="NumericPages" BorderColor="#808080"HeaderStyle-Font-Names="Courier New" HeaderStyle-BackColor="#D1DCEB" HeaderStyle-HorizontalAlign="Center" AllowSorting="True" OnSortCommand="dgA_Sort" Width="774px" Height="143px"> <HeaderStyle HorizontalAlign="Center" Font-Names="Courier New" BackColor="#D1DCEB"></HeaderStyle> <PagerStyle Mode="NumericPages"></PagerStyle></ASP:DataGrid><ASP:TextBox Id="txtHidden" Runat="Server" Visible="False" Enabled="False"/></Form></body></html>////////////////////////////////////////////////////////////////////////////////但是用了ItemTemplate 就不会了鸟 本来想把所有的功能都做在一个表里的 功力不行 web里面的DataGrid没办法实现升序、降序的。只有一种顺序。 http://blog.csdn.net/haonanernet/archive/2004/12/10/211663.aspx 点击表头时,可以传出表头的排序表达式即字段名称.此表达式需要在DataGrid中设定,你取出了表达式,即可把该表达式传入到SQL语句中,即形成了排序. 这个问题已经解决拉!http://blog.csdn.net/haonanernet/archive/2004/12/10/211663.aspx 这个上面有答案! 请问下头部文件和底部文件如何连接? 我的PagedDataSource与AspnetPager配合分页不起作用,求哥哥们帮我看看 asp.net写的静态网站,有网站打包器吗,可以实现转化成.exe格式直接双击查看吗 在前台代码中操作数据库,最大的弊端是什么? c# web程序的treeview控件怎么实现弹出右键自定义菜单 关于一个word上传的问题 请问vs.net再2003得系统下登陆域后无法调试得问题 jquery 图片显示 高分求助 FTP 高手请进 关于DataGridCommandEventAgrs的问题? 初学C#和ASP。NET推荐好书 急用 谢谢
举例代码如下:
dtView dataview (定义方法,自己找书)
ds dataset (ds为查询后的结果集)
dtgrid datagrid控件dtview.table =ds.table("tablname")
开始
当点击模板列的某个标题的时候,获得其对应的字段,比如id甚至可以获得需要排序的方式,比如当前为正序时,点击后为逆序(desc) 。反之则为正序(asc) ,然后继续:
dtview.Sort = "id asc "
dtgrid.datasource = dtview
dtgrid.databind
结束
当点击模板列的某个标题的时候,重复前面的开始到结束的过程。
存在的问题:
1,dataset中存放的为查询时的结果集,不一定是当前数据库的最新数据;
从上面的考虑来看,datagrid等控件,不一定非得绑定dataset,可以帮定dataview,datatable等。
{
DataTable aDT = (DataTable) Session["COAQuery"]; DataGridISN = (DataGrid) source;
string sNewSortExpression = e.SortExpression.ToString();
DataView dv = aDT.DefaultView;
dv.Sort = sNewSortExpression; DataGridISN.DataSource = dv;
DataGridISN.DataBind();
}
如果是你使用了dataview中的RowFilter时会对你原有的dataset发生影响。比如你原有的dataset有5条数据,使用dataview中的RowFilter查询到了3条数据,则此时的dataset中就有3条数据了。所以建议你使用我写的那样的方法dataview.table =dataset.table
<%@ Page Language="VB" AutoEventWireup="True" Debug="True" %>
<%@ Import Namespace= System.Data.SqlClient %>
<%@ Import Namespace= System.Data %>
<!--#Include File="002.xml"--><html><Script Language="VB" Runat="Server">
Dim dtDataTable As DataTable=GetTable("db1", "Members")
Sub Page_Load(Sender As Object, e As EventArgs)
If Page.IsPostBack=False Then
txtHidden.Text="UserName"
dgA.DataSource=dtDataTable.DefaultView
Page.DataBind()
End If
End SubSub dgA_PageChg(Sender As Object, e As DataGridPageChangedEventArgs)
If txtHidden.Enabled=True Then
dtDataTable.DefaultView.Sort=txtHidden.Text
Else
dtDataTable.DefaultView.Sort=txtHidden.Text & " Desc"
End If
dgA.CurrentPageIndex = e.NewPageIndex
dgA.DataSource=dtDataTable.DefaultView
Page.DataBind()
End SubSub dgA_Sort(Sender As Object, e As DataGridSortCommandEventArgs)
If txtHidden.Enabled=False Then'TextBox 的Text 属性用来记录所要排序的字段名称,而Enabled 属性用来表示排序的方式是升幂还是降序
dtDataTable.DefaultView.Sort=e.SortExpression
Else
dtDataTable.DefaultView.Sort=e.SortExpression & " Desc"
End If
txtHidden.Enabled=Not txtHidden.Enabled'没了只能排一次序
txtHidden.Text=e.SortExpression
dgA.DataSource=dtDataTable.DefaultView
Page.DataBind()
End Sub
</Script><head>
<title>字段的排序</title>
</head><body><Form id="Form1" Runat="Server">
<ASP:DataGrid Id="dgA" AllowPaging="True" PageSize="5" OnPageIndexChanged="dgA_PageChg" Runat="Server" PagerStyle-Mode="NumericPages" BorderColor="#808080"
HeaderStyle-Font-Names="Courier New" HeaderStyle-BackColor="#D1DCEB" HeaderStyle-HorizontalAlign="Center" AllowSorting="True" OnSortCommand="dgA_Sort" Width="774px" Height="143px">
<HeaderStyle HorizontalAlign="Center" Font-Names="Courier New" BackColor="#D1DCEB"></HeaderStyle>
<PagerStyle Mode="NumericPages"></PagerStyle>
</ASP:DataGrid>
<ASP:TextBox Id="txtHidden" Runat="Server" Visible="False" Enabled="False"/>
</Form></body>
</html>
////////////////////////////////////////////////////////////////////////////////
但是用了ItemTemplate 就不会了鸟
本来想把所有的功能都做在一个表里的 功力不行
http://blog.csdn.net/haonanernet/archive/2004/12/10/211663.aspx 这个上面有答案!