我无法使用字符串数组中的项填充datagridview。这是我用来调用函数的代码:
ThreadPool.QueueUserWorkItem((o) =>
ReBuildObjectExplorer();
功能本身:
try
{
List<ExplorerItem> list = new List<ExplorerItem>();
var item = new ExplorerItem();
for (int i = 0; i < lbl.Length; i++) // lbl = string array with items
{
item.title = lbl[i].Name;
list.Add(item);
}
BeginInvoke((MethodInvoker)delegate
{
explorerList = list;
dgvObjectExplorer.RowCount = explorerList.Count;
dgvObjectExplorer.Invalidate();
});
}
catch (Exception e) { MessageBox.Show(e.ToString(); }
问题是:假设数组中有76个项目。当我使用这个代码时,它总是添加第76个项目76次,没有别的。为什么会这样?我似乎无法弄清楚我的代码有什么问题。
答案 0 :(得分:1)
我想你想要:
try
{
List<ExplorerItem> list = new List<ExplorerItem>();
for (int i = 0; i < lbl.Length; i++) // lbl = string array with items
{
var item = new ExplorerItem();
item.title = lbl[i].Name;
list.Add(item);
}
BeginInvoke((MethodInvoker)delegate
{
explorerList = list;
dgvObjectExplorer.RowCount = explorerList.Count;
dgvObjectExplorer.Invalidate();
});
}
catch (Exception e) { MessageBox.Show(e.ToString(); }
也就是说,将新ExplorerItem
的创建移到循环内而不是在循环之外。这样,在循环的每次迭代中都会创建一个新项。如果您没有在每次迭代中创建新项目,那么您将反复添加相同的项目,在每次迭代中更改其标题。