【问题标题】:DataGridView: How to select an entire Column and deselect everything else?DataGridView:如何选择整个列并取消选择其他所有内容?
【发布时间】:2009-12-31 21:34:46
【问题描述】:

我一直在尝试找出如何使用“鼠标右键单击+菜单+选择此列”来选择列下的所有单元格...

MSDN 帮不上什么忙……

当我尝试更改选择模式时出现此错误:

DataGridView control's SelectionMode cannot be set to FullColumnSelect while it has a   column with SortMode set to DataGridViewColumnSortMode.Automatic.

谢谢, 是的

【问题讨论】:

  • 我假设您使用的是 WinForms?
  • DataGridView 的 SelectionMode 是什么?
  • RowHeaderSelect = 再次查看问题...

标签: c# winforms datagridview


【解决方案1】:

抱歉,花了这么长时间 - 我想在回答之前先测试一下,所以我先把它放到 Visual Studio 中进行测试。

我必须这样做才能让它工作:

foreach (DataGridViewColumn c in dataGridView1.Columns)
{
   c.SortMode = DataGridViewColumnSortMode.NotSortable;
   c.Selected = false;
}
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullColumnSelect;
dataGridView1.Columns[0].Selected = true;

【讨论】:

  • 也可以调用ClearSelection方法。
  • 每次我想选择一个列时都必须运行该循环吗?还是准时打电话?
  • 只要没有其他变化SortMode,你只需要这样做一次。
  • 是的;这就是FullColumnSelect 的意思。阅读文档:msdn.microsoft.com/en-us/library/8x6w9028%28VS.80%29.aspx
  • “我想在回答之前先测试一下”是真正的编码顾问的完美示例。
【解决方案2】:

遍历列中的单元格并将其 Selected 属性设置为 true。
这听起来很可怕,但我相信这是选择整列并保持自动排序的唯一方法。

例如:

grid.ClearSelection();
for(int r = 0; r < grid.RowCount; r++)
    grid[columnIndex, r].Selected = true;

【讨论】:

  • 我怎样才能摆脱自动排序?
  • SortMode 属性设置为false,就像大卫的回答一样。
  • 有效,但我很好奇如果我有很多单元格,我的程序是否会变慢......
【解决方案3】:

你需要三样东西。

  1. 清除所有选定的行和单元格。
  2. 将每列的排序模式删除为不可排序。默认点击事件是排序,现在是选择。
  3. 将选择模式设置为列。

最后,您可以选择第一列向用户显示选择模式。 这只需要做一次。第一次加载表单或数据网格视图时。

// Clear all selected cells or rows in the DGV.
dataGridView1.ClearSelection();

// Make every column not sortable.
for (int i=0; i < dataGridView1.Columns.Count; i++)
   dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; 

// Set selection mode to Column.
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullColumnSelect; 

// In case you want the first column selected. 
if (dataGridView1.Columns.Count > 0 )  // Check if you have at least one column.
    dataGridView1.Columns[0].Selected = true;

【讨论】:

    【解决方案4】:

    我在使用拖放界面启动 WPF 时遇到此错误,并且没有手动编码。查看 datagrid 的属性将提供一种选择项目的方法,如下所示:

    但是尝试将 type 更改为 Column Header Select 或 Column Select 会导致您提到的错误。

    所以解决方法是右键单击网格并转到编辑列。这里所有的列和它们的 SortingMode 都可以改变。将它们全部更改为 NotSortable。

    【讨论】:

      【解决方案5】:

      我知道这是一个非常古老的问题。但我将我的解决方案留给将来会遇到此错误的人。

      您通常会通过属性(UI)收到此错误。 我的意思是当您执行 SelectionMode -> FullColumnSelect 或 ColumnHeaderSelect 时。你懂了。因此,我建议您通过代码而不是 UI 来更改 SelectionMode。

      我的解决方法如下。

      1. 将您的数据作为 SelectionMode.FullRowSelect 或 SelectionMode.RowHeaderSelect 提供给 DataGridView。

      2. 使所有列在循环中不可排序。

      3. 在代码中更改dataGridView的选择方式。

      //1
       dataGridView.DataSource = productList;
      //2 
       for (int i = 0; i < dataGridView.Columns.Count; ++i)
                      dataGridView.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
      //3
       dataGridView.SelectionMode = DataGridViewSelectionMode.FullColumnSelect;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多