点击DGV的空白区域时出现ArgumentOutOfRangeException错误

时间:2017-10-08 20:53:07

标签: c# datagridview

我的搜索表单中有一个datagridview,现在我编写代码来生成 ContextMenuStrip ,当我右键单击某个特定行然后它显示不同的选项时。除非我点击datagridview的空白部分,否则每件事情都可以。它会产生错误

enter image description here

了解更多细节,请考虑下面的图片

enter image description here

当我按下该行时会很好,但是当我点击此行下面的空白部分时出现错误

以下是 MouseClickEvent

的代码
 private void SearchPanelDataGridView_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            ContextMenuStrip smenu = new System.Windows.Forms.ContextMenuStrip();
            var htest = SearchPanelDataGridView.HitTest(e.X, e.Y);
            SearchPanelDataGridView.ClearSelection();

            SearchPanelDataGridView.Rows[htest.RowIndex].Selected = true;
            smenu.Items.Add("Clear Record").Name = "Clear Record";
            smenu.Items.Add("Pay Amount").Name = "Pay Amount";
            smenu.Items.Add("Break Apart").Name = "Break Apart";
            smenu.Items.Add("View Details").Name = "View Details";
            int CurrentMouseOverRow = SearchPanelDataGridView.HitTest(e.X, e.Y).RowIndex;
            smenu.Show(SearchPanelDataGridView, new Point(e.X, e.Y));

            name = SearchPanelDataGridView.SelectedRows[0].Cells[2].Value.ToString();
            cnic = SearchPanelDataGridView.SelectedRows[0].Cells[8].Value.ToString();
            fathername = SearchPanelDataGridView.SelectedRows[0].Cells[3].Value.ToString();
            City = SearchPanelDataGridView.SelectedRows[0].Cells[10].Value.ToString();

            smenu.ItemClicked += new ToolStripItemClickedEventHandler(smenu_ItemClicked);

        }
    }

1 个答案:

答案 0 :(得分:1)

您的方法包含可能发生此异常的几个地方。

首先是以下一行:

SearchPanelDataGridView.Rows[htest.RowIndex].Selected = true;

您的htest.RowIndex-1,因为您在空白区域内点击时没有按任何一行。您应该检查-1并离开。

如果没有选择任何项目,则可以发生此异常的下一个位置是访问SearchPanelDataGridView.SelectedRows[0]。因此,您应该查看Count集合的SelectedRows。如果是0则离开。

当通过不在范围内的索引访问Cells时,也会发生异常。

不要忘记索引以0开头,以n-1结尾;)