這已被問到各地,但我得到一個問題,我沒有看到任何其他地方,我不知道是什麼原因或如何解決它。該問題涉及按列排序GridView;我在網上找到的代碼Sorting
方法沒有奏效。以下是我有:排序GridView綁定到數據集,DataTable null上強制轉換?
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.DataSource
是而不是 null。爲什麼要使用as
來製作dataTable
null?爲什麼沒有其他人使用這種方法有這個問題? (我發現這個代碼在asp.net論壇上幾乎完全相同的用例)
我非常難以忍受這一點,我覺得它應該是如此簡單。任何幫助表示讚賞,包括一般的ASP.net幫助,因爲我是一個非常新的框架。如果有人需要更多信息/代碼,請告訴我,我很樂意更新這篇文章。
編輯:已解決:要解決此問題,我將實現從DataSet切換到DataTable,代碼看起來幾乎完全相同,它是項目中其他地方發生更改的聲明。
好的,這是有道理的,我認爲你是對的,我的問題的來源涉及到這一點,但Sorting事件的第一件事是用BindGrid()重新綁定GridView。這不足以重新填充GridView進行排序嗎? – akowalz