InvalidCastException在datagridview中未处理

时间:2017-05-11 16:35:06

标签: c#

每当我按下表格中DataGridView的空行时,我的程序就会停止。错误说:

  

InvalidCastException未处理。

这是发生错误的代码的一部分:

private void dataGridView1_Click(object sender, EventArgs e)
{
    id = Convert.ToInt32(dataGridView1.SelectedCells[0].Value); //This is the line with the error
    textBox1.Text = dataGridView1.SelectedCells[1].Value.ToString();
    textBox2.Text = dataGridView1.SelectedCells[2].Value.ToString();
    textBox3.Text = dataGridView1.SelectedCells[3].Value.ToString();
    textBox4.Text = dataGridView1.SelectedCells[4].Value.ToString();
}

2 个答案:

答案 0 :(得分:0)

第一个网格单元的数据类型是什么?

您尝试转换的变量是非数字或某些特殊字符数据类型,这就是它导致错误的原因。如果您想使用非数字或非数字和数字数据的组合,我建议您使用convert.toString()方法。

答案 1 :(得分:0)

正如你刚刚说的那样:

  每当我按空行

时程序停止

然后你已经

id = Convert.ToInt32(dataGridView1.SelectedCells[0].Value); //This is the line with the error

它始终会失败,因为Int是值类型且不能为空,并且当您有空行时,此单元格上的值很可能是null

尝试这样的事情:

try
{
    id = Convert.ToInt32(dataGridView1.SelectedCells[0].Value); //This is the line with the error
    textBox1.Text = dataGridView1.SelectedCells[1].Value.ToString();
    textBox2.Text = dataGridView1.SelectedCells[2].Value.ToString();
    textBox3.Text = dataGridView1.SelectedCells[3].Value.ToString();
    textBox4.Text = dataGridView1.SelectedCells[4].Value.ToString();
}
catch(InvalidCastException exception)
{
    // not much to do with it, you can display assign empty valuest to your text boxes or notify user that there's nothing to select
}

备用apporach可能会检查单元格是否有价值。

if(string.IsNullOrWhiteSpace(dataGridView1.SelectedCells[0].Value))
{
    return;
}

id = Convert.ToInt32(dataGridView1.SelectedCells[0].Value); 
//Assign values to textboxes

还有另一种可能性:

int id;
if(int.TryParse( dataGridView1.SelectedCells[0].Value.ToString(), out id ))
{
    //Assign values to textboxes
}