【问题标题】:Multiply two cells in DataGridView - if cell empty issue将 DataGridView 中的两个单元格相乘 - 如果单元格为空问题
【发布时间】:2013-09-16 18:15:56
【问题描述】:

您好,我有这种方法,它将 datagridview 的每一行中的两个单元格相乘并将它们求和。但问题是当单元格为空时。我收到一个异常:

对象不能从 DBNUll 转换为其他类型

我想在此方法中添加一个条件,如果 dtgksluzby 中的 castkaIndex2 或 pocetIndex2 不为空,则为它们执行此操作:

 private void calculateProductTwoColumns2(int castkaIndex2, int pocetIndex2, int tot_rows2)
    {
        try
        {
            double outVal = 0;
            foreach (DataGridViewRow row in dtg_ksluzby.Rows)
            {
                outVal = outVal + Convert.ToDouble(row.Cells[castkaIndex2].Value) * Convert.ToDouble(row.Cells[pocetIndex2].Value);
            }

            kpriplac.Text = outVal.ToString();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Chybové hlášení K3 " + ex.Message.ToString());
        }


    }

很抱歉,我还没有尝试任何方法,因为我不确定情况应该是什么样子。 我在想这样的事情:

 for (int i = 0; i < (dtg_ksluzby.Rows.Count - 0); i++)
            {

                if (dtg_ksluzby.Rows[i].Cells["pocet"].Value == null ||
                   (string)dtg_ksluzby.Rows[i].Cells["pocet"].Value == string.Empty)
                {
                    dtg_ksluzby.Rows[i].Cells["pocet"].Value = 0;
                }

}

有没有办法应用这个?

提前谢谢你

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    在执行Convert.ToDouble之前,您应该检查单元格值是否为System.DBNull.Value

    private void calculateProductTwoColumns2(int castkaIndex2, int pocetIndex2, int tot_rows2)
    {
        try
        {
            double outVal = 0;
            foreach (DataGridViewRow row in dtg_ksluzby.Rows)
            {
                outVal += Convert.ToDouble(row.Cells[castkaIndex2].Value is DBNull ? 0 : row.Cells[castkaIndex2].Value) * 
                          Convert.ToDouble(row.Cells[procetIndex2].Value is DBNull ? 0 : row.Cells[pocetIndex2].Value);
            }
    
            kpriplac.Text = outVal.ToString();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Chybové hlášení K3 " + ex.Message.ToString());
        }
    
    
    }
    

    【讨论】:

      【解决方案2】:

      试试这个:

          private void calculateProductTwoColumns2(int castkaIndex2, int pocetIndex2, int tot_rows2)
              {
                  try
                  {
                      double outVal = 0;
                      foreach (DataGridViewRow row in dtg_ksluzby.Rows)
                      {
                         double cell1;
                         double cell2;
                         if(Double.TryParse(row.Cells[castkaIndex2].Value, out cell1) && Double.TryParse(row.Cells[pocetIndex2].Value, out cell2 ))
                         {
                          outVal = outVal + cell1 * cell2;
                         }
                      }
      
                      kpriplac.Text = outVal.ToString();
                  }
                  catch (Exception ex)
                  {
                      MessageBox.Show("Chybové hlášení K3 " + ex.Message.ToString());
                  }
              }
      

      【讨论】:

      • 感谢您的快速回答,但我遇到了一些错误:无法从对象转换为字符串。和: double.TryParse(string, out double ) 的最佳重载方法匹配有一些无效参数。它在线开头: if(Double.TryParse... 请告诉我我应该改进什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      相关资源
      最近更新 更多