C#将行添加到datagridview

时间:2011-11-23 04:07:54

标签: c# loops datagridview row populate

我无法使用字符串数组中的项填充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次,没有别的。为什么会这样?我似乎无法弄清楚我的代码有什么问题。

1 个答案:

答案 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的创建移到循环内而不是在循环之外。这样,在循环的每次迭代中都会创建一个新项。如果您没有在每次迭代中创建新项目,那么您将反复添加相同的项目,在每次迭代中更改其标题。