2011-06-08 49 views
4

Asp.net 4.0 GridView的內置了對「排序箭頭」的支持可以節省一些代碼。我所有的網格默認排序時,他們從數據庫返回的,所以它似乎合乎邏輯的,我要指出哪一列默認使用ASP.NET SortedDescendingHeaderStyle-的CssClass等Asp.NET 4.0 GridView控件的默認排序方向和表達

ASP上排序。 NET不會神奇地裝飾默認排序的列:它無法知道SQL指定的順序。我可以聲明或編程裝飾用正確的CSS類適當的頭單元......但後來當我整理ASP.NET不會刪除它爲我。所以目前我通過遍歷標題單元格在第一個「排序」事件中尋找它來解決這個問題。所以,我有一些代碼我跑兩次,一次是在第一次手動添加排序箭頭,而一旦將其刪除。這很複雜,幾乎和4.0以前的整個工作一樣多。

所以......我必須失去了一些東西:是有一些方法來告訴一個ASP.NET的GridView,它的內容已經排序中,避免了手動添加,然後刪除該指標排序的方式?

回答

5

如果你知道你的排序表達式&方向可以通過顯式塞提特:

GridView.Sort(expression, direction); 

表達將列的列表"col1, col2, etc"

+0

是的,但指示網格自己排序,不是嗎?在我的情況下,網格已經排序,因爲數據庫在綁定到網格之前對其進行排序。也許我可以告訴它自己排序,這可能是一個便宜的操作,因爲它已經分類。 – philw 2011-06-10 07:01:46

+0

@philw我是這麼認爲的,在第一次了。令我困惑的部分是GridView.Sort不會觸發第二次數據提取。它只是設置將在下一個DataBind()上使用的排序屬性。因此,在OnLoad中調用GridView.Sort是完全正確的。 – 2013-08-15 20:51:52

1

要刪除分揀GridView中的特定列這是使用AutoGenerateColumn界

protected void GridView_PreRender(object sender, System.EventArgs e) 
{ 
    if (GridView.AllowSorting) 
    { 
     foreach (TableCell tc in GridView.HeaderRow.Cells) 
     { 
      if (tc.HasControls()) 
      { 
       LinkButton lb = (LinkButton)tc.Controls[0]; 
       if (lb != null && lb.Text.Equals("ColumnName")) 
       {        
        tc.Attributes.Add("onclick", "return false;"); 
       }       
      } 
     } 
    } 
}