面板不更新TreeView

时间:2014-07-13 23:45:33

标签: c# asp.net winforms

我有一个显示在面板内的TreeView。 TreeView中的数据基于从数据库返回的数据。第一次,数据是正确的。第二次,TreeView没有刷新,之前的数据仍然显示在树中。我检查了包含数据的列表。该列表返回了正确的数据。我有谷歌这个问题,并且无法通过发布的一些答案解决它。以下是如何创建TreeView并将其添加到Panel中的示例代码。

    ReportGroups gr = new ReportGroups();
    var Name = gr.GetReportName(groupID);
    TreeView tr = new TreeView();
    tr.BeginUpdate();
    tr.Size = new Size(570, 600);
    tr.Name = "Home";
    tr.Nodes.Add("Reports Name");
    tr.CheckBoxes = true;
    if (Name.Count() > 0)
    {
        foreach (var item in Name)
        {
            if (item != null)
            {
                tr.Nodes[0].Nodes.Add(item.reportName);
            }
        }
    }
    tr.Nodes[0].ExpandAll();
    tr.EndUpdate();
    this.pDisplayReportName.Width = tr.Width * 2;
    this.pDisplayReportName.Height = 300;
    this.pDisplayReportName.Controls.Add(tr);
    this.pDisplayReportName.Refresh();   

我做错了什么?

2 个答案:

答案 0 :(得分:1)

简单的选择是在this.pDisplayReportName.Controls.Clear();之后使用tr.EndUpdate();。但是,如果您在同一个Panel中有其他控件,这将导致问题。

最好的选择是使用this.pDisplayReportName.Controls.RemoveByKey("MyTree");代替this.pDisplayReportName.Controls.Clear();

另外一个选择是在设计时添加TreeView(名称为tr)而不是动态地添加到面板中。然后,在tr.Nodes.Clear();之前使用tr.BeginUpdate();,并从代码中删除以下两行。

TreeView tr = new TreeView();
.
.
.
this.pDisplayReportName.Controls.Add(tr);

干杯

答案 1 :(得分:1)

尝试添加this.pDisplayReportName.Clear();,这样数据就不会翻倍。 :)