【问题标题】:GridView as DataTable source sorts only for the first timeGridView 作为 DataTable 源仅第一次排序
【发布时间】:2012-05-10 14:49:44
【问题描述】:

我使用this MSDN link 中的代码在我的GridView 上实现了排序,其中DataTable 作为DataSource。但是,当我单击任何列时,我的网格第一次排序,之后它不会在单击任何其他列时排序。

PageLoad() 事件中的代码 -

if (!Page.IsPostBack)
{
      HView hv = new HView ();
      DataTable HTable = new DataTable("hTable");
      HTable = hv.FillTable();
      Session["hTable"] = HTable;
      GridView2.DataSource = Session["hTable"];
      GridView2.DataBind();
}    

排序事件中的代码 -

    protected void GridView2_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable notesDT = Session["hTable"] as DataTable;
        if (notesDT != null)
        {                
            notesDT.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortDirection);                
            GridView2.DataSource = Session["hTable"];
            GridView2.DataBind();
        }
    }

有人知道我做错了什么吗?

编辑:我刚刚意识到这一点。如果我选择一个特定的行,我有另一个视图,其中填充了有关该行的详细信息。当我在尝试对任何列进行排序之前先查看一些行详细信息时,排序工作得非常好,任意次数。但是,如果我在选择一行之前尝试排序,它只能工作一次。

【问题讨论】:

  • 你有没有在GridView2_Sorting中设置断点,看是否调用过,Session["hTable"]是否为空?
  • @TimSchmelter 是的,我已经检查过了,Session["hTable"] 不为空,它确实是第一次排序.. 之后,它也不为空,就是这样让我感到困惑,没有什么“似乎”错了..

标签: asp.net gridview datatable


【解决方案1】:

您在排序事件中使用DataTable 作为DataSource,但您应该改用排序视图。对视图进行排序不会改变表中数据的排序顺序,只会改变视图中的顺序。

protected void GridView2_Sorting(object sender, GridViewSortEventArgs e)
{
    DataTable notesDT = Session["hTable"] as DataTable;
    if (notesDT != null)
    {                
        notesDT.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortDirection);                
        GridView2.DataSource = notesDT.DefaultView;
        GridView2.DataBind();
    }
}

编辑:虽然我刚刚注意到您使用的是来自MSDN 的相同代码。

您也可以尝试从视图中创建一个新的 DataTable:

GridView2.DataSource = notesDT.DefaultView.ToTable(true);

【讨论】:

  • 是的,我使用的是相同的代码。我也尝试将排序视图作为数据源,但是,网格仍然未排序。
  • @neuDev33:奇怪。尝试从我刚刚添加的排序视图创建另一个表。
  • 我试过了,还是没有排序。当我在调试模式下检查时,排序表达式和排序方向是正确的,我不确定还有什么问题会导致它不起作用。
【解决方案2】:

您不需要将数据表存储到会话中。实际上将整个数据表放入会话中根本不是一个好主意。有什么特别的原因吗?

【讨论】:

  • this MSDN link 我提到了。你能给我指出一个更好的方法吗?或者我至少希望当前版本能够正常工作,因为我也遇到了问题。
  • @neuDev33:如果启用了 ViewState,则根本不需要存储 DataTable。然后,您只需在第一次加载和排序、过滤、分页、更新等操作时提取数据,而不是在每次回发时提取数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 2010-11-02
相关资源
最近更新 更多