我有一个显示在面板内的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();
我做错了什么?
答案 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();
,这样数据就不会翻倍。 :)