到处都在问这个问题,但我遇到了一个我在其他任何地方都没有见过的问题,我不知道是什么原因造成的,也不知道如何解决。该问题与按列对 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
(这是 a DataSet
)也是空的,但是当我在调试期间检查它时,令我惊讶MainGrid.DataSource
的是不是空的。为什么要使用as
make dataTable
null 进行强制转换?为什么没有其他人使用这种方法遇到这个问题?(我在 asp.net 论坛上的一个几乎相同的用例中找到了这段代码)
我对此感到非常困惑,我觉得它应该如此简单。感谢任何帮助,包括一般的 ASP.net 帮助,因为我是该框架的新手。如果有人需要更多信息/代码,请告诉我,我很乐意更新帖子。
编辑:已解决:为了解决这个问题,我将实现从 DataSet 切换到 DataTable,代码看起来几乎完全相同,它是项目中其他地方的声明发生了变化。