16,718
社区成员
发帖
与我相关
我的任务
分享/// <summary>
/// 将一个表数据填充到指定树上,父节点编号和子节点编号由两个字段表示。
/// </summary>
/// <param name="tree">需要填充的树对象</param>
/// <param name="dtData">数据所在的表对象</param>
/// <param name="strOIDFieldName">子节点编号字段</param>
/// <param name="strParentFieldName">父节点编号字段</param>
/// <param name="strTextFieldName">节点文本字段</param>
/// <param name="strSortFieldName">排序字段名称</param>
/// <returns>成功返回True,否则返回False</returns>
public static bool FillTree(TreeView tree,DataTable dtData,
string strOIDFieldName,string strParentFieldName,
string strTextFieldName,string strSortFieldName)
{
if(tree==null || dtData==null || dtData.Columns.Count<2)
return false;
if( !dtData.Columns.Contains(strOIDFieldName) ||
!dtData.Columns.Contains(strParentFieldName) ||
!dtData.Columns.Contains(strTextFieldName))
return false;
ImageList imgList=tree.ImageList;
tree.ImageList=null;
tree.Nodes.Clear();
DataRow []drRoot;
if(strSortFieldName!=null && dtData.Columns.Contains(strSortFieldName))
drRoot=dtData.Select(strParentFieldName + " = '' OR " + strParentFieldName + " IS NULL",strSortFieldName);
else
drRoot=dtData.Select(strParentFieldName + " = '' OR " + strParentFieldName + " IS NULL");
if(drRoot==null || drRoot.Length==0)
return true;
foreach(DataRow dr in drRoot)
{
TreeNode nodRoot = tree.Nodes.Add(dr[strTextFieldName].ToString());
nodRoot.ImageIndex=tree.ImageIndex;
nodRoot.SelectedImageIndex=tree.SelectedImageIndex;
nodRoot.Tag=dr[strOIDFieldName].ToString();
FillNode(nodRoot,dtData,strOIDFieldName,strParentFieldName,strTextFieldName,strSortFieldName);
}
tree.ImageList=imgList;
tree.Refresh();
return true;
}
private static void FillNode(TreeNode nodParent,DataTable dtData,string strOIDFieldName,string strParentFieldName,string strTextFieldName,string strSortFieldName)
{
DataRow []drParent;
if(strSortFieldName!=null && dtData.Columns.Contains(strSortFieldName))
drParent=dtData.Select(strParentFieldName + " = '" + nodParent.Tag.ToString() + "'",strSortFieldName);
else
drParent=dtData.Select(strParentFieldName + " = '" + nodParent.Tag.ToString() + "'");
if(drParent==null || drParent.Length==0)
return;
foreach(DataRow dr in drParent)
{
TreeNode node = nodParent.Nodes.Add(dr[strTextFieldName].ToString());
node.ImageIndex=nodParent.ImageIndex;
node.SelectedImageIndex=nodParent.ImageIndex;
node.Tag=dr[strOIDFieldName].ToString();
FillNode(node,dtData,strOIDFieldName,strParentFieldName,strTextFieldName,strSortFieldName);
}
}
TreeNode tn= new TreeNode(); //创建个节点
tn.Text = "新添加的";
要添加的node.Nodes.Add(tn); //添加到父节点上