使用递归加载无层次限制的TreeView控件的节点
来源:互联网 发布:如何做好网络招聘 编辑:程序博客网 时间:2024/05/20 06:25
遞歸方法:
#region 加載樹節點
/// <summary>
/// 加載樹節點。樹的基本思路是:從指定的父節點開始遞歸調用顯示子樹(可以對DataTable.DefaultView.RowFilter設置過濾條件)
/// </summary>
/// <param name="treeNodeCollection">要加載TreeNode對象的TreeNode.Nodes的集合</param>
/// <param name="dt">DataTable 對象</param>
/// <param name="nodeIdField">保存節點ID列的字段名稱</param>
/// <param name="parentIdField">保存父節點ID列的字段名稱(只允許字符和數字類型)</param>
/// <param name="nodeNameField">保存節點名稱列的字段名稱</param>
/// <param name="nodeImageIndexField">保存節點圖片索引列的字段名稱</param>
/// <param name="nodeSelectedImageIndexField">保存選擇節點圖片索引列的字段名稱</param>
/// <param name="parentNodeTag">父節點標記</param>
public void LoadTreeNode(TreeNodeCollection treeNodeCollection,DataTable dt,string nodeIdField,string parentIdField,string nodeNameField,string nodeImageIndexField,string nodeSelectedImageIndexField,string parentNodeTag)
{
try
{
if(dt.Rows.Count<=0) return;
TreeNode tmpNode;
int imageIndex=-1;
string oldFilter=dt.DefaultView.RowFilter;
DataView dv=new DataView(dt);
dv.Sort=dt.DefaultView.Sort;
if(dv[0][parentIdField].GetType()==typeof(System.String))
dv.RowFilter=parentIdField+"='"+parentNodeTag+"'";
else
dv.RowFilter=parentIdField+"="+parentNodeTag;
if(oldFilter!=string.Empty)
dv.RowFilter=dv.RowFilter+" and "+oldFilter;
foreach(DataRowView drv in dv)
{
tmpNode=new TreeNode();
tmpNode.Text=drv[nodeNameField].ToString();//+drv[nodeIdField].ToString().Trim();
tmpNode.Tag=drv[nodeIdField];
if(drv[nodeSelectedImageIndexField]!=System.DBNull.Value)
{
imageIndex=Convert.ToInt32(drv[nodeSelectedImageIndexField]);
if(imageIndex>=0)
{
tmpNode.ImageIndex=imageIndex;
tmpNode.SelectedImageIndex=imageIndex;
}
}
if(drv[nodeImageIndexField]!=System.DBNull.Value)
{
imageIndex=Convert.ToInt32(drv[nodeImageIndexField]);
if(imageIndex>=0)
{
tmpNode.ImageIndex=imageIndex;
}
}
string father=drv[nodeIdField].ToString();
treeNodeCollection.Add(tmpNode);
LoadTreeNode(tmpNode.Nodes,dt,nodeIdField,parentIdField,nodeNameField,nodeImageIndexField,nodeSelectedImageIndexField,father);
}
}
catch(Exception te)
{
MessageBox.Show(te.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
#endregion
/// <summary>
/// 加載樹節點。樹的基本思路是:從指定的父節點開始遞歸調用顯示子樹(可以對DataTable.DefaultView.RowFilter設置過濾條件)
/// </summary>
/// <param name="treeNodeCollection">要加載TreeNode對象的TreeNode.Nodes的集合</param>
/// <param name="dt">DataTable 對象</param>
/// <param name="nodeIdField">保存節點ID列的字段名稱</param>
/// <param name="parentIdField">保存父節點ID列的字段名稱(只允許字符和數字類型)</param>
/// <param name="nodeNameField">保存節點名稱列的字段名稱</param>
/// <param name="nodeImageIndexField">保存節點圖片索引列的字段名稱</param>
/// <param name="nodeSelectedImageIndexField">保存選擇節點圖片索引列的字段名稱</param>
/// <param name="parentNodeTag">父節點標記</param>
public void LoadTreeNode(TreeNodeCollection treeNodeCollection,DataTable dt,string nodeIdField,string parentIdField,string nodeNameField,string nodeImageIndexField,string nodeSelectedImageIndexField,string parentNodeTag)
{
try
{
if(dt.Rows.Count<=0) return;
TreeNode tmpNode;
int imageIndex=-1;
string oldFilter=dt.DefaultView.RowFilter;
DataView dv=new DataView(dt);
dv.Sort=dt.DefaultView.Sort;
if(dv[0][parentIdField].GetType()==typeof(System.String))
dv.RowFilter=parentIdField+"='"+parentNodeTag+"'";
else
dv.RowFilter=parentIdField+"="+parentNodeTag;
if(oldFilter!=string.Empty)
dv.RowFilter=dv.RowFilter+" and "+oldFilter;
foreach(DataRowView drv in dv)
{
tmpNode=new TreeNode();
tmpNode.Text=drv[nodeNameField].ToString();//+drv[nodeIdField].ToString().Trim();
tmpNode.Tag=drv[nodeIdField];
if(drv[nodeSelectedImageIndexField]!=System.DBNull.Value)
{
imageIndex=Convert.ToInt32(drv[nodeSelectedImageIndexField]);
if(imageIndex>=0)
{
tmpNode.ImageIndex=imageIndex;
tmpNode.SelectedImageIndex=imageIndex;
}
}
if(drv[nodeImageIndexField]!=System.DBNull.Value)
{
imageIndex=Convert.ToInt32(drv[nodeImageIndexField]);
if(imageIndex>=0)
{
tmpNode.ImageIndex=imageIndex;
}
}
string father=drv[nodeIdField].ToString();
treeNodeCollection.Add(tmpNode);
LoadTreeNode(tmpNode.Nodes,dt,nodeIdField,parentIdField,nodeNameField,nodeImageIndexField,nodeSelectedImageIndexField,father);
}
}
catch(Exception te)
{
MessageBox.Show(te.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
#endregion
調用方法:
LoadTreeNode(this.treeView1.Nodes,ds.Tables[dataMember],"NodeId","ParentId","NodeName","NodeImageIndex","NodeSelectedImageIndex",rootTag);
- 使用递归加载无层次限制的TreeView控件的节点
- 使用递归加载无层次限制的MainMenu控件的MenuItem
- TreeView控件的CheckBox自动实现父子节点递归选定
- TreeView控件的加载,遍历递归的应用
- 使用递归方法获得TreeView中CheckBox选中的节点
- TreeView控件的一些关于节点的CheckBox使用
- TreeView 控件树节点 TreeNode 的异步加载及对节点 CHECKBOX 的多选控制
- asp.net使用treeview控件,使用reeNodePopulate事件加载节点
- TreeView 树形控件的加载
- 控件treeview的使用
- TreeView控件的使用
- TreeView 控件的使用
- TreeView控件的使用
- TreeView控件的使用
- TreeView控件的使用
- 采用递归算法为TreeView控件加载节点(节点信息保存于SqlServer) ASP.Net相...
- asp.net treeview控件无刷新选择和删除节点的ajax方法
- asp.net treeview控件无刷新选择和删除节点的ajax方法
- 用Windows引导启动WinXP+PCBSD
- OSPF协议简述
- JDBC及简单抄作连接数据库源码
- ORACLE备份&恢复经典案例
- AVS、H264及MPEG-2技术细节比较
- 使用递归加载无层次限制的TreeView控件的节点
- Windows API一日一练(13)TranslateMessage函数
- FCKeditor使用方法
- Visual Studio 2008、SQL Server 2008和Windows Server 2008发布日期确定
- asp.net连接Mysql(connector/net 5.0)
- DOS命令大全
- ASP.NET中Session的状态保持方式
- 常用的javascript小技巧[收藏]
- VCard 通信薄格式说明