private void deleteRowButton(object sender, EventArgs e)
{
if (dataGridView1.SelectionMode == DataGridViewSelectionMode.RowHeaderSelect)
{
dataGridView1.Rows.RemoveAt(dataGridView1.CurrentCell.RowIndex);
}
}
所以这就是我尝试过的。现在没有if语句它会工作,但它将删除所选单元格上的行。我不希望用户意外删除它。如何在用户选择行标题时删除该行?
像这样:
答案 0 :(得分: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);
}
但由于某种原因,即使您选择了行标题,它也始终为CurrentCell.ColumnIndex
返回0。
我想您仍然可以订阅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);
}
答案 1 :(得分: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]);
}
}