在一个项目中采用了NHibernate做为持久层,在开发的过程中遇到了根据数据库动态生成TreeView的问题。在网络检索相关资料时发现,大部分都存在问题,而有一部分又是采用DataSet作为数据载体的。而NHibernate返回的结果我是以Ilist的方式体现的,没办法,只能根据网上的资料自己改写了。下面是递归生成TreeView的具体代码:
/// <summary>
/// 加载前台栏目配置表
/// </summary>
private void LoadBldColumnConfig()
{
BldColumnConfigBLL BldColumnConfigBLL = new BldColumnConfigBLL();
IList list = BldColumnConfigBLL.GetAllBldColumnConfigs();
tvColumns.Nodes.Clear();
CreateTree((TreeNode)null, 0, list);
}
/// <summary>
/// 根据前台栏目配置表创建树
/// </summary>
/// <param name="pNode">TreeNode</param>
/// <param name="parentID">根结点的FParentColumn</param>
/// <param name="list">IList</param>
private void CreateTree(TreeNode pNode, int parentID, IList list)
{
IList newList = FilterBldColumnConfig(list, parentID);
foreach (BldColumnConfig bldColumnConfig in newList)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{
//添加根节点
Node.Text = bldColumnConfig.FColumnName;
Node.Value = bldColumnConfig.Id.ToString();
tvColumns.Nodes.Add(Node);
CreateTree(Node, bldColumnConfig.Id, list);
}
else
{
//添加当前节点的子节点
Node.Text = bldColumnConfig.FColumnName;
Node.Value = bldColumnConfig.Id.ToString();
pNode.ChildNodes.Add(Node);
CreateTree(Node, bldColumnConfig.Id, list);
}
}
}
/// <summary>
/// 根据参数筛选前台栏目配置表
/// </summary>
/// <param name="list"></param>
/// <param name="parm"></param>
/// <returns></returns>
private IList FilterBldColumnConfig(IList list, int parm)
{
ArrayList newList = new ArrayList();
foreach (BldColumnConfig bldColumnConfig in list)
{
if (bldColumnConfig.FParentColumn == parm)
{
newList.Add(bldColumnConfig);
}
}
return newList;
}