2011-06-08 62 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;"); 
       }       
      } 
     } 
    } 
}