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

C# 将2个datagridview分组列减去第三列,c#,ms-access,datagridview,C#,Ms Access,Datagridview,这是我用来显示产品库存的datagridview,我可以通过条形码和产品名称以及购买总额和销售总额来填充它 现在我要做的是从购买中减去销售额,并显示在第三列中 这是我试过的代码 private void frmStock_Load(object sender, EventArgs e) { OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;User Id=;Password=;Da

这是我用来显示产品库存的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;


    }
}

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

我敢打赌,您在表单加载事件中会显示它。对吗?我之所以认为这是真的,是因为您的connectionstring对于正在使用的数据库不正确,应该引发异常。Load事件不会显示异常,除非将有问题的代码包装到try…catch块中。.accdb扩展名使用Microsoft.ACE提供程序

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

这是驻留在“我的文档”文件夹中的.accdb数据库的典型连接字符串

Provider = Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\Charlie\Documents\TS-POS.accdb
由于对问题所做的更改而进行编辑

重命名更新方法。更新是一个关键字。请注意,您的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);

谢谢Charles,我已经解决了这个问题,你在我更新上一期时回答了,请重新检查问题谢谢Charles,但不幸的是,这不起作用,我需要你提供更多。在提出两个建议后,说这不起作用并不能让我继续下去。Update方法将出错,因为我看不到您在哪里添加第四列来保存此新信息。只要查询有效,查询更改就应该有效,这将是一种更好的方法,因为它将自动成为数据集的一部分。好的,作为测试,请在表单dataGridView2中添加另一个DataGridView。使其足够宽以显示您的预期数据。确保您的代码运行我在答案底部提供的查询。添加dataGridView2.DataSource=ds.Tables[0];就在你的控制室的正上方;线运行并显示两个DataGridView结果的屏幕截图。您可以尝试通过HeaderText属性设置它们。dataGridView1.Columns[0]。HeaderText=标题标签;我认为这将允许使用阿拉伯语。只需在从数据集中填充数据后再执行即可。您必须对[1]、[2]等列重复此操作。请参阅根据您的更改对我的答案进行的更新。