[英]GridView becomes NULL after sorting?
我運行這個事件處理程序和方法來對我的 GridView 進行排序,但它說 GridView 為空:
protected void OtherGridView_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dtSortTable = gvMeldingen.DataSource as DataTable;
DataView dvSortedView = new DataView(dtSortTable);
dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection);
gvMeldingen.DataSource = dvSortedView;
gvMeldingen.DataBind();
}
private string getSortDirectionString(SortDirection sortDirection)
{
string newSortDirection = String.Empty;
if (sortDirection == SortDirection.Ascending)
{
newSortDirection = "ASC";
}
else
{
newSortDirection = "DESC";
}
return newSortDirection;
}
我得到的錯誤:必須在使用 DataView 之前設置 DataTable。
這突出顯示: dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection)
DataSource 屬性在往返過程中丟失。 這就是為什么DataTable dtSortTable = gvMeldingen.DataSource as DataTable;
為空,並且DataView dvSortedView = new DataView(dtSortTable);
是無效的。
當您點擊數據網格上的排序超鏈接時,您正在觸發從客戶端到服務器的回發。 然后 ASP.NET 使用持久化數據(如 ViewState 和其他數據)構造回復頁面。
DataSource屬性不是往返之間持久狀態的一部分,這就是它的值丟失的原因。
一種解決方案是重新查詢您的數據源,如下所示:
protected void OtherGridView_Sorting(object sender, GridViewSortEventArgs e)
{
var SortExpression = e.SortExpression + " " + getSortDirectionString(e.SortDirection);
gvMeldingen.DataSource = ... // Requery the Data using the new sort expression above
gvMeldingen.DataBind();
}
另一種解決方案是每次在Page_Load事件中設置DataSource(不推薦)
當您在DataTable
周圍放置DataView
,該方法只會在第一次工作(假設數據源從一開始就是DataTable
)。 下次數據源是DataView
,您不能將其轉換為DataTable
。
從一開始就使用DataTable
的默認視圖作為數據源,這樣數據源總是一個DataView
。 然后您可以從源獲取視圖,並從中獲取基礎表:
DataView view = gvMeldingen.DataSource as DataView;
DataTable dtSortTable = view.Table;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.