在DatagridViewtextBoxColumn上转换问题

时间:2010-11-04 11:58:55

标签: c# datagridview

我注意到DatagridviewtextBoxColumn没有强制转换为Decimal。我通过以下两种方式证明了这一点。

  1. DataTable : -

    DataTable dt = new DataTable();
    dt.Columns.Add("carats");
    dt.Columns.Add("rate");
    dt.Columns.Add("amount");
    dataGridView1.DataSource = dt;
    
  2. 使用以下转换代码

    可以正常工作
    private void dataGridView1_CellEndEdit(object sender,DataGridViewCellEventArgs e)
    {
      int b = dataGridView1.CurrentCell.RowIndex;
      if (
           dataGridView1[0, b].Value != DBNull.Value && 
           dataGridView1[1, b].Value !=    DBNull.Value
         )
      {
        dataGridView1[2, b].Value = Convert.ToDecimal(dataGridView1[0, b].Value.ToString())          
        * Convert.ToDecimal(dataGridView1[1, b].Value.ToString());
    
      }
    }
    

    但是我对DatagridviewtextBoxColumn的主要观察结果是它为什么?

    2的 DatagridviewtextboxColumn : -

    DataGridViewTextBoxColumn cts = new DataGridViewTextBoxColumn();              
    dataGridView1.Columns.Insert(0, cts);
    DataGridViewTextBoxColumn rt = new DataGridViewTextBoxColumn();
    dataGridView1.Columns.Insert(1, rt);
    DataGridViewTextBoxColumn amt = new DataGridViewTextBoxColumn();
    dataGridView1.Columns.Insert(2, amt);
    

    抛出错误就像“NullReference Exception is Unhandle”,“对象引用未在对象上设置实例”与以下代码:

    private void dataGridView1_CellEndEdit(object sender,DataGridViewCellEventArgs e)
    {
      int b = dataGridView1.CurrentCell.RowIndex;
      if (
           dataGridView1[0, b].Value != DBNull.Value && 
           dataGridView1[1, b].Value !=    DBNull.Value
         )
      {
        dataGridView1[2, b].Value = Convert.ToDecimal(dataGridView1[0, b].Value.ToString())          
        * Convert.ToDecimal(dataGridView1[1, b].Value.ToString());
    
      }
    }
    

    我只是想知道背后的原因。并使用DatagridviewtextBoxColumn

    解决转换问题

1 个答案:

答案 0 :(得分:1)

我只使用'null'来检查datagridView单元格,而不是DBNull。你试过那个吗?

编辑:读了一下之后,我找到了this(VB.NET),说明了

  

如果网格绑定到DataTable,则“空”单元格将包含DBNull.Value。如果网格绑定到其他东西或根本没有绑定,那么“空”单元格将包含Nothing

所以你应该检查一下。