1

我在几个地方有一个带有数据网格的 WinForms 应用程序。

在其中一个数据网格上,我为右键单击设置了一个事件,如下所示:

private void dataBundles_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    try
    {
        if (e.Button == MouseButtons.Right)
        {
            var cell = dataBundles.HitTest(e.X, e.Y);
            int cellRow = cell.RowIndex;
            DataTable table = (DataTable)dataBundles.DataSource;
            string bundleID = table.Rows[cellRow]["BundleID"].ToString();
            dataBundles.Rows[cellRow].DefaultCellStyle.BackColor = Color.Red;
            if (MessageBox.Show("Are you sure you want to delete Bundle ID '" + bundleID + "'?",
                                "Confirm Delete Bundle", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                int intBundleID = Int32.Parse(bundleID);
                cBundle bundle = new cBundle(intBundleID);
                bundle.Delete();
                PopulateDocumentsTab();                        
            }
            else
            {
                dataBundles.Rows[cellRow].DefaultCellStyle.BackColor = Color.White;
            }
        }
    }
    catch (Exception eX)
    {
        string eM = "Error occurred when right clicking the Bundles datagrid";
        aError err = new aError(eX, eM);
        MessageBox.Show(eX.Message, eM);
    }
}

但是由于某种原因,无论我在哪里右键单击此数据网格,rowindex 总是返回一个 -1,这当然是“关闭”网格,因此会导致错误。

我看不出我做错了什么,因为我在同一个应用程序中的其他数据网格上使用了相同的代码来右键单击事件,它们都工作正常。

我敢肯定,无论我缺少什么,它都会变得很简单,但是我已经关注这段代码很长时间了。

有人可以让我摆脱痛苦吗?

4

2 回答 2

1

终于找到问题了。. .

我正在使用“CellMouseDown”事件

一旦我将相同的代码转移到“MouseDown”事件中,它就起作用了

于 2012-12-07T15:30:58.423 回答
0

只需添加一些代码即可避免此错误

if (cellRow == -1) return

出现此错误的原因是因为您使用的是HitTest(e.X, e.Y)for dataTable 或者DataGridView您尝试单击 DataGridView 中的某个位置而不是 中的某个位置CellRow因此这意味着结果是

单元格行 -1

于 2012-12-07T15:31:52.347 回答