【问题标题】:How do I delete a row if the user selected the row header?如果用户选择了行标题,我如何删除一行?
【发布时间】:2014-02-11 22:50:13
【问题描述】:
private void deleteRowButton(object sender, EventArgs e)
{

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

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

像这样:

【问题讨论】:

    标签: c# winforms datagridview row delete-row


    【解决方案1】:

    您可以订阅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);
    }
    

    【讨论】:

    • 所以我不能只使用我的按钮?哦,对不起,我忘了提到这是一个使用按钮。只是不熟悉 CellClick 事件。
    • 实际上我不得不使用 bool 作为字段。我不能真正制作一个 var,因为它不会在方法之间共享它。我还做的是每次用户单击删除按钮时将isRowHeaderSelected 设置回false。这是因为除非他们更改单元格,否则它将继续删除。
    【解决方案2】:

    我猜你在写winforms。为什么不把删除放在消息框后面呢?你把它放在什么 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]);
          }
    }
    

    【讨论】:

    • 嗯,它是一个按钮。只有当用户在我的图片突出显示的部分选择了它的样子时,它才会起作用。
    • 它不是一个按钮,它是一种特殊类型的DataGridViewColumn。 DGV 中有很多点击事件,每一个都有自己的特点。 CellClick、CellDoubleClick、CellContentClick、CellMouseClick、CellMouseDoubleClick、MouseClick、MouseDoubleClick,不胜枚举
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2019-07-05
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    相关资源
    最近更新 更多