求助:指定的参数超出有效值范围
本人在dataGridView中加入combobox控件后,点击最后一行空行时出现的异常,代码中用断点无法捕捉,问题一出现然后程序就从新运行,忘大虾们给予解决,小弟分不是很多,只能够将仅有的20分拿来孝敬。
未处理 System.ArgumentOutOfRangeException
Message="指定的参数已超出有效值的范围。\r\n参数名: rowIndex"
Source="System.Windows.Forms"
ParamName="rowIndex"
StackTrace:
在 System.Windows.Forms.DataGridView.GetCellDisplayRectangle(Int32 columnIndex, Int32 rowIndex, Boolean cutOverflow) --------------------编程问答-------------------- 你的程序中调用了这个方法:DataGridView.GetCellDisplayRectangle?
最后一个空行只是一个表示,实际上不存在这个行。 --------------------编程问答-------------------- 这些问题一般是控件的内部异常,没处理,try catch是捕获不到的。
一般你在程序中用了多线程,同步没处理好会抛出这类异常。
解决方法是继承DataGridView,重写内部函数,添加异常处理。 --------------------编程问答--------------------
不是他程序调用了这个方法,是DataGridView在刷新界面,或绑定数据时,控件自身调用了这个内部函数,控件内部的这个函数并没异常处理,所以就抛出异常了,而且这类异常不能被try catch捕获。
楼主应该是用了多线程绑定数据。 --------------------编程问答--------------------
程序中dataGridView和combobox绑定的是两个不同数据源,难道这样会出现异常吗?
小弟不是很明白。 --------------------编程问答-------------------- 应该是程序内部绑定数据时的问题,你把完整关于combobox添加的代码贴出来看看 --------------------编程问答--------------------
private void frmOrderManage_Load(object sender, EventArgs e)
{
DataSet dsTabel = datacon.getds("Select * from tb_ddgl order by 序号", "tb_ddgl");
dt = dsTabel.Tables["tb_ddgl"];
new DataOperate().cboxBind("select distinct 客户类别 from tb_ddgl", "ddgl_khlb", "客户类别", cboxClientNo);
cpdt = datacon.getds("select * from tb_cpda", "tb_cpda").Tables["tb_cpda"];
currencyTable = datacon.getds("select * from tb_hbhl", "tb_hbhl").Tables["tb_hbhl"];
cboxClientNo.Text = "";
MoveLast();
controlEnable(true);
setDataGridViewWdith();
cbbBZ.DataSource = currencyTable;
cbbBZ.DisplayMember = "币种";
this.dgvOrder.Controls.Add(cbbBZ);
}
private void dgvOrder_CurrentCellChanged(object sender, EventArgs e)
{
if (tsbSave.Enabled == true)
{
cbbBZ.Visible = true;
cbbBZ.Focus();
cbbBZ.Text = this.dgvOrder.CurrentCell.Value.ToString();
Rectangle rect = this.dgvOrder.GetCellDisplayRectangle(dgvOrder.CurrentCell.ColumnIndex, dgvOrder.CurrentCell.RowIndex, false);
cbbBZ.Left = rect.Left;
cbbBZ.Top = rect.Top;
cbbBZ.Width = rect.Width;
cbbBZ.Height = rect.Height;
}
else
{
dgvOrder.Controls[0].Visible = false;
cbbBZ.Visible = false;
}
} --------------------编程问答-------------------- 哦,原来是你自己调用的,那异常应该在
private void dgvOrder_CurrentCellChanged(object sender, EventArgs e)
这个事件里,你插断点跟踪吧。 --------------------编程问答--------------------
断点跟踪不了啊,都没运行到Rectangle rect = this.dgvOrder.GetCellDisplayRectangle(dgvOrder.CurrentCell.ColumnIndex, dgvOrder.CurrentCell.RowIndex, false);
就出错了。 --------------------编程问答-------------------- 问题范围又清晰了点,当dataGridView绑定数据源后再对其直接进行操作,然后鼠标直接点击dataGridView控件,随机的点击次数就会出现下面异常,然后整个程序直接退出重新运行,有没有人能够帮小弟把这个问题给解决啦?(未处理 System.ArgumentOutOfRangeException
Message="指定的参数已超出有效值的范围。\r\n参数名: rowIndex"
Source="System.Windows.Forms"
ParamName="rowIndex"
StackTrace:
在 System.Windows.Forms.DataGridView.GetCellDisplayRectangle(Int32 columnIndex, Int32 rowIndex, Boolean cutOverflow)) --------------------编程问答-------------------- 没有人能解决这个问题吗? --------------------编程问答-------------------- 我也出现了这个问题,一模一样,不知道怎么解决
补充:.NET技术 , C#