2013-10-30 64 views
1

我有一個dataGridView在我的窗體中,我有一個按鈕列。我只想執行一些代碼時,只有一個buttoms點擊。我試着在代碼下面做Werite,但是當我點擊列的頭部時,塊中的writed代碼就被執行了。 是誰的幫助我?當DataGridView ButtonColumn點擊

private void UpDatedataGridView2_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    MessageBox.Show(UpDatedataGridView2.CurrentCellAddress.ToString()); 

    if (UpDatedataGridView2.RowCount > 0) 
    { 
     if (UpDatedataGridView2.CurrentCell.Value.ToString().Trim() == "delete Record") 
     { 
      if (DialogResult.Yes == MessageBox.Show("Are you sure to delete the record", "Delete", MessageBoxButtons.YesNo)) 
      { 
       UpDatedataGridView2.ReadOnly = false; 
       UpDatedataGridView2.AllowUserToDeleteRows = true; 
       string number = UpDatedataGridView2.CurrentRow.Cells[1].Value.ToString(); 
       da.DeleteCommand.CommandText = "Delete from tblKala where ID =" + number; 
       conn.Open(); 
       da.DeleteCommand.ExecuteNonQuery(); 
       conn.Close(); 
       dataGridView1.ReadOnly = true; 
       UpDatedataGridView2.DataSource = SelectData(); 
       MessageBox.Show("Deleting done !"); 
      } 
     } 
    } 
} 
+1

您應該使用e.RowIndex和e.ColumnIndex而不是UpDatedataGridView2.CurrentCell只要你想用電池工作燒成點擊事件,而不是目前的重點細胞。 – wonko79

+0

你能幫我嗎?請閱讀以下信息,謝謝。 – user2936286

回答

1

添加下列檢查:

if (UpDatedataGridView2.Columns[e.ColumnIndex] is 
    DataGridViewButtonColumn && 
    e.RowIndex != -1) 

第一個條件檢查是否用戶在屬於一個按鈕列中的單元點擊,而如果第二檢查點擊連續發生的。

UPDATE:我忘了你必須檢查ColumnIndex:如果用戶單擊標題行,ColumnIndex的值爲-1,因此UpDatedataGridView2.Columns [e.ColumnIndex]將引發異常。總之,最後的檢查應該是這樣的:

if (e.ColumnIndex != -1 && 
    e.RowIndex != -1 && UpDatedataGridView2.Columns[e.ColumnIndex] is 
    DataGridViewButtonColumn) 
+0

你好,我寫過你的想法給我的源代碼,但C#編譯器告訴我,我們的集合中沒有-1數字,換句話說索引號超出範圍。我收到此運行時錯誤:「索引超出範圍。必須是非負數,並小於集合的大小。參數名稱:索引」 – user2936286

+0

嗨,你應該添加建議的檢查之間的第一個和第二個「如果」在你的代碼中。如果問題仍然存在,請發佈整個方法,並告訴我哪一行會導致運行時錯誤。如果您正在通過VS調試器測試您的應用程序,您可能會發現通過在「調試/例外」窗口中爲CLR選擇「Thrown」選項更容易進行調試。 –

+0

嗨,我從我的錯誤中捕獲圖片,請下載圖片: https://mega.co.nz/#!iFZBVAxR!NX7dsghmZ1G5hx2UvZp9PG89EB5mtW432z0Azu7gcnU – user2936286