2010-04-12 49 views
1

我有一個從複雜對象獲取其數據源的GridView。 因此,我正在執行排序&在後面的代碼中進行分頁。有兩個字段的Gridview SortExpression

<asp:GridView ID="SystemsDetailList" runat="server" AllowSorting="true" AllowPaging="true" 
AutoGenerateColumns="False" ShowFooter="True" OnPageIndexChanging="gridView_PageIndexChanging" OnSorting="gridView_Sorting"> 

對於一個重要的冠軍專欄中,我有一個2個字段的SortExpression:

SortExpression="FunctionalAreaDisplayCode, EswbsDisplayCode" 

這在後面的代碼:

protected void gridView_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    BindSystemList(e.SortExpression, sortOrder); 
} 

public string sortOrder 
{ 
    get 
    { 
     if (ViewState["sortOrder"].ToString() == "desc") 
      ViewState["sortOrder"] = "asc"; 

     else 
      ViewState["sortOrder"] = "desc"; 

     return ViewState["sortOrder"].ToString(); 
    } 
    set 
    { 
     ViewState["sortOrder"] = value; 
    } 
} 

出於某種原因,它會保持 「FunctionalAreaDisplayCode」 總是排序的ASC,但EswbsDisplayCode正常工作,因爲它在ASC和DESC之間正確翻轉。

和這裏的提示?

謝謝!

+0

我不明白後面指定ASC和/或遞減排序是非常重要的題。你是說它應該在(FunctionalAreaDisplayCode asc,EswbsDisplayCode asc)和(FunctionalAreaDisplayCode desc,EswbsDisplayCode desc) – Homer 2010-04-16 21:21:36

回答

0

我的猜測是它創建一個SQL ORDER BY子句只需將排序順序追加到排序表達式。所以,你將有:

FunctionalAreaDisplayCode, EswbsDisplayCode asc 

FunctionalAreaDisplayCode, EswbsDisplayCode desc 

它是由SQL解釋(或任何正在做排序)爲:

FunctionalAreaDisplayCode asc, EswbsDisplayCode asc 

FunctionalAreaDisplayCode asc, EswbsDisplayCode desc 

this ORDER BY tutorial

重要的是要記住,當你受到多個列,你 需要每一列