日期:2014-05-18 浏览次数:20738 次
/// <summary> /// 添加目录树节点的展开事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tvDir_BeforeExpand(object sender, TreeViewCancelEventArgs e) { this.GetSubTreeNodes(e.Node); } /// <summary> /// 获取指定节点下的次两级子节点 /// </summary> /// <param name="currNode">指定的节点信息</param> private void GetSubTreeNodes(TreeNode currNode) { DataSet ds = new DataSet(); foreach (TreeNode tmpNode in currNode.Nodes) { if (tmpNode.Nodes.Count == 0) { ModelOperation.ElementList eleListMode = (ModelOperation.ElementList)tmpNode.Tag; if (!eleListMode.IsElement) // true: 是会后一级 { ds = eleListDAL.GetElementListByUpList(eleListMode.ListId, ListType); if ((null != ds) && (ds.Tables.Count > 0)) { DataTable tmpTab = ds.Tables[0]; foreach (DataRow row in tmpTab.Rows) { TreeNode node = new TreeNode(row["listname"].ToString()); ModelOperation.ElementList subeleListMode = this.CreateElementListObj(row); // 创建目录信息的实体对象 node.Tag = subeleListMode; tmpNode.Nodes.Add(node); } } } } }
------解决方案--------------------
在几点展开的时候去加载该节点下的数据
//展开节点前
private void tvReport_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
//如果节点下的没有子节点,返回
if (e.Node.Nodes.Count == 0)
return;
for (int i = 0; i < e.Node.Nodes.Count; i++)
{
//如果是已经加载过的返回
if (e.Node.Nodes[i].Nodes.Count != 0)
{
break;
}
//加载节点下的子节点的子节点
TB_BG bgList = (e.Node.Nodes[i].Tag as TB_BG);
List<TB_BG> currentList = bgManage.GetModelList(" BG_FLXH=" + bgList.BG_XH);
AddNode(e.Node.Nodes[i], false);
}
}