防止在DataGridView中选择单元格

时间:2011-08-26 10:25:55

标签: c# .net winforms datagridview selection

我对DataGridView没有什么问题 1.在表单上删除DataGridView控件并将属性设置为Visible to False
2.添加几行并将其更改为 True ,如上面的代码所示。

private void Form1_Load(object sender, EventArgs e)
{
   dataGridView1.Rows.Add(new object[] { "1", "a" });
   dataGridView1.Rows.Add(new object[] { "2", "b" });
   dataGridView1.Rows.Add(new object[] { "3", "c" });
   dataGridView1.Rows.Add(new object[] { "4", "d" });

   dataGridView1.Visible = true;
               //^ this trigger selection

}

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
   Console.WriteLine("selected");
}

将Visible设置为True后,将自动选择第一个单元格并触发SelectionChanged事件 怎么预防呢?

修改。解决方案:

  • 分离事件处理程序:
  • 设置可见
  • 明确选择
  • 添加处理程序

dataGridView1.SelectionChanged -= dataGridView1_SelectionChanged;
dataGridView1.Visible = true;
dataGridView1.ClearSelection();
dataGridView1.SelectionChanged += dataGridView1_SelectionChanged;

3 个答案:

答案 0 :(得分:3)

您的解决方案将阻止事件触发,但我认为在显示网格时仍将选择第一个单元格。在DataGridView上对ClearSelection()的简单调用应该可以解决这个问题。

问候,德鲁

答案 1 :(得分:1)

将DataGridView的TabStop设置为false

答案 2 :(得分:0)

如果可见性为false,您可以在每次更改可见属性时进行布线和重新布线,而不是从方法返回。那就是:

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    if (!dataGridView1.Visible) return;
    Console.WriteLine("selected");
}