从datagridview读取数据并保存到列表中

时间:2015-01-26 21:38:56

标签: c# winforms list for-loop datagridview

我有一个C#程序,它将一些数据存储在名为DGV的datagridview中。 DGV有6列,具有以下结构:

Column1:SALES_US

第2栏:QUANTITY_US

第3栏:SALES_EU

Column4:QUANTITY_EU

第5栏:SALES_AS

第6栏:QUANTITY_AS

程序使用某些项目的名称填充标记为“SALES”的列(例如,列1-3-5)。然后在标记为“QUANTITY”的列(例如,列2-4-6)中,仅当某些项目已售出时,用户才输入一些数字。 例如。如果在第1行我有单元格[1,0]中的项目A(所以第0行,第1列,假设从0开始索引行/列)如果在美国销售了1000个商品A,我可以加1000等等。

因此,在用户输入之后,DGV将在1-3-5列(再次假设索引从0开始)有一些数字,但也有可能某些单元格为空。

所以我需要遍历用户输入数量的列并将数量存储在列表中(在下面的示例中,我创建了一个字符串列表,名为“myKeys”)。

有快速/有效的方法吗?请考虑我不是超级专家,到目前为止我只发现了以下内容(有效,但似乎很慢)。

class organizer
{
    public List<string> organize(DataGridView DGV, DataGridView DGV2, 
        DataGridView DGV3)
    {

    List<string> myKeys = new List<string>(); //This is the list of quantities

    // the cells of DGV are accessible using [col, row] coordinates

        for (int counterRows = 0; counterRows < countRows; counterRows++)
        {
            try // look for data in the second column
            {
                test = DGV[1, counterRows].Value.ToString(); // if the cells is empty the string conversion is not possible and no info will be stored
                myKeys.Add(DGV[1, counterRows].Value.ToString());
            }
            catch{}

            try // look for data in the fourth column
            {
                test = DGV[3, counterRows].Value.ToString(); // if the cells is empty the string conversion is not possible and no info will be stored
                myKeys.Add(DGV[3, counterRows].Value.ToString());
            }
            catch{}            

            try // look for data in the sixth column
            {
                test = DGV[5, counterRows].Value.ToString(); // if the cells is empty the string conversion is not possible and no info will be stored
                myKeys.Add(DGV[5, counterRows].Value.ToString());
            }
            catch{}
         }

    // here the same for-loop is repeated to add the quantities to the list reading from the other datagridviews. 

    return myKeys;

    }
}

在这种情况下,我使用for循环遍历单元格并使用try-catch查看该值是否可以转换为字符串。如果单元格为空,则“.ToString()”将失败,并且不会执行在列表“myKeys”中添加单元格值的以下行。 但我需要直接指定我首先在第1列,第3列以及最后5点工作。

除了(可能)无用的代码重复之外,对于如此小的datagridview(我的行少于50行),代码似乎运行得很慢。我需要在其他datagridviews上执行此操作,应用相同的逻辑。

非常感谢您关于更好地解决问题的建议。

0 个答案:

没有答案