【问题标题】:Bidirectional sorting in gridviewgridview中的双向排序
【发布时间】:2011-07-25 07:10:30
【问题描述】:

如何在 GridView 中实现双向排序,条件是我的 GridView 不是绑定到 SQL 而是绑定到 datatable-column-row 和数据集。

谢谢!

【问题讨论】:

    标签: c# .net asp.net sorting gridview


    【解决方案1】:

    第一次绑定时,将数据表放入 Viewstate 中。

    gridView1.DataBind();
    ViewState["dtbl"] = YourDataTable
    

    这是允许您执行此操作的代码...

    protected void ComponentGridView_Sorting(object sender, GridViewSortEventArgs e)
    {
    DataTable dataTable = ViewState["dtbl"] as DataTable;
    
    if (dataTable != null)
    {
        DataView dataView = new DataView(dataTable);
        dataView.Sort = e.SortExpression + " " + ConvertSortDirection(e.SortDirection);
    
        ComponentGridView.DataSource = dataView;
        ComponentGridView.DataBind();
    }
    }
    
    private string ConvertSortDirection(SortDirection sortDirection)
    {
    string newSortDirection = String.Empty;
    
    switch (sortDirection)
    {
        case SortDirection.Ascending:
            newSortDirection = "ASC";
            break;
    
        case SortDirection.Descending:
            newSortDirection = "DESC";
            break;
    }
    
    return newSortDirection;
    }
    

    详情请看这篇MSDN文章GridView.Sorting

    【讨论】:

    • 感谢您的意见。但代码总是将所选列排序为升序
    • 不,它不支持 desc。它首先按升序排序,然后仅保持升序。
    • 在代码中排序方向没有改变。它仅保留 ASC
    • GridView SortExpression 始终保持为“升序”,只需添加一个 if 或一个 ?:-Block 从 asc 切换到 desc,反之亦然,将值保存到类变量中。
    【解决方案2】:

    在您的数据绑定方法中,您将初始化视图状态,然后在您的排序事件中,您将执行以下操作。

    void gvReport_Sorting(object sender, GridViewSortEventArgs e)
    {        
        System.Data.DataTable dataTable = ViewState["dataTable"] as System.Data.DataTable;
        string sortDirection = (ViewState["sortDirection"].ToString() == "ASC" ? "DESC" : "ASC");
        ViewState["sortDirection"] = sortDirection;
    
        if (dataTable != null)
        {
            System.Data.DataView dataView = new System.Data.DataView(dataTable);
            dataView.Sort = String.Format("{0} {1}", e.SortExpression, sortDirection);
    
            gvReport.DataSource = dataView;
            gvReport.DataBind();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2012-03-30
      相关资源
      最近更新 更多