【问题标题】:Sorting in ASP.NET Gridview在 ASP.NET Gridview 中排序
【发布时间】:2019-03-29 00:35:03
【问题描述】:

它的阿伦。这次我在 ASP.Net 中有一个排序问题。对于第一次单击,降序工作正常,但在第二次单击时不会再次升序。它仍然按降序排列。我正在使用 Tableadapter 来显示 gridview 内容。请检查代码并纠正我遗漏的地方。

    protected void gv1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sdir = e.SortDirection == SortDirection.Ascending ? "DESC" : "ASC";
        DataView dv = new DataView(ds2.AllocationPending(ClientLoggedIn.Text));
        dv.Sort = e.SortExpression + " " + sdir;
        gv1.DataSource = dv;
        gv1.DataBind();
    }

另外请解释 - 有没有其他方法可以在没有 Dataview 的情况下应用排序。

谢谢。

【问题讨论】:

标签: gridview


【解决方案1】:

我已经找到了解决这个问题的方法。原因是 e.SortDirection 总是返回 Ascending。所以我需要将 e.SortDirection 存储在 ViewState 中,并使用该值对数据视图进行排序。更新代码如下:

    protected void gv1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string SortDirection = "DESC";
        if (ViewState["SortExpression"] != null)
        {
            if (ViewState["SortExpression"].ToString() == e.SortExpression)
            {
                ViewState["SortExpression"] = null;
                SortDirection = "ASC";
            }
            else
            {
                ViewState["SortExpression"] = e.SortExpression;
            }
        }
        else
        {
            ViewState["SortExpression"] = e.SortExpression;
        }

        DataView dv = new DataView(ds2.AllocationPending(ClientLoggedIn.Text));
        dv.Sort = e.SortExpression + " " + SortDirection;
        gv1.DataSource = dv;
        gv1.DataBind();
    }

【讨论】:

  • 我不明白 e.SortDirection 的用途……微软实际上说它应该自动更改,如果您单击同一列标题两次……
【解决方案2】:
 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {      
        DataTable dtSortTable = GridView1.DataSource as DataTable;

        if (dtSortTable != null)
        {
            DataView dvSortedView = new DataView(dtSortTable);

            dvSortedView.Sort = e.SortExpression + "" + getSortDirectionString(e.SortDirection);

            GridView1.DataSource = dvSortedView;
            GridView1.DataBind();
        }
    }

private string getSortDirectionString(SortDirection sortDirection)
    {
        string newSortDirection = String.Empty;
        if(sortDirection== SortDirection.Ascending)
        {
            newSortDirection = "DESC";
        }
        else
        {
            newSortDirection = "ASC";
        }
        return newSortDirection;
}

试试这个代码来排序gridview

【讨论】:

  • 我没有使用 Radgrid。我正在开发 ASP.Net Gridview。以上代码仅适用于 Radgrid。所以对我没用。
  • 感谢 Chetan 提供的 gridview 代码。但它与我在问题中发布的代码逻辑相同。您将 Sortdirection 称为单独的函数,而我将其包含在同一个函数中。您的代码中还有一个小的更正 - if(sortDirection== SortDirection.Ascending) then newSortDirection = "DESC";无论如何,它第一次工作正常,但第二次就不行了。请看那个。
  • 我已经找到了解决这个问题的方法。原因是 e.SortDirection 总是返回 Ascending。所以我需要将 e.SortDirection 存储在 ViewState 中,并使用该值对数据视图进行排序。更新代码如下:
  • 字符串 SortDirection = "DESC"; if (ViewState["SortExpression"] != null) { if (ViewState["SortExpression"].ToString() == e.SortExpression) { ViewState["SortExpression"] = null;排序方向 = "ASC"; } else { ViewState["SortExpression"] = e.SortExpression; } } else { ViewState["SortExpression"] = e.SortExpression; }
猜你喜欢
  • 2011-01-21
  • 2023-03-12
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 2017-03-28
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多