2010-04-12 48 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

重要的是要记住,当你受到多个列,你 需要每一列