2011-08-26 120 views
1

我对DataGridView没有什么问题。
1.形式删除DataGridView控件和设置属性可见的
2.添加几行并更改可见像上面的代码。防止在DataGridView中选择单元格

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"); 
} 

设置后可见为True,第一个单元格被自动选中并触发SelectionChanged事件。
如何防止?

编辑。解决方案:

  • 分离事件处理程序:
  • 设置可见
  • 清除选择
  • 添加处理器

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

我认为你的问题是,'dataGridView1_SelectionChanged'被解雇,因为这行代码:'dataGridView1.Visible = TRUE;'。设置网格的可见性将触发事件。为什么你想在开始时将网格设置为false? – KaeL

+0

我想在特定情况下显示网格。在开始时,网格必须隐藏。 – revelvice

+0

我的帖子中的解决方案。 – revelvice

回答

3

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

问候,德鲁

+0

是的,您有权使用ClearSelection() – revelvice

0

相反布线和重新布线每次你把看得见的财产的时候,你能不能只从方法返回,如果能见度是假的。那就是:

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

我只希望第一次禁用选择,当Visible从False变为True时。之后,用户可以选择单元格和触发器应该正常工作。 – revelvice

+0

同意。我想,这正是如果你dataGridView1不可见时“返回”会发生什么。 – Arun

相关问题