最后的RowHeader单击DataGridView

时间:2019-02-24 00:48:11

标签: c# winforms datagridview

在C#Windows窗体程序中,我想根据在TextBox中单击的RowHeader更新DataGridView

if (e.RowIndex != -1 || e.ColumnIndex != -1)
{
    fnameBox.Text   = dgvPatient.Rows[rowIndex].Cells[0].Value.ToString();
    mnameBox.Text   = dgvPatient.Rows[rowIndex].Cells[1].Value.ToString();
    lnameBox.Text   = dgvPatient.Rows[rowIndex].Cells[2].Value.ToString();
    mobnumBox.Text  = dgvPatient.Rows[rowIndex].Cells[3].Value.ToString();
    emailBox.Text   = dgvPatient.Rows[rowIndex].Cells[4].Value.ToString();
    bdate.Value     = Convert.ToDateTime(dgvPatient.Rows[rowIndex].Cells[5].Value.ToString());
    medHistBox.Text = dgvPatient.Rows[rowIndex].Cells[6].Value.ToString();
}

所以,我的问题是DataGridView的末尾显示为空行,因此,当我单击此标头时,`Convert.ToDateTime语句会引发错误并给应用程序造成错误。我尝试检查转换结果是否为空值...上面的代码是最新试用版,并且也失败了。

如何消除点击最后一个RowHeader的错误?

1 个答案:

答案 0 :(得分:0)

在使用值之前,应检查null并将try catch添加到代码中。对于ToString() dgvPatient.Rows[rowIndex].Cells[0].Value != null之前的所有单元格,应检查单元格值是否不为空,并使用DateTime.TryParse代替Convert.ToDateTime

try
{
    fnameBox.Text   = dgvPatient.Rows[rowIndex].Cells[0].Value != null ? dgvPatient.Rows[rowIndex].Cells[0].Value.ToString() : string.Empty;
    mnameBox.Text   = dgvPatient.Rows[rowIndex].Cells[1].Value.ToString();
    lnameBox.Text   = dgvPatient.Rows[rowIndex].Cells[2].Value.ToString();
    mobnumBox.Text  = dgvPatient.Rows[rowIndex].Cells[3].Value.ToString();
    emailBox.Text   = dgvPatient.Rows[rowIndex].Cells[4].Value.ToString();
    DateTime date;
    DateTime.TryParse(dgvPatient.Rows[rowIndex].Cells[5].Value.ToString(), out date);
    //bdate.Value   = Convert.ToDateTime(dgvPatient.Rows[rowIndex].Cells[5].Value.ToString());
    medHistBox.Text = dgvPatient.Rows[rowIndex].Cells[6].Value.ToString();
}
    catch (Exception e)
{

}