代码之家  ›  专栏  ›  技术社区  ›  mahesh

DataGridViewTextBoxColumn上的强制转换问题

  •  0
  • mahesh  · 技术社区  · 14 年前

    我注意到DataGridViewTextBoxColumn没有强制转换为十进制。我通过以下两种方式来证明这一点。

    1. 数据表 -

      DataTable dt = new DataTable();
      dt.Columns.Add("carats");
      dt.Columns.Add("rate");
      dt.Columns.Add("amount");
      dataGridView1.DataSource = dt;
      

    它可以很好地执行以下铸造代码

    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 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异常无法处理,对象引用未在对象上设置实例 代码如下:

    专用void DataGridView1_Cellendedit(对象发送方、DataGridViewCellEventArgs e)
    {
    int b=DataGridView1.CurrentCell.RowIndex;
    如果(
    DataGridView1[0,B].值!=dbnull.值&&
    DataGridView1[1,b].值!=dbnull.value
    )
    {
    dataGridView1[2,b].value=convert.todecimal(dataGridView1[0,b].value.toString())
    *convert.todecimal(dataGridView1[1,b].value.toString());
    
    }
    }
    

    我只是想知道它背后的原因。解决了DataGridViewTextBoxColumn的强制转换问题

    1 回复  |  直到 14 年前
        1
  •  1
  •   Rox    14 年前

    我只使用了'null'来检查DataGridView单元格,而不是DBnull。你试过了吗?

    编辑:看完后我发现 this (vb.net)上面说

    如果网格绑定到数据表,则“空”单元格将包含dbnull.value。如果网格绑定到其他对象或根本不绑定,则“空”单元格将不包含任何内容。

    所以您应该检查是否为空。