如何通过未绑定的模板列对Gridview行进行排序

时间:2010-03-22 07:10:38

标签: asp.net gridview

我想通过未绑定到任何数据库字段的模板列对Gridview行进行排序。这个模板coulmn只有一个标签,其文本我在代码中设置取决于数据绑定的不同列中的值。所以我坚持如何设置它的sortExpression,因为它没有链接到列。

1 个答案:

答案 0 :(得分:0)

您可以实现所期望的行为。以下是您需要做的事情:

1)订阅GridView的排序事件 2)将SortExpression添加到create列,例如“MyOwnSortExpression”。 2)在事件处理程序中,您可以通过EventArgs访问SortExpression。 e.SortExpression 3)创建一个在GridView上执行DataBinding的方法。 该方法有2个参数。第一个是应该排序的列的名称,第二个是Sortdirection。 (在点击两次相同的列后切换sortdirection会很好) 4)添加代码开关,仅对所需的Columsn进行手动排序。

示例

protected void gv_Sorting(object sender, GridViewSortEventArgs e)
{
  if(e.SortExpression == MyOwnSortExpression)
  {
     UpdateDataBinding(e.SortExpression, e.SortDirection);   
     e.Cancel = true;
     return;
  }
}

protected void UpdateDataBinding(String sortexpression, SortDirection direction)
{
  switch(sortExpression)
  {
    case "MyOwnSortExpression":
      var myData = GetYouSpecificDataFromDB();
      if(direction == SortDirection.Ascending)
      {
       var = var.OrderBy(x => string.format("jkalsd{0}", x.TheSpecifiedDBColumn)) // or any desired linq expression);
      }
      else
      {
       var = var.OrderByDescending(x => string.format("jkalsd{0}", x.TheSpecifiedDBColumn)) // or any desired linq expression);
      }
      this.gv.DataSource = var.ToList();
      this.gv.DataBind();
      break;
  }
}

您可以为sortdirection和sort列添加缓存以启用切换机制。

您的解决方案可能会有所不同,具体取决于您正在进行的数据绑定类型(Linq-to-Sql,ObjectDataSource,...)

此链接http://blogs.sftsrc.com/stuart/archive/2009/02/19/130.aspx也提供了一个很好的课程。如果您可以创建包含将要显示的所有值的Wrapperclass,则效果最佳。我建议的解决方案不需要包装类,但缺乏灵活性。