【问题标题】:how to sort Gridview rows by a unbound Template column如何按未绑定的模板列对 Gridview 行进行排序
【发布时间】:2023-03-25 02:53:02
【问题描述】:

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

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    您想要的行为是可能的。以下是您需要做的:

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

    示例

    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;
      }
    }
    

    您可以为排序方向和排序列添加缓存以启用切换机制。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2012-04-23
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多