DataGridview跳过第一行列的值

时间:2010-10-06 06:59:31

标签: c#

dataGridview 第一行列名称金额不会返回任何值,因为已插入值。

为了我们的同伴方便我绘制表格,因为它有助于更​​好地回答它。

我在dataGridview上的表格如下:

   private void Form1_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("name",typeof(string));
        dt.Columns.Add("amount",typeof(decimal));
        dataGridView1.DataSource = dt;
        dataGridView1.Columns[1].DefaultCellStyle.Format = "f2";
    }

现在我准备好了桌子,主要代码如下:

  private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
    {
        decimal sum = 0.00m;

        for (int i = 0; i < dataGridView1.Rows.Count-1; i++) 
        {
                sum = sum + Convert.ToDecimal(dataGridView1[1, i].Value);
                textBox1.Text = sum.ToString("f2");
        }
    }

以上代码抛出错误,如“对象无法从DBNull强制转换为其他类型”。即使有值。

现在看另一个代码:

private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
    {
        decimal sum = 0.00m;

        for (int i = 0; i < dataGridView1.Rows.Count-1; i++) 
        {
            if (dataGridView1[1, i].Value != DBNull.Value) 
            {
                sum = sum + Convert.ToDecimal(dataGridView1[1, i].Value);
                textBox1.Text = sum.ToString("f2");

            }        

        }
    }

现在这段代码没有抛出任何错误,但仍然存在问题。问题是,当我在金额列上输入值时,看起来它会跳过第一行列名金额的值。

e.g ....

我在列名金额上输入的值如下:

1st Row column amount values is = 12
2nd Row column amount values is = 12
3rd Row column amount values is = 12

现在textbox1中的总显示为= 24,其中实际总数为= 36。

编码出错了,表明dataGridview的第一行列值不被接受。

2 个答案:

答案 0 :(得分:0)

private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
    {
        decimal sum = 0.00m;

        for (int i = 0; i < dataGridView1.Rows.Count; i++) 
        {
            if (dataGridView1[1, i].Value != DBNull.Value) 
            {
                sum = sum + Convert.ToDecimal(dataGridView1[1, i].Value);
                textBox1.Text = sum.ToString("f2");

            }        

        }
    }

改变是在for循环中的条件。当你的循环条件是i&lt; dataGridView1.Rows.Count - 1.你循环除最后一行之外的所有行这就是为什么你得到24而不是36 最诚挚的问候,
约尔丹

答案 1 :(得分:0)

最佳解决方案如下:

  private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
    {
        decimal sum = 0.00m;

        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            if (dataGridView1[1, i].Value != DBNull.Value)
            {
                sum = sum + Convert.ToDecimal(dataGridView1[1, i].Value);
                textBox1.Text = sum.ToString("f2");

            }

        }
    }

只需更改上面的dataGridView事件。