从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");
}
你的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");
}
和在数据源上执行求和优于在数据网格上执行求和