计算列DataGridView - C#

时间:2013-12-02 00:48:09

标签: c# datagridview calculated-columns

我想在DataGridView中获取一个计算列,起初我觉得它很简单,但现在我已经挣扎了一个小时。 编辑列时,下面的代码工作正常:

private void ReceiptDataGrid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{            
    DataGridViewRow RecieptRow = RecieptDataGrid.Rows[e.RowIndex];
    RecieptRow.Cells[4].Value = double.Parse(RecieptRow.Cells[2].Value.ToString()) * double.Parse(RecieptRow.Cells[3].Value.ToString());            
}

但是当我添加新行时,我正在努力使列自动获取其值。 我得到一个NullReferenceException 我使用相同代码时的异常。 我试过一个for循环并得到了同样的错误

private void RecieptDataGrid_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
   for (int i = 0; i < e.RowCount; i++)
  {
       DataGridViewRow RecieptRow = RecieptDataGrid.Rows[e.RowIndex + i];
      RecieptRow.Cells[4].Value = double.Parse(RecieptRow.Cells[2].Value.ToString()) * double.Parse(RecieptRow.Cells[3].Value.ToString());         
  }                       
}

我意识到它看到空格中的单元格是否有解决方法? 请帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用IsNewRow属性检查您的RecieotRow是否为新行(具有空值):

for (int i = 0; i < e.RowCount; i++)
{
   DataGridViewRow RecieptRow = RecieptDataGrid.Rows[e.RowIndex + i];

   if (RecieptRow.IsNewRow) continue;

   RecieptRow.Cells[4].Value = double.Parse(RecieptRow.Cells[2].Value.ToString()) * double.Parse(RecieptRow.Cells[3].Value.ToString());         
}  

答案 1 :(得分:0)

我发现了问题,它将行默认值读取为空值。 我通过将默认值添加到将数据添加到DataGrid的字符串来替换默认属性。