DataGridView:如何启用多行选择但禁用多单元格选择?

时间:2010-10-19 09:21:59

标签: c# .net winforms visual-studio-2005 .net-2.0

我正在寻找一种在DataGridView-Control中启用多行选择但禁用多单元格选择的方法。

到目前为止我尝试过:

  • DataGridView.MultiSelect = true允许选择多行和单元格
  • DataGridView_CellMouseClick-Event中的ClearSelection()并重新选择最后选择的单元格看起来不太好(您看到旧单元格取消选择然后新单元格选择; SuspendLayout()和ResumeLayout()没有帮助)
  • DataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect不是一个选项:如果用户单击一个单元格,则只应该选中此单元格

用于导出功能:用户应该能够将选定的行导出到文件中,但通常他不能选择多个单元格(用于复制和粘贴等)。

此致

INNO

----- [更新] -----

这是我的实施。工作正常(注释为紧凑性而删除):

using System.Windows.Forms;

namespace YourAmazingNamespace
{
    public partial class SpecialSelectDataGridView: DataGridView
    {
        public SpecialSelectDataGridView()
        {
            InitializeComponent();
        }

        protected override void SetSelectedCellCore(int columnIndex, int rowIndex, bool selected)
        {
            ResetSelectedCells();

            base.SetSelectedCellCore(columnIndex, rowIndex, selected);
        }

        void ResetSelectedCells()
        {
            foreach (DataGridViewCell cell in SelectedCells) {
                base.SetSelectedCellCore(cell.ColumnIndex, cell.RowIndex, false);
            }
        }
    }
}

通过MultiSelect = true(默认值)选择多行,并在选择新的单元之前通过调用ResetSelectedCells()重置当前选定的单元格。

HTH,谢谢和问候,

INNO

1 个答案:

答案 0 :(得分:1)

您可以覆盖SetSelectedRowCoreSetSelectedCelCore并执行自定义选择。

MSDN Quote:

  

DataGridView控件使用它   方法何时改变   细胞的选择状态。该   选择状态无变化   到当前的SelectionMode属性   价值,而不改变   CurrentCell属性值。这是   当你想要实现你的时候很有用   自己的选择模式

当然,这意味着您必须使用派生的数据网格而不是标准数据网格。