【问题标题】:DataGridview Skip The Value Of First Row ColumnDataGridview跳过第一行列的值
【发布时间】:2010-10-06 06:59:30
【问题描述】:

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");
        }
    }

上面的代码抛出“Object Cannot cast from DBNull to other types”之类的错误。即使有值。

现在看看另一个代码:

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");

            }        

        }
    }

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

例如......

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

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的第一行的列值不被接受。

【问题讨论】:

    标签: c#


    【解决方案1】:
    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 最好的问候,
    约旦

    【讨论】:

    • @lordan,它不起作用,它返回的第一行列值为0.00你可以试试。
    • @lordan,你很聪明,但试试看。它只是回报。 0.00 在 textbox1 中,我在 dgv 第一行的列上输入值“12”。
    • @mahesh 是否可以将这种和平的代码放在其他代码中,即使您正在编辑单元格的值,新值可能不会放入单元格值中,我建议您放置此代码在 CellEndEdit 事件中
    【解决方案2】:

    最佳解决方案如下:

      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 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 2013-08-17
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多