C# 在左单元格FOU上发生ArgumentOutOfRange异常
当用户单击单元格时,当它有焦点时,如果我想打开另一个文件,我会收到一条错误消息C# 在左单元格FOU上发生ArgumentOutOfRange异常,c#,winforms,datagridview,C#,Winforms,Datagridview,当用户单击单元格时,当它有焦点时,如果我想打开另一个文件,我会收到一条错误消息参数超出范围异常错误 我已经添加了try catch&data Error事件处理程序,但仍然收到此错误。我怎样才能解决这个问题 private void datagridview_CellValidating(object sender, CellValidatingEventArgs e) { try { if (e.ColumnIndex == 2 || e.ColumnIndex == 3) {
参数超出范围异常错误
我已经添加了try catch&data Error事件处理程序
,但仍然收到此错误。我怎样才能解决这个问题
private void datagridview_CellValidating(object sender, CellValidatingEventArgs e)
{
try
{
if (e.ColumnIndex == 2 || e.ColumnIndex == 3)
{
datagridview.Rows[e.RowIndex].ErrorText = "";
int newInteger;
if (datagridview.Rows[e.RowIndex].IsModified)
return;
if (!int.TryParse(e.Value.ToString(),
out newInteger) || newInteger < -50000 || newInteger > 50000)
{
e.Cancel = true;
string errorMesssage = d_LanguageDropDownList.SelectedItem.ToString() == "French" ? "Entrez des valeurs décimales entre -50000 et 50000"
: "Enter decimal values between -50000 to 50000";
datagridview.Rows[e.RowIndex].ErrorText = errorMesssage;
}
}
}
catch (Exception exception)
{
}
}
private void datagridview_DataError(object sender, GridViewDataErrorEventArgs e)
{
}
private void datagridview\u CellValidating(对象发送方,CellValidatingEventArgs e)
{
尝试
{
如果(e.ColumnIndex==2 | | e.ColumnIndex==3)
{
datagridview.Rows[e.RowIndex].ErrorText=“”;
整数;
if(datagridview.Rows[e.RowIndex].IsModified)
返回;
如果(!int.TryParse(e.Value.ToString(),
out newInteger)| | newInteger<-50000 | | newInteger>50000)
{
e、 取消=真;
字符串errorMessage=d_LanguageDropDownList.SelectedItem.ToString()=“法语”?“企业价值中心-50000 et 50000”
:“输入-50000到50000之间的十进制值”;
datagridview.Rows[e.RowIndex].ErrorText=ErrorMessage;
}
}
}
捕获(异常)
{
}
}
私有void datagridview_DataError(对象发送方,GridViewDataErrorEventArgs e)
{
}
当网格中没有行时,或者在“新行”上(该行还没有索引)调用事件是可能的。因此,在为任何内容编制索引之前,您需要检查
RowIndex
是否>=0
如果设置断点,您将看到在错误发生之前,
RowIndex
是-1
对不起,我上传了错误的图片,我已更改了它。请检查它。在这一行datagridview.Rows[e.RowIndex].ErrorText=“”代码>我收到错误消息。请将e.RowIndex
保持在有效值范围内。类似这样的如果(e.RowIndex>=0&&e.RowIndex<6)
//做这些事情(这是粗略的代码)是的,它可以工作。您能告诉我这背后的原因是什么吗?我认为当它来自事件args时,RowIndex
总是在范围内。是否有可能是另一个线程同时删除了一些行,或者您访问了一个错误的网格视图实例?是的,这是_Green先生向我解释的。谢谢。我认为即使行索引是-1
,也不应该发生异常?(这里异常超出范围)如果(Double.Parse(e.Value.ToString())@Mr_Green:SecondaryRadGridView.Rows[e.RowIndex],我如何处理这一行的格式异常如果e.RowIndex
是-1
@linguini,则将引发异常:是的,使用TryParse
而不是Parse
,因为Parse
将引发FormatException
如果要解析的值不能解析为double
。