我有一个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上执行此操作,应用相同的逻辑。
非常感谢您关于更好地解决问题的建议。