【问题标题】:sorting is not working on gridview in asp.net page排序不适用于asp.net页面中的gridview
【发布时间】:2016-03-23 14:57:47
【问题描述】:

我在我的 asp.net 页面上使用了 gridview。并写了一个排序的代码,但问题是排序不起作用。你能告诉我我做错了什么吗?

gridview绑定代码

DataSet _ds = _fOrderWrapper.ExecuteDataSet();
   ViewState["FOrders"] = _rows;
   lblFinalisedCount.Text = _ds.Tables[0].Rows.Count.ToString();
   GridOpen.DataSource = _ds.Tables[0];
   ViewState["dt"] = _ds.Tables[0];
   ViewState["sort"] = "ASC";
    GridOpen.DataBind();
    UpdatePanel1.Update();

排序事件代码:

try
    {
        DataTable dt1 = (DataTable)ViewState["dt"];
        if (dt1.Rows.Count > 0)
        {
            if (Convert.ToString(ViewState["sort"]) == "ASC")
            {
                dt1.DefaultView.Sort = e.SortExpression +" " + "DESC";
                ViewState["sort"] = "Desc";
            }
            else
            {
                dt1.DefaultView.Sort = e.SortExpression +" "+ "ASC";
                ViewState["sort"] = "ASC";
            }
            GridOpen.DataSource = dt1;
            GridOpen.DataBind();
            UpdatePanel1.Update();
        }
    }
    catch (Exception ex)
    {
    }

【问题讨论】:

    标签: c# asp.net sorting gridview


    【解决方案1】:

    您的代码可能首先点击排序事件代码,然后再执行常规数据绑定代码。第二个数据绑定消除了第一个数据绑定的影响。尝试在每个位置放置断点。当 ASP.NET 处理更新面板的请求时,它会运行整个页面生命周期,而不仅仅是触发更新的事物的事件处理程序。

    进一步审查后编辑:

    您的代码会这样做:

    dt1.DefaultView.Sort = ...
    

    这会更改与 DataTable 关联的默认 DataView 的排序。

    但随后它将gridview的数据源设置为DataTable本身。

    GridOpen.DataSource = dt1;
    

    我相信默认数据视图没有用于数据绑定。 (自从我这样做以来已经有一段时间了,我可能仍然是错的)。

    我认为你需要将 GridView 绑定到默认的 DataView:

    GridOpen.DataSource = dt1.DefaultView;
    

    我认为在绑定到 DataTable 时不会自动使用 DefaultView 的原因是,在绑定到数据源时,您将无法绕过 DataView。

    【讨论】:

    • 感谢您的回复,当我按下 gridview 中的排序时,当我将数据表分配给 gridview 时,我表明在分配给我的 gridview 的数据表中没有执行短路class="comcopy">感谢您的回复跨度>
    • 表示我的 dt1 是相同的数据,没有排序
    • gridview 绑定函数在if (!IsPostBack) { BindFinalizedGrid(); } 所以这不会再次绑定我的gridview
    • 哦,是的,那是另一回事。不要将 GridView 绑定到 DataTable。 DataTables 总是按照它们从数据库中出来的顺序排序,你不会改变它。将 GridView 绑定到 DataView - 在您的情况下,dt1.DefaultView DataView
    • 是的。我做了这个GridOpen.DataSource = dt1.DefaultView;我给你标记请在你的答案中添加这部分可能有人再次帮助这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2012-07-10
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多