在asp.net页面

时间:2015-12-17 08:07:53

标签: c# asp.net sorting gridview

我在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)
    {
    }

1 个答案:

答案 0 :(得分:2)

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

进一步审核后编辑:

您的代码执行此操作:

dt1.DefaultView.Sort = ...

它改变了与DataTable关联的默认DataView的排序。

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

GridOpen.DataSource = dt1;

我相信默认DataView不会用于数据绑定。 (自从我这么做以后,我可能还是错了)。

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

GridOpen.DataSource = dt1.DefaultView;

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