从dataGridView's列的总和不计算正确的方式在WindowsFormApplication

本文关键字:计算 WindowsFormApplication 方式 dataGridView | 更新日期: 2023-09-27 18:12:01

我正在努力计算我的dataGridView中的3列的总和。事实是,这个求和的函数是正确的,因为在函数加载,我第一次调用函数,它显示了正确的和,但如果我调用它按钮插入数据在gridView,插入数据后,它显示了一个完全随机的数字,我无法理解问题在哪里。谢谢!

这是插入和计算插入后的和的按钮:

private void button1_Click(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                label5.Text = ("1");
            }
            if (checkBox2.Checked)
            {
                label5.Text = ("0");
            }
            textBox1.Text = (Convert.ToInt32(textBox5.Text) - Convert.ToInt32(textBox6.Text)).ToString();
            string startPath = Application.StartupPath;

            var filepath = startPath + "''" + "Grupe.sdf";
            var connString = (@"Data Source=" + filepath);
            using (var conn = new SqlCeConnection(connString))
            {
                try
                {
                    conn.Open();
                    var query = "INSERT INTO copii(prezenta, Nume, Prenume, Program, Taxa, Achitat, Diferenta, Grupa) VALUES('" + label5.Text + "', '" + textBox2.Text.Trim() + "', '" + textBox3.Text.Trim() + "', '" + textBox4.Text.Trim() + "', '" + textBox5.Text.Trim() + "', '" + textBox6.Text.Trim() + "', '" + textBox1.Text.Trim() + "', '" + textBox7.Text.Trim() + "')";
                    var command = new SqlCeCommand(query, conn);
                    command.ExecuteNonQuery();
                    refresh();
                    sume();   //calling the function for the sum
                    this.dataGridView1.Sort(this.dataGridView1.Columns["Nume"], ListSortDirection.Ascending);
                    colorRows();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }

下面是计算dataGridView的3个不同列之和的函数:

public void sume()
        {
            int sum1 = 0;
            int sum2 = 0;
            int sum3 = 0;
            for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
            {
                if (label17.Text.Length != 0)
                {
                    sum1 = Convert.ToInt32(label17.Text) + (Convert.ToInt32(dataGridView1.Rows[i].Cells[5].Value));
                    label17.Text = sum1.ToString();
                }
                if (label18.Text.Length != 0)
                {
                    sum2 = Convert.ToInt32(label18.Text) + (Convert.ToInt32(dataGridView1.Rows[i].Cells[6].Value));
                    label18.Text = sum2.ToString();
                }
                if(label19.Text.Length != 0)
                {
                    sum3 = Convert.ToInt32(label19.Text) + (Convert.ToInt32(dataGridView1.Rows[i].Cells[7].Value));
                    label19.Text = sum3.ToString();
                }
            }
            MessageBox.Show("done");
        }

从dataGridView's列的总和不计算正确的方式在WindowsFormApplication

你的some()方法是不正确的,当你在添加数据网格的值时,你的方法应该是这样的,每次for循环执行sum的值都在你的方法中重置。因此,您需要像这样修改它(假设您只需要添加一次标签17,18,19)。

public void sume()
    {
        int sum1 = 0;
        int sum2 = 0;
        int sum3 = 0;
        for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
        {
            if (label17.Text.Length != 0)
            {
                sum1 += (Convert.ToInt32(dataGridView1.Rows[i].Cells[5].Value));                    
            }
            if (label18.Text.Length != 0)
            {
                sum2+= (Convert.ToInt32(dataGridView1.Rows[i].Cells[6].Value));                    
            }
            if(label19.Text.Length != 0)
            {
               sum3+= (Convert.ToInt32(dataGridView1.Rows[i].Cells[7].Value));                   
            }
        }
        sum1 += Convert.ToInt32(label17.Text);
        sum2 += Convert.ToInt32(label18.Text);
        sum3 += Convert.ToInt32(label19.Text);
        label17.Text = sum1.ToString();
        label18.Text = sum2.ToString();
        label19.Text = sum3.ToString();
        MessageBox.Show("done");
    }

和在数据源上执行求和优于在数据网格上执行求和