将2个datagridview分组列减去第三列

时间:2018-05-19 12:33:51

标签: c# ms-access datagridview

这是我用来显示产品库存的数据网格视图,我能够通过条形码和产品名称以及购买总和,销售总额填充组:

现在我要做的是从购买中减去销售并在第三栏中显示

这是我试过的代码

private void frmStock_Load(object sender, EventArgs e)
{
    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;User Id=;Password=;Data Source=TS-POS.accdb");
    conn.Open();
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT Bcode, Pname, SUM(Ppurchase) AS Ppurchase, SUM(Psale) AS Psale FROM Stock GROUP BY Bcode,Pname;", conn);
    DataSet ds = new DataSet();
    dataAdapter.Fill(ds);
    dataGridView1.DataSource = ds.Tables[0];
    conn.Close();
    Update();
}

private void button1_Click(object sender, EventArgs e)
{


    Update();

}
private void update()
{
    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        int a = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);
        int b = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value);

        int c = a - b;

        dataGridView1.Rows[i].Cells[4].Value = c;


    }
}

现在的问题是,它根本不会显示任何内容

1 个答案:

答案 0 :(得分:1)

我打赌你在form_load活动中有这个。那是对的吗?我认为这是真的原因是你的连接字符串对于你正在使用的数据库是不正确的,应该抛出异常。除非将有问题的代码包装到try ... catch块中,否则Load事件不会显示异常。 .accdb扩展使用Microsoft.ACE提供程序。

我不确定你是如何得到任何东西的,因为你甚至无法与当前的提供商访问该版本。我只能按照你告诉我的内容去做,并且必须假设你所看到的数据来自其他一些代码。

以下是驻留在我的文档文件夹中的.accdb数据库的典型连接字符串。

Provider = Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\Charlie\Documents\TS-POS.accdb

由于对问题所做的更改而编辑

重命名update()方法。更新是一个关键字。请注意,您的sub被称为update,但您尝试调用Update? (C#区分大小写)

此外,您可以在sqlstatement

中进行此数学运算
OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT Bcode, Pname, SUM(Ppurchase) AS Ppurchase, SUM(Psale) AS Psale, SUM(Ppurchase) - SUM(Psale) as Total FROM Stock GROUP BY Bcode,Pname;", conn);