【问题标题】:Gridview Sorting With ImagesGridview 图像排序
【发布时间】:2009-04-06 14:32:18
【问题描述】:

我有一个 Web 应用程序(带有 C# 的 ASP.NET 2.0),其中我有一个从 oracle 数据库获取数据的 gridview。

我需要为 gridview 实现排序功能,所以我在 gridview 正上方添加了一个下拉菜单,有 2 个选项:升序和降序。然后在Gridview_Sorting 方法中,我有一个switch 语句,它基本上检查下拉菜单上的选择,并相应地进行排序。

这可行,但我希望能够单击它一次,它以一种方式排序,然后再次单击它,它以另一种方式排序。我想要的另一件事是列名旁边的图像,告诉您数据的排序方向。

有什么建议吗? 谢谢。

【问题讨论】:

    标签: c# asp.net gridview sorting


    【解决方案1】:

    查看此blog post 以获取处理此问题的通用子例程

    【讨论】:

      【解决方案2】:

      一个简单的解决方案是使用图像控件或图像按钮。在点击事件中,将图像从一张图像切换到另一张图像。要确定以前的状态,请使用会话变量或确定图像按钮的 imageurl 属性之前设置的内容,切换它并调用您的排序方法。

      【讨论】:

        【解决方案3】:

        我使用 JQuery 表排序器。前端的客户端排序更快,此插件允许您指定显示在列标题中的图像:

        http://tablesorter.com/docs/

        我不确定在使用此方法进行选择和交互时会产生什么影响,所以要小心。

        【讨论】:

          【解决方案4】:

          我在排序时将图像添加到标题单元格:

          // ...
          
          GridViewRow headerRow = GridView1.HeaderRow;
          
          foreach (TableCell tableCell in headerRow.Cells)
          {
              if (tableCell.HasControls())
              {
                  LinkButton button = tableCell.Controls[0] as LinkButton;
                  if (button != null)
                  {                                            
                      if (sortExp == button.CommandArgument)
                      {
                          Image image = new Image();
                          if (sortDir == "ASC")
                          {
                              image.ImageUrl = "/_layouts/Document LibraryManager/icon_ascending.gif";
                              tableCell.Controls.Add(image);
                          }
                          else
                          {
                              image.ImageUrl = "/_layouts/Document LibraryManager/icon_descending.gif";
                              tableCell.Controls.Add(image);
                          }
                      }
                  }
              }
          }
          

          【讨论】:

          • 我有来自另一个函数的sortExpsortDir 我正在填充我的GridView,但它不起作用。你能帮忙吗?
          【解决方案5】:

          最简单优雅的方法是使用 ViewState。 将排序方向保持在 ViewState 中,并在每次排序发生时访问它。

          public SortDirection GridViewSortDirection
              {
                  get
                  {
                      if (ViewState["sortDirection"] == null || (SortDirection)ViewState["sortDirection"] == SortDirection.Descending)
                          ViewState["sortDirection"] = SortDirection.Ascending;
                      else if ((SortDirection)ViewState["sortDirection"] == SortDirection.Ascending)
                          ViewState["sortDirection"] = SortDirection.Descending;
          
                      return (SortDirection)ViewState["sortDirection"];
                  }
                  set
                  { ViewState["sortDirection"] = value; }
              }
          

          如果之前没有进行过排序(null 条件)或者之前的排序方向是降序,下次排序应该是升序。同样,反之亦然。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-31
            • 2023-04-05
            • 1970-01-01
            • 2023-03-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多