【问题标题】:when DataGridView ButtonColumn Clicked单击 DataGridView ButtonColumn 时
【发布时间】:2013-10-30 12:40:48
【问题描述】:

我的表单中有一个 dataGridView,其中有一个按钮列。我想在只有一个按钮单击时执行一些代码。我试图在下面的代码中写,但是当我单击列的标题时,块中的写入代码被执行。 有人能帮我吗?

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 !");
            }
        }
    }
}

【问题讨论】:

  • 您应该使用 e.RowIndex 和 e.ColumnIndex 而不是 UpDatedataGridView2.CurrentCell,因为您希望使用触发单击事件的单元格而不是当前聚焦的单元格。
  • 你能帮我吗?请阅读以下信息,谢谢。

标签: c# events button datagridview datagridviewcolumn


【解决方案1】:

添加以下检查:

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

第一个条件检查用户是否单击了属于按钮列的单元格,而第二个条件检查单击是否连续发生。

更新:我忘了您必须检查 ColumnIndex:如果用户单击标题行,则 ColumnIndex 的值为 -1,因此 UpDatedataGridView2.Columns[e.ColumnIndex] 会引发异常。总而言之,最终检查应如下所示:

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

【讨论】:

  • 你好;我在我的源代码中写了你的想法,但 C# 编译器告诉我我们的集合中没有 -1 数字,换句话说,索引号超出了范围。我收到此运行时错误:“索引超出范围。必须为非负数且小于集合的大小。参数名称:索引”
  • 您好,您应该在代码中的第一个和第二个“if”之间添加建议的检查。如果问题仍然存在,请发布整个方法并告诉我哪一行导致运行时错误。如果您正在通过 VS 调试器测试您的应用程序,您可能会发现通过在“调试/异常”窗口中为 CLR 选择“抛出”选项来调试它会更容易。
  • 嗨,我从错误中捕获了图片,请下载图片:mega.co.nz/…
  • 感谢您的图片!请将 ColumnIndex 检查添加到“if”子句中,如下所示: if (e.ColumnIndex != -1 && UpDatedataGridView2.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex != -1)
  • 嗨,我将 columnIndex Check 添加到我的条件中,但再次收到该错误。我认为问题是我的 DataGridView 中的黄色行和列在数字 Collection 中没有进入帐户。我有点困惑,我不知道该怎么办。 :-(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多