我有一个Datagridview,我从一个XML文件创建的数据集填充。这部分工作,我可以得到数据集的全部内容显示在数据网格中。我有额外的功能来根据日期和售出标志过滤datagridview。这也可以正常工作,因为在循环执行日期时datagridview会更新。但是我需要对“过滤后的”datagridview进行一些计算。这些计算需要将各种货币转换为GBP。因此,在对最佳方法进行一些研究之后,我决定遍历可见的datagridview并测试每个可见的。这是我提出的代码。不幸的是,在运行它时,所有测试都失败了,并且它尝试执行else子句,然后失败并显示“输入字符串格式不正确”异常。然而,我不认为这是问题,因为我会关注价格和货币价值并且他们“在当前情境中不存在”......现在我陷入困境并希望得到一些帮助。也许我正在走错路......
由于
哈利
for (int i = 1; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1["currency", i].ToString() == "USD")
{
myCommission += double.Parse(dataGridView1["commission", i].ToString()) * (double.Parse(dataGridView1["price", i].ToString()) * UStoGB);
}
else if (dataGridView1["currency", i].ToString() == "EURO")
{
myCommission += double.Parse(dataGridView1["commission", i].ToString()) * (double.Parse(dataGridView1["price", i].ToString()) * EUtoGB);
}
else
{
myCommission += double.Parse(dataGridView1["commission", i].ToString()) * double.Parse(dataGridView1["price", i].ToString());
}
}
答案 0 :(得分:0)
对一些笔记进行了一些改动:
foreach (DataGridViewRow row in dataGridView1.Rows)
{
switch (row["currency"].ToString())
{
case "USD":
myCommission += double.Parse(row["commission"].ToString()) * (double.Parse(row["price"].ToString()) * UStoGB);
break;
case "EURO":
myCommission += double.Parse(row["commission"].ToString()) * (double.Parse(row["price"].ToString()) * EUtoGB);
break;
case else:
myCommission += double.Parse(row["commission"].ToString()) *(double.Parse(row["price"].ToString());
break;
}
}
这不是一个更好的答案,但是将其更改为foreach将允许您将行放在行上以确定列的确切名称。列名称可能是区分大小写的,或者XML导入可能对列的名称做了些什么。
无论哪种方式都可以放入断点并查看行单元格的值
答案 1 :(得分:0)
我设法使用
让这个工作 for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1.Rows[i].Cells["currency"].FormattedValue.ToString() == "USD")
{
string tempval = dataGridView1.Rows[i].Cells["commission"].ToString();
myCommission += double.Parse(dataGridView1.Rows[i].Cells["commission"].FormattedValue.ToString()) * (double.Parse(dataGridView1.Rows[i].Cells["price"].FormattedValue.ToString()) * UStoGB);
}
else if (dataGridView1.Rows[i].Cells["currency"].FormattedValue.ToString() == "EURO")
{
myCommission += double.Parse(dataGridView1.Rows[i].Cells["commission"].FormattedValue.ToString()) * (double.Parse(dataGridView1.Rows[i].Cells["price"].FormattedValue.ToString()) * EUtoGB);
}
else
{
myCommission += double.Parse(dataGridView1.Rows[i].Cells["commission"].FormattedValue.ToString()) * (double.Parse(dataGridView1.Rows[i].Cells["price"].FormattedValue.ToString()));
}
}
似乎没有FormattedValue
参数,并且指定Rows[i]
和Cells[i]
它只是没有达到值。还需要禁用allowusertoaddrows功能,以便它不计算最后一行。这不是问题,因为它是readonly。
Mohgerth感谢您的回复将使用for
取代else
... case
部分,现在它的工作为