我在Windows窗体上工作.. 我有一个数据网格视图说(3列)。如果我没有第一列,两列中的数据,我想禁用第三列。 如果我在前两列中有数据,则应启用第三列..
像我这样的数据网格视图
如果前两列有一些数据,那么我必须在第三列中输入一些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();
对象引用未设置为对象的实例。 ..那么我写的代码是哪个事件?我的代码出了什么问题?
答案 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;
}
拜托,我还没有再试过一个直播项目。所以,试试吧,如果有些事情不起作用,请使用调试器查看错误的位置