我有一个从XML文件创建的数据集填充的Datagridview。这个部分起作用了,我可以将数据集的全部内容显示在一个数据网格中。我添加了根据日期和销售标志过滤datagridview的功能。当您在日期循环时更新datagridview时,这也可以正常工作。然而,我需要在“过滤”的datagridview上做一些计算。这些计算需要将各种货币转换为英镑。因此,在研究了最好的方法之后,我决定循环遍历可见的datagridview,并测试每个可见的。这就是我想要的代码。不幸的是,当运行它时,所有的测试都会失败,并且它会尝试执行else子句,然后该子句会失败,并出现一个"Input string was not in a run format“异常。然而,我不认为这是问题所在,因为我在价格和货币价值上放了一个手表,他们“不存在于当前的背景下”,...now im卡住了,希望能得到一些帮助。也许我走错了路……
谢谢
哈里
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());
}
}发布于 2012-01-17 05:31:25
对一些注释做了一些修改:
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将允许您对row进行监视,以确定列的确切名称。列名可能区分大小写,或者XML导入可能对列名做了某些操作。
无论哪种方式,都可以放入断点并查看行单元格的值
发布于 2012-01-17 15:43:55
我设法使用以下命令使其正常工作
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功能,这样它就不会计算最后一行。这不是问题,因为它是只读的。
Mohgerth感谢您的回复,它现在的工作方式是用case替换for...else部分
https://stackoverflow.com/questions/8886296
复制相似问题