首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对过滤后的DataGridView执行计算

问对过滤后的DataGridView执行计算
EN

Stack Overflow用户
提问于 2012-01-17 05:09:16
回答 2查看 348关注 0票数 0

我有一个从XML文件创建的数据集填充的Datagridview。这个部分起作用了,我可以将数据集的全部内容显示在一个数据网格中。我添加了根据日期和销售标志过滤datagridview的功能。当您在日期循环时更新datagridview时,这也可以正常工作。然而,我需要在“过滤”的datagridview上做一些计算。这些计算需要将各种货币转换为英镑。因此,在研究了最好的方法之后,我决定循环遍历可见的datagridview,并测试每个可见的。这就是我想要的代码。不幸的是,当运行它时,所有的测试都会失败,并且它会尝试执行else子句,然后该子句会失败,并出现一个"Input string was not in a run format“异常。然而,我不认为这是问题所在,因为我在价格和货币价值上放了一个手表,他们“不存在于当前的背景下”,...now im卡住了,希望能得到一些帮助。也许我走错了路……

谢谢

哈里

代码语言:javascript
复制
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());
                }

            }
EN

回答 2

Stack Overflow用户

发布于 2012-01-17 05:31:25

对一些注释做了一些修改:

代码语言:javascript
复制
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导入可能对列名做了某些操作。

无论哪种方式,都可以放入断点并查看行单元格的值

票数 0
EN

Stack Overflow用户

发布于 2012-01-17 15:43:55

我设法使用以下命令使其正常工作

代码语言:javascript
复制
    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部分

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8886296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档