我做了一个datagrid,都是用模板列写的,但是我想实现排序功能.也就是当我点击模板列的标题(headtext)时,就马上按照这个列的升序或降排列.就是不知道怎么写语句.有代码的最好贴代码,我们好共享一下哈!在此表示感谢!

解决方案 »

  1.   

    好像只能按一个字段排序,datagrid自带的
      

  2.   

    我提供个想法:可以将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等。
      

  3.   

    补充一点。目前我管的一个项目,使用到了datagrid控件。从我的使用情况来看,datagrid博大精深。国外甚至有很多程序员都在做关于DataGrid控件的继承和派生的项目。可以去网上搜索搜索。
      

  4.   

    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();
    }
      

  5.   

    carol_li(我的四十年之约)使用这行代码要注意:DataView dv = aDT.DefaultView;
    如果是你使用了dataview中的RowFilter时会对你原有的dataset发生影响。比如你原有的dataset有5条数据,使用dataview中的RowFilter查询到了3条数据,则此时的dataset中就有3条数据了。所以建议你使用我写的那样的方法dataview.table =dataset.table 
      

  6.   

    dataview.table =dataset.table("tableName")
      

  7.   

    我也相知道怎么做 顶
    <%@ 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 就不会了鸟 
    本来想把所有的功能都做在一个表里的 功力不行
      

  8.   

    web里面的DataGrid没办法实现升序、降序的。只有一种顺序。
      

  9.   

    http://blog.csdn.net/haonanernet/archive/2004/12/10/211663.aspx
      

  10.   

    点击表头时,可以传出表头的排序表达式即字段名称.此表达式需要在DataGrid中设定,你取出了表达式,即可把该表达式传入到SQL语句中,即形成了排序.
      

  11.   

    这个问题已经解决拉!
    http://blog.csdn.net/haonanernet/archive/2004/12/10/211663.aspx 这个上面有答案!