这是我之前从未有过的一个非常奇怪的错误。我在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处添加了一个新列,但它没有工作。
答案 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
列。