2011-08-26 66 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