本帖最后由 silence929 于 2010-07-28 09:44:39 编辑

解决方案 »

  1.   

    前台代码:asp:DataGrid ID="kjkm_dg" runat="server" AllowSorting="True" AutoGenerateColumns="False"
                    CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None">
                    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                    <Columns>
                        <asp:BoundField DataField="ADDR" HeaderText="ADDR" SortExpression="ADDR" />
                        <asp:BoundField DataField="STNM" HeaderText="STNM" SortExpression="STNM" />
                        <asp:BoundField DataField="ZI" HeaderText="ZI" SortExpression="ZI" />
                    </Columns>
                    <RowStyle BackColor="#EFF3FB" />
                    <EditRowStyle BackColor="#2461BF" />
                    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                    <AlternatingRowStyle BackColor="White" />
    </asp:DataGrid>后台代码: DAL.DALDB aa = new DAL.DALDB();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                if (this.kjkm_dg.Attributes["SortExpression"] == null) //这里kjkm_dg为datagrid   ID
                {
                    this.kjkm_dg.Attributes["SortExpression"] = "addr";  //这里给datagrid增加一个排序属性,且默认排序表达式为kmdm;
                    kjkm_dg.Attributes["SortDirection"] = "ASC"; //这里给datagrid增加一个排序方向属性,且默认为升序排列;
                }
                mikecatbind(); //绑定函数,下面介绍
            }
        }    protected void mikecatbind()
        {
            string sqlStr = "select distinct b.addr,b.stnm,a.zi from st_rsvr_r as a,st_stinfo_b_other as b where RTRIM(a.stcdt)+convert(varchar(19),a.ymdhm,121) in (select RTRIM(c.stcdt)+convert(varchar(19),max(c.ymdhm),121) from st_rsvr_r c  group by stcdt)and a.stcdt = b.stcdt";        DataView dv = new DataView();        string SortExpression = kjkm_dg.Attributes["SortExpression"];
            string SortDirection = kjkm_dg.Attributes["SortDirection"];
            dv = aa.ExecuteDataSet(sqlStr).Tables[0].DefaultView;  //来自web service的dataset,这里随便一个ds就可以;
            dv.Sort = SortExpression + " " + SortDirection; //指定视图的排序方式;
            kjkm_dg.DataSource = dv; //指定数据源
            kjkm_dg.DataBind(); //数据绑定
        }
        protected void kjkm_dg_SortCommand(object source, DataGridSortCommandEventArgs e)
        {
            string SortExpression = e.SortExpression.ToString();  //获得当前排序表达式
            string SortDirection = "ASC"; //为排序方向变量赋初值
            if (SortExpression == kjkm_dg.Attributes["SortExpression"])  //如果为当前排序列
            {
                SortDirection = (kjkm_dg.Attributes["SortDirection"].ToString() == SortDirection ? "DESC" : "ASC");     //获得下一次的排序状态
            }
            kjkm_dg.Attributes["SortExpression"] = SortExpression;
            kjkm_dg.Attributes["SortDirection"] = SortDirection;
            mikecatbind();
        }
       
      

  2.   

    1 获取DataTable的默认视图2 对视图设置排序表达式3 用排序后的视图导出的新DataTable替换就DataTable(Asc升序可省略,多列排序用","隔开)DataView dv = dt.DefaultView;dv.Sort = "id Asc,name Desc";dt = dv.ToTable();
      

  3.   

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AllowSorting="true" OnSorting="GridView1_Sorting" AllowPaging="true" PageSize="10" OnPageIndexChanging="GridView1_PageIndexChanging">   
      <Columns>   
      <asp:BoundField DataField="id" HeaderText="代码" SortExpression="id"/>   
      <asp:BoundField DataField="name" HeaderText="名称" SortExpression="name"/>   
      <asp:TemplateField SortExpression="BUID" HeaderText="BUID">   
      <ItemTemplate>   
      <asp:Label ID="Label1" runat="server" Text=' <%# Bind("ID") %>' ToolTip=' <%# DataBinder.Eval(Container.DataItem, "ID") %>'> </asp:Label>   
      </ItemTemplate>   
      </asp:TemplateField>   
      </Columns>   
      </asp:GridView>   protected void Page_Load(object sender, EventArgs e)   
      {   
      if (!this.IsPostBack)   
      {   
      ViewState["SortOrder"] = "deptid";   
      ViewState["OrderDire"] = "asc";   
      BindGridView();   
      }   
      }     protected void BindGridView()   
      {   
        
      DataSet ds = new DataSet();   
          DataView dv = ds.Tables[0].DefaultView;   
      string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"];   
      dv.Sort = sort;   
      this.GridView1.DataSource = dv;     this.GridView1.DataBind();     }   
      protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)   
      {   
      string vortExp = e.SortExpression;   
      if (ViewState["SortOrder"].ToString() == vortExp)   
      {   
      if ((string)ViewState["OrderDire"] == "desc")   
      {   
      ViewState["OrderDire"] = "asc";   
      }   
      else if ((string)ViewState["OrderDire"] == "asc")   
      {   
      ViewState["OrderDire"] = "desc";   
      }   
      }   
      else   
      {   
      ViewState["SortOrder"] = e.SortExpression;   
      }   
      BindGridView();     }   
      protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)   
      {   
      this.GridView1.PageIndex = e.NewPageIndex;   
      BindGridView();   
      }   可直接在dv.Sort中排序再绑定到gridvew
      

  4.   

    我将数据全部放到了DataTable中,然后才绑定到gridview,直接在DataTable中排序可以么?按钮也是两个普通的button,不是gridview中的
      

  5.   


    DataTable不能排序,要用DataView,然后再转为DataTable
      

  6.   

    protected void Page_Load(object sender, EventArgs e)
        {     
          bingGridview();
               
        }
     private void bingGridview()
        {
            DataSet dt_Data = SqlHelper.GetDataSetWithSql(SqlHelper.ConnString, "select DataMaker,ProSortId,PipeLength from tb_A where DataMaker!='' order by DataMaker,ProSortId");
            DataTable dt_DataOrder = new DataTable();
            dt_DataOrder.Columns.Add("制作人", typeof(string));
            dt_DataOrder.Columns.Add("调压站",typeof(string));
            dt_DataOrder.Columns.Add("工业户", typeof(string));
            dt_DataOrder.Columns.Add("市街", typeof(string));
            dt_DataOrder.Columns.Add("庭院", typeof(string));
            dt_DataOrder.Columns.Add("总计", typeof(string));
            ......
            代码
            ......
            dt_DataOrder.Rows.Add(newRowSum);      
            GridView1.DataSource = dt_DataOrder;
            GridView1.DataBind();
        }
      protected void asce_Click(object sender, EventArgs e)
        {
            
        }
        protected void desc_Click(object sender, EventArgs e)
        {    }