我在几个地方都有一个带有数据网格的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,当然这是“关闭”网格,因此会导致错误。
我无法看到我做错了什么,因为我在同一个应用程序中的其他数据网格上使用相同的代码进行右键单击事件,并且它们都运行良好。
我确信无论我想要什么,它都会变得简单,但我现在已经在这段代码上主演了一段时间。
有人能让我摆脱痛苦吗?
答案 0 :(得分:1)
最后发现了这个问题。 。
我正在使用'CellMouseDown'事件
一旦我将相同的代码转移到'MouseDown'事件而不是它工作
答案 1 :(得分:0)
只需添加一些代码即可避免此错误
if (cellRow == -1) return
出现此错误的原因是因为您正在使用HitTest(e.X, e.Y)
进行dataTable或DataGridView
,并且您尝试单击DataGridView中的某个位置而不是Cell
中的Row
{ {1}}所以这意味着结果是
cellRow -1