在数据网格视图中将两个单元格相乘 - 如果单元格为空问题
本文关键字:单元格 两个 如果 问题 网格 数据网 数据 视图 | 更新日期: 2023-09-27 18:31:00
你好,我有这个方法,可以将数据网格视图的每一行中的两个单元格相乘并求和。但问题是当单元格为空时。我收到一个异常:
对象不能从 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;
}
}
有没有办法应用它?
提前谢谢你
在执行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());
}
}
试试这个:
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());
}
}