簡體   English   中英

排序后GridView變為NULL?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM