【问题标题】:Sorting a GridView Bound to a Dataset, DataTable null on cast?对绑定到数据集的 GridView 进行排序,DataTable 是否为 null?
【发布时间】:2013-06-30 04:16:53
【问题描述】:

到处都在问这个问题,但我遇到了一个我在其他任何地方都没有见过的问题,我不知道是什么原因造成的,也不知道如何解决。该问题与按列对 GridView 进行排序有关;我在网上找到的Sorting 方法的代码无效。这是我所拥有的:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // Initial DataBind()
        BindGrid();
    }
    // Add dynamically created controls manually each time
    AddDropDowns();
}

protected void MainGrid_Sorting(object sender, GridViewSortEventArgs e)
{
    // This DataBind() may be redundant
    // Removing it didn't fix anything though.
    BindGrid();
    DataTable dataTable = MainGrid.DataSource as DataTable;
    // This block is never being entered, dataTable is always null
    if (dataTable != null)
    {
        DataView dataView = new DataView(dataTable);
        dataView.Sort = e.SortExpression + " " + "ASC";
        MainGrid.DataSource = dataView;
        MainGrid.DataBind();
    }            
}

public void BindGrid()
{
    // Prep the datasource for binding with fresh search results 
    BuildSearch();
    // And bind it
    MainGrid.DataSource = SearchResults.Products;
    MainGrid.DataBind();
}

问题是执行实际排序的块(如上所示)从未被输入,因为dataTable 在该检查中始终为空。我想这是因为MainGrid.DataSource(这是一个DataSet)也是空的,但是当我在调试期间检查它时,令我惊讶的是MainGrid.DataSourcenot为空。为什么要使用asdataTable 转换为null?为什么没有其他人使用这种方法遇到这个问题? (我在 asp.net 论坛上以几乎相同的用例找到了这段代码)

我对此感到非常困惑,我觉得它应该如此简单。感谢任何帮助,包括一般的 ASP.net 帮助,因为我是该框架的新手。如果有人需要更多信息/代码,请告诉我,我很乐意更新帖子。

编辑:已解决:为了解决这个问题,我将实现从 DataSet 切换到 DataTable,代码看起来几乎完全相同,只是项目中其他地方的声明发生了变化。

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    据我所知,很难从代码 sn-p 中找到它为什么为 NULL 但我可以告诉你,在你绑定数据表gridview时,将数据表置于视图状态或会话中更好地置于视图状态,然后在排序时检索数据表

    【讨论】:

      【解决方案2】:

      HTTP 是无状态的。 ASP.NET 只是添加了一个抽象来使其看起来是有状态的。

      当回发到来时 - 旧的网格和数据表/数据集对象消失了。这是一个新请求,在具有新页面对象的新线程上。

      网格通过它自己的内部数据结构(以及一些视图状态连接......)来维护它的内部状态 - 它永远不会是回发时的相同数据表,甚至是 a 数据表。

      对于您当前的工作方法,您需要重新获取需要排序的数据表,无论是从您从头构建它的数据库/代码还是从缓存(如果它是 ,甚至可能是会话/视图状态?)

      【讨论】:

      • 好的,这是有道理的,我认为你是对的,我的问题的根源涉及到这个问题,但Sorting 事件所做的第一件事就是用BindGrid() 重新绑定 GridView。这还不足以重新填充 GridView 进行排序吗?
      猜你喜欢
      • 1970-01-01
      • 2011-04-29
      • 2011-11-11
      • 1970-01-01
      • 2011-09-25
      • 2013-04-03
      • 2011-02-07
      • 2013-12-22
      • 1970-01-01
      相关资源
      最近更新 更多