2014-01-22 41 views
0
private void deleteRowButton(object sender, EventArgs e) 
{ 

    if (dataGridView1.SelectionMode == DataGridViewSelectionMode.RowHeaderSelect) 
    { 
     dataGridView1.Rows.RemoveAt(dataGridView1.CurrentCell.RowIndex); 
    } 
} 

原來這就是我試過。現在沒有if語句就可以工作,但它會刪除所選單元格中的行。我不希望用戶意外刪除它。如何讓它可以刪除行,如果用戶選擇行標題?如果用戶選擇行標題,如何刪除行?

像這樣: Row Header selected

回答

2

你可以訂閱CellClick事件和測試值e.ColumnIndex

if (e.ColumnIndex == -1) 
{ 
    dataGridView1.Rows.RemoveAt(e.RowIndex); 
} 

或者你可以訂閱CellDoubleClick事件(使用相同的代碼),如果你想更確定他們不會意外刪除行。


既然你要使用的按鈕,我會說試試這個:

if (dataGridView1.CurrentRow != null && dataGridView1.CurrentCell.ColumnIndex == -1) 
{ 
    dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index); 
} 

但由於某些原因,它總是返回0 CurrentCell.ColumnIndex,即使你選擇的行頭。

我想你仍然可以訂閱CellClick事件,但只是存儲在一個類級變量的當前行的索引,你可以在按鍵測試:

private bool isRowHeaderSelected = false; 

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    isRowHeaderSelected = (e.ColumnIndex == -1); 
} 

private void deleteRowButton(object sender, EventArgs e) 
{ 
    if (isRowHeaderSelected) 
     dataGridView1.Rows.RemoveAt(dataGridView1.CurrentCell.RowIndex); 
} 
+0

所以我不能只用我的按鈕?哦,對不起,我忘了提及它是一個使用的按鈕。只是不熟悉CellClick事件。 – puretppc

+0

@puretppc看我的編輯。 –

+0

由於它的工作:) – puretppc

1

我猜測你正在寫的WinForms。你爲什麼不把刪除放在messageBox後面?什麼datagridview事件你放在這裏?

if (e.ColumnIndex == -1) 
{ 
     DialogResult dr = MessageBox.Show("Are you sure that you want to delete", "Are you sure?", MessageBoxButtons.YesNo); 
     if (dr == DialogResult.Yes) 
     { 
      dataGridView1.Rows.RemoveAt(dataGridView1.Rows[e.RowIndex]); 
     } 
} 
+0

這是一個按鈕。只有當用戶在我的照片的突出部分選擇了它的外觀時,它纔會起作用。 – puretppc

+0

它不是一個按鈕,它是一種特殊類型的DataGridViewColumn的。在DGV中有很多點擊事件,每個事件都有自己的特點。 CellClick,CellDoubleClick,CellContentClick,CellMouseClick,CellMouseDoubleClick,鼠標點擊,MouseDoubleClick,和這樣的例子不勝枚舉 – wruckie