Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对datagrid视图的两列执行乘法,并将其分配到第三列?_C#_Winforms_Datagridview_Datagridviewcolumn - Fatal编程技术网

C# 如何对datagrid视图的两列执行乘法,并将其分配到第三列?

C# 如何对datagrid视图的两列执行乘法,并将其分配到第三列?,c#,winforms,datagridview,datagridviewcolumn,C#,Winforms,Datagridview,Datagridviewcolumn,这是我的代码,我试图显示Rate*Supply列值的乘法,并将其分配给数据网格视图中的Amount列: try { Query = "Select id,Code,Description,Rate,Cust_Id,Supply,Empty,Amount,Received from Items "; adap = new SQLiteDataAdapter(Query, GlobalVars.conn); ds = new DataSet(); adap.Fill

这是我的代码,我试图显示
Rate*Supply
列值的乘法,并将其分配给数据网格视图中的
Amount
列:

try
{
    Query = "Select  id,Code,Description,Rate,Cust_Id,Supply,Empty,Amount,Received from Items ";
    adap = new SQLiteDataAdapter(Query, GlobalVars.conn);
    ds = new DataSet();
    adap.Fill(ds, "Items");
    dtgVOuchers.DataSource = ds.Tables[0];

    ds.Tables[0].Columns["Amount"].DefaultValue = (ds.Tables[0].Columns["Rate"].DefaultValue) * (ds.Tables[0].Columns["Supply"].DefaultValue); //error

    //dtgVOuchers.Rows.Clear();
    ds.Tables[0].Clear();
    dtgVOuchers.Refresh();
}
有人知道我如何在数据网格视图中实现此功能吗。请帮我更正这个代码。谢谢

只需使用查询

Select  id,Code,Description,Rate,Cust_Id,Supply,Empty,isnull(Rate,0)*isnull(Supply,0) as [Amount],Received from Items 

使用以下代码..运行循环以更新所有行中的“金额”列

注意:虽然这种方法不是首选方法,因为它会影响性能。所以在sql查询中进行这种计算。我不明白为什么不在sql查询中进行MunMultiplication

  foreach (DataRow row in ds.Tables[0].Rows)
       {
          row["Amount"]= Convert.ToDecimal(row["Rate"])* Convert.ToDecimal(row["Supply"]);
          ds.Tables[0].AcceptChanges();        
       } 
    dtgVOuchers.DataSource = ds.Tables[0];
    dtgVOuchers.Refresh();

SQL甚至没有被标记在这个问题上,所以你可能想重新考虑你的答案。我知道,但用户没有提到他想在代码中乘法,而这可以在查询中轻松完成。错误:SQLItemManager:可能的SQL语法错误:选择id、代码、描述、速率、客户id、供应、空、isnull(速率,0)*isnull(供应,0)作为[Amount],从Items接收[接近“isnull”:语法错误]异常名称:NS\U错误\U故障异常消息:组件返回的故障代码:0x80004005(NS\U错误\U故障)[mozIStorageConnection.createStatement]@恐怖。刀锋-哈哈…当你为一种没有标准的语言假设一个答案时,就会发生这种情况。祝你好运!remove isnull只需使用rate*supplyNote:我想在代码中乘法,而不是在查询中。谢谢,因为我没有在数据表中添加列。所以请告诉我如何为这种情况编写代码。在这里,我试着像你的代码一样,但它给出了答案错误:ds.Tables[0]。列[“金额”]。表达式=(ds.Tables[0]。列[“比率”]。表达式)*(ds.Tables[0]。列[“供应”]。表达式);错误:它给出了无效的强制转换异常……对象不能从DBNull强制转换为其他类型……。请帮助删除此错误为您编辑了答案。如果有任何问题,请告诉我。
  foreach (DataRow row in ds.Tables[0].Rows)
       {
          row["Amount"]= Convert.ToDecimal(row["Rate"])* Convert.ToDecimal(row["Supply"]);
          ds.Tables[0].AcceptChanges();        
       } 
    dtgVOuchers.DataSource = ds.Tables[0];
    dtgVOuchers.Refresh();
            foreach (DataGridViewRow row in dtgVOuchers.Rows)
            {
                row.Cells[dtgVOuchers.Columns["Amount"].Index].Value = (Convert.ToDouble(row.Cells[dtgVOuchers.Columns["Rate"].Index].Value) * Convert.ToDouble(row.Cells[dtgVOuchers.Columns["Supply"].Index].Value));

            }