同时禁用特定列的数据网格视图获取空引用错误

时间:2014-04-11 20:58:05

标签: c# winforms

我在Windows窗体上工作.. 我有一个数据网格视图说(3列)。如果我没有第一列,两列中的数据,我想禁用第三列。 如果我在前两列中有数据,则应启用第三列..

像我这样的数据网格视图

enter image description here

如果前两列有一些数据,那么我必须在第三列中输入一些id。另外我不想在第三列中输入id 所以我在我的数据gridview cell_clik事件中写了代码,如下所示:

String Cell1=dataGridView1.Rows[0].Cells[0].Value.ToString();
String Cell2=dataGridView1.Rows[0].Cells[1].Value.ToString();

if(String.IsNullOrWhiteSpace(Cell1) && String.IsNullOrWhiteSpace(Cell2))
{
dataGridView1.Rows[0].Cells[2].ReadOnly = true;
}

所以当前两列空白时,如果我尝试给出驱动程序ID,则会在此行中收到错误

String Cell1=dataGridView1.Rows[0].Cells[0].Value.ToString();

对象引用未设置为对象的实例。 ..那么我写的代码是哪个事件?我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

当然,DataGridViewCell.Value为null,然后在其上调用ToString()会导致异常

您可以使用conditional operator

进行安全检查
string Cell1 = dataGridView1.Rows[0].Cells[0].Value == null ? string.Empty :
               dataGridView1.Rows[0].Cells[0].Value.ToString();

如果你想在单元格上启用/禁用行编辑,你需要这样的东西

protected void dgv_RowEnter(object sender, DataGridViewCellEventArgs  a)
{
    EnableDisableRowCell(dgv.Rows[a.RowIndex]);
}

protected void dgc_CellValueChanged(object sender, DataGridViewCellEventArgs a)
{
    EnableDisableRowCell(dgv.Rows[a.RowIndex]);
}

void EnableDisableRowCell(DataGridViewRow row)
{
    string cell1=row.Cells[0].Value == null ? string.Empty : row.Cells[0].ToString();
    string cell2=row.Cells[1].Value == null ? string.Empty : row.Cells[1].ToString();
    if(string.IsNullOrWhiteSpace(cell1) && string.IsNullOrWhiteSpace(cell2))
        row.Cells[2].ReadOnly = true;
    else
        row.Cells[2].ReadOnly = false;
}

拜托,我还没有再试过一个直播项目。所以,试试吧,如果有些事情不起作用,请使用调试器查看错误的位置