Datagridview中指定的强制转换无效错误c#

时间:2015-04-19 21:20:51

标签: c# winforms checkbox datagridview

这是我之前从未有过的一个非常奇怪的错误。我在datagridview中添加了一个复选框,如下所示:

DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn();
datagrid.Columns.Insert(0, checkBoxColumn);

我收到错误

  

指定的演员表无效

它在数据格式的单元格格式中强调了这一点:

for (int i = 0; i <= this.datagrid.Rows.Count - 1; i++)
{
    if ((int)datagrid.Rows[e.RowIndex].Cells[7].Value <= 5)
    {
        this.datagrid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
    }

检查单元格7中的值是否低于该值或等于5,如果它将其更改为红色。我已经尝试将单元格更改为8,因为我认为它已经移动了,因为我在0处添加了一个新列,但它没有工作。

2 个答案:

答案 0 :(得分:3)

试试这个

for (int i = 0; i <= this.datagrid.Rows.Count - 1; i++)
{
    if (Convert.ToInt32(datagrid.Rows[e.RowIndex].Cells[7].Value) <= 5)
    {

    }

答案 1 :(得分:0)

尝试使用int.TryParse,如果可以成功解析为int,则只会解析单元格的值。像这样:

int temp;

for (int i = 0; i <= this.datagrid.Rows.Count - 1; i++)
{        
    if (int.TryParse(datagrid.Rows[e.RowIndex].Cells[7].Value.ToString(), out temp) == true) 
    {
         if (temp <= 5)
         {
             this.datagrid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
         }
    }

至少这将停止抛出异常,您可以确定您的单元格格式是否正常工作。我猜你的数据集中有一行在第7列和/或第8列中有一个错误或空值。如果你在零位添加了这个新的复选框列,那么你现在需要引用.Cells[8]

引用列的更好方法是按名称命名。然后,如果您将来添加或删除列,则不会在整个代码中弄乱其余的列索引引用。如果你完成上述工作,试试这个:

if (int.TryParse(datagrid.Rows[e.RowIndex].Cells["yourColumnName"].Value, out temp) == true) 

要使用此方法,您必须在创建和添加列时指定.Name列。