代码之家  ›  专栏  ›  技术社区  ›  Etienne

在“代码隐藏”中为ASP.net中的GridView创建排序的代码?

  •  0
  • Etienne  · 技术社区  · 16 年前

    这是我的页面加载事件代码

                OdbcConnection myConnection;
                DataSet dataSet = new DataSet();
                OdbcDataAdapter adapter;
    
                //making my connection
                myConnection = new OdbcConnection(ConfigurationManager.ConnectionStrings  ["ODBC_ConnectionString"].ConnectionString);
    
                adapter = new OdbcDataAdapter("SELECT * from Company", myConnection);
    
                adapter.Fill(dataSet, "MyData");
    
                GridView1.DataSource = dataSet;
                Session["DataSource"] = dataSet;
                GridView1.DataBind();
    

    这是我的PageIndexChanging事件代码,一切正常。

               DataSet ds = new DataSet();
    
                if (Session["DataSource"] != null)
                    ds = ((DataSet)Session["DataSource"]);
    
                GridView1.DataSource = ds;
                GridView1.PageIndex = e.NewPageIndex;
                this.GridView1.DataBind();
    

    现在我需要什么代码来创建排序事件?

    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
            ?????????????????????????
        }
    

    艾蒂安

    2 回复  |  直到 10 年前
        1
  •  1
  •   aquinas    16 年前

    我通常这样做:

     public string SortField {
                get {
                    return (string) ViewState["_sortField"];
                }
                set {
                    ViewState["_sortField"] = value;
                }
            }
            public string SortDir {
                get {
                    return (string) ViewState["_sortDir"];
                }
                set {
                    ViewState["_sortDir"] = value;
                }
            }
    

    将执行数据绑定的代码放到另一个方法中,因为您必须在排序、分页和页面首次加载时调用它。例如,将其称为DoDataBind()。然后在DoDataBind()中

    DataTable dt = yourDataSet.Tables[0];
    dt.DefaultView.Sort = SortField + " " + SortDir;
    
    GridView1.DataSource = dt.DefaultView;
    GridView1.DataBind();
    

    那么您的事件如下所示:

    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) {
    
                if (e.SortExpression == SortField && SortDir != "desc") {
                    SortDir = "desc";
                }
                else {
                    SortDir = "asc";
                }
    
                SortField = e.SortExpression;
    
                DoDataBind();
            }
    

    然后在aspx页面中,您需要指定SortExpression是什么。例如:

    <asp:BoundField DataField="FIRSTNAME" 
    HeaderText="First Name" SortExpression="FIRSTNAME" />
    
        2
  •  0
  •   SirDemon    16 年前

    ds.Tables[0].Select(filterExp, sortExp, etc...);