如果用户选择了行标题,如何删除行?

时间:2014-01-22 03:11:21

标签: c# winforms datagridview row delete-row

private void deleteRowButton(object sender, EventArgs e)
{

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

所以这就是我尝试过的。现在没有if语句它会工作,但它将删除所选单元格上的行。我不希望用户意外删除它。如何在用户选择行标题时删除该行?

像这样: Row Header selected

2 个答案:

答案 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]);
      }
}