【发布时间】:2012-11-23 20:41:29
【问题描述】:
我正在逐行读取文本文件,并将其插入到数组中。
然后我有一个名为 custIndex 的列表,其中包含某些索引,即我正在测试的 items 数组的索引,以查看它们是否是有效代码。 (例如,custIndex[0]=7,所以我检查了 items[7-1] 中的值,看看它是否有效,在我这里有的两个字典中)。然后,如果存在无效代码,我将这一行(items 数组)添加到 dataGridView1。
问题是,dataGridView1 中的某些列是组合框列,因此用户可以选择正确的值。当我尝试添加 items 数组时,出现异常:“DataGridView 中发生以下异常:System.ArgumentException:DataGridViewComboBoxCell 值无效。”
我知道组合框是用正确的数据源正确添加的,因为如果我只是将 items 数组中的一些项目添加到 dataGridView1,比如 items[0],组合框会显示得很好并且没有例外抛出。我想问题是当我尝试将 items 数组中的错误值添加到 dataGridView1 行时。
我不确定如何处理这个问题。有没有办法可以添加项目中除该值之外的所有项目?或者我可以从项目中添加值并让它与填充的下拉项目一起显示在组合框单元格中吗?
if(choosenFile.Contains("Cust"))
{
var lines = File.ReadAllLines(path+"\\"+ choosenFile);
foreach (string line in lines)
{
errorCounter = 0;
string[] items = line.Split('\t').ToArray();
for (int i = 0; i <custIndex.Count; i++)
{
int index = custIndex[i];
/*Get the state and country codes from the files using the correct indices*/
Globals.Code = items[index - 1].ToUpper();
if (!CountryList.ContainsKey(Globals.Code) && !StateList.ContainsKey(Globals.Code))
{
errorCounter++;
dataGridView1.Rows.Add(items);
}
}//inner for
if (errorCounter == 0)
dataGridView2.Rows.Add(items);
}//inner for each
}//if file is a customer file
【问题讨论】:
-
为什么不将记录放入List,然后从列表中删除不良记录(或使用LINQ仅选择好的记录放入新的Array/List)?
-
有没有办法将项目数组中的值添加到组合框单元格中?如果我将数组中的违规值设置为 string.empty,它会起作用,但似乎我也应该能够在组合框中显示该值。
-
我想是的,但我已经有一段时间没有尝试过了。您也可以尝试创建一个新的列类型,并使用默认的 ComboBox 来将自定义值输入到打开的文本框部分。然后只需将 ComboBox 的文本设置为您获得的值。
标签: c# winforms datagridview