【问题标题】:Make columns in datagridview sortable?使datagridview中的列可排序?
【发布时间】:2012-11-27 21:44:33
【问题描述】:

我使用

填充我的datagridview
dataGridView1.DataSource = ListOfClasses

这会正确填写所有内容。现在我喜欢使列可排序。即使我尝试的两列是长字符串和字符串,它们似乎也没有排序。我尝试在数据源之后运行它(之前给了我一个异常,因为列不存在)

foreach (DataGridViewColumn column in dataGridView1.Columns)
            {
                dataGridView1.Columns[column.Name].SortMode = DataGridViewColumnSortMode.Automatic;
            }

我最初可以使用 sql 中的 order by 对它们进行排序,但是我仍然喜欢使用列选择的灵活性。我该如何启用它

【问题讨论】:

  • 您的数据源需要支持排序。您可以绑定到数据表(支持开箱即用的排序)或实现您自己的具有排序支持的绑定列表。我在这个答案中给出了一个最小的例子:stackoverflow.com/questions/5700782/…

标签: c# winforms datagridview


【解决方案1】:

【讨论】:

    【解决方案2】:

    您的数据源应该是一个 IBindingList。

    如果你使用 VS 2010 及更高版本和 EF,你有方法“.ToBindingList();”哪个为你做。

    例如:

    dbContext.YourEntitycollection.Load();
    yourBindingSource.DataSource = dbContext.YourEntitycollection.Local.ToBindingList();
    

    这样,您的 DataGrid 中的排序会自动启用。

    欲了解更多信息,请参阅:http://msdn.microsoft.com/en-us/data/jj682076.aspx

    【讨论】:

      【解决方案3】:
          void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
          {
      
              if (dataGridView1.SortOrder.ToString() == "Ascending") // Check if sorting is Ascending
              {
                  dataGridView1.Sort(dataGridView1.Columns[dataGridView1.SortedColumn.Name], ListSortDirection.Descending);
              }
              else
              {
                  dataGridView1.Sort(dataGridView1.Columns[dataGridView1.SortedColumn.Name], ListSortDirection.Ascending);
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2016-04-28
        • 1970-01-01
        • 2021-11-18
        • 2011-09-25
        • 1970-01-01
        • 2012-07-23
        • 2013-07-06
        • 2013-05-10
        • 2011-02-20
        相关资源
        最近更新 更多