-1

如果像这样的网格

     Name     Age

     Raj      20
     Biny     19
     Raj      17
     Jose     27
     Jose     15

现在我单击名称网格列手段

我想要像下面这样的输出

       Name     Age

      Biny     19        
      Jose     15
      Jose     27
      Raj      17
      Raj      20

 See above table sort Based on Name column

例如:- 现在何塞年龄也排序为 15,27

我正在使用下面的代码,但它不能正常工作 private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)

{ var sortGlyph = dataGridView1.Columns["Name"].HeaderCell.SortGlyphDirection;

        switch (sortGlyph)
        {
            case SortOrder.None:
            case SortOrder.Ascending:
                     dataGridView1.Sort(dataGridView1.Columns["Name"], ListSortDirection.Descending);

                dataGridView1.Columns["Name"].HeaderCell.SortGlyphDirection = SortOrder.Descending;
                break;
            case SortOrder.Descending:
                                   dataGridView1.Sort(dataGridView1.Columns["Name"], ListSortDirection.Ascending);
                dataGridView1.Columns["Name"].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
                break;
        }

}

下面的代码是上述问题的答案

       switch (sortGlyph)
        {
            case SortOrder.None:
            case SortOrder.Ascending:
                dt.DefaultView.Sort = "Name,Age";
                dt = dt.DefaultView.ToTable();
                dataGridView1.DataSource = dt;

                dataGridView1.Columns["Name"].HeaderCell.SortGlyphDirection     =SortOrder.Descending;
                break;
            case SortOrder.Descending:
                                    dt.DefaultView.Sort = "Name,Age";
                                    dt = dt.DefaultView.ToTable();
                                    dataGridView1.DataSource = dt;
                                    dataGridView1.Columns["Name"].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
                break;
        }
4

2 回答 2

1

如果您要求将其与分页结合使用,则没有简单且可扩展的解决方案。事实上,这是业务应用程序 Web 开发的圣杯。例如,请参阅 StackOverflow 问题Dynamic Sorting within SQL Stored Procedures,它涉及到同样的事情。毕竟,如果我们在数据库服务器上进行动态排序,我们只需要编写用于管理用户排序选择的机制即可。

对于多列排序,您实际上只有三个选项:

  • 在客户端中执行此操作,让您的数据容器完成繁重的工作(当您使用内置此功能的数据容器时,例如 [ System.Data.DataView][2])。

  • 编写自己的算法并在绑定之前自己对数据进行排序。

  • 通过上面链接中讨论的解决方案之一在数据库服务器上执行此操作。

这两种客户端解决方案都不是真正可扩展的,因为它们涉及在您可能只需要一个子集时提取和交付所有数据。

于 2013-07-03T08:44:56.820 回答