zoukankan      html  css  js  c++  java
  • 树TreeView控件与DataTable交互添加节点(最高效的方法)

    #region "读取树结点从Datatable"
    /// <summary>
    /// 读取树结点从Datatable"
    /// </summary>
    /// <param name="TreeView1">在填充的TreeView控件</param>
    /// <param name="DT">数据源DataTable</param>
    /// <param name="IsAppendNode">是在现有TreeView控件上添加结点,还是清空再添加</param>
    /// <param name="ParentNumberColumnIndex">在DataTable中,代表父节点编号的列索引</param>
    /// <param name="NumberColumnIndex">在DataTable中,代表当前节点编号的列索引</param>
    /// <param name="NameColumnIndex">在DataTable中,代表当前节点名称的列索引</param>
    /// <returns>True/False</returns>
    public bool ReadNodesFromDataTable(TreeView TreeView1, DataTable DT, bool IsAppendNode, int ParentNumberColumnIndex, int NumberColumnIndex, int NameColumnIndex)
    {
    try
    {
    if (IsAppendNode == false)
    {
    TreeView1.Nodes.Clear();
    }
    if (DT != null && DT.Rows.Count > 0)
    {
    DataRow[] DR = null;
    DR = DT.Select(DT.Columns[ParentNumberColumnIndex].ColumnName + "='' or " + DT.Columns[ParentNumberColumnIndex].ColumnName + "='0' or " + DT.Columns[ParentNumberColumnIndex].ColumnName + " is null");//先将顶级的查出来
    for (int I = 0; I <= DR.Length - 1; I++)//先将顶级的加入到TreeView中
    {
    TreeNode TNode = new TreeNode(DR[I][DT.Columns[NameColumnIndex].ColumnName].ToString());
    TNode.Tag = DR[I][DT.Columns[NumberColumnIndex].ColumnName].ToString();
    TNode.Name = DR[I][DT.Columns[NameColumnIndex].ColumnName].ToString();
    TreeView1.Nodes.Add(TNode);
    }
    for (int I = 0; I <= TreeView1.Nodes.Count - 1; I++)//再递归遍历结点
    {
    ForTreeNodeFormDT(TreeView1.Nodes[I], DT, ParentNumberColumnIndex, NumberColumnIndex, NameColumnIndex);
    }
    }
    return false;
    }
    catch
    {
    return true;
    }
    }

    /// <summary>
    /// 从DT中递归遍历出结点
    /// </summary>
    /// <param name="TempNode">传入的顶级结点</param>
    /// <param name="DT">保存TreeView结构的DataTable</param>
    /// <param name="ParentNumberColumnIndex">在DataTable中,代表父节点编号的列索引</param>
    /// <param name="NumberColumnIndex">在DataTable中,代表当前节点编号的列索引</param>
    /// <param name="NameColumnIndex">在DataTable中,代表当前节点名称的列索引</param>
    private void ForTreeNodeFormDT(TreeNode TempNode, DataTable DT, int ParentNumberColumnIndex, int NumberColumnIndex, int NameColumnIndex)
    {
    string TTag = null;
    TTag = TempNode.Tag.ToString();
    DataRow[] DR = null;
    DR = DT.Select(DT.Columns[ParentNumberColumnIndex].ColumnName + "='" + TTag + "'");

    for (int I = 0; I <= DR.Length - 1; I++)
    {
    TreeNode TNode = new TreeNode(DR[I][DT.Columns[NameColumnIndex].ColumnName].ToString());
    TNode.Tag = DR[I][DT.Columns[NumberColumnIndex].ColumnName].ToString();
    TNode.Name = DR[I][DT.Columns[NameColumnIndex].ColumnName].ToString();
    TempNode.Nodes.Add(TNode);
    }

    foreach (TreeNode aNode in TempNode.Nodes)
    {
    ForTreeNodeFormDT(aNode, DT, ParentNumberColumnIndex, NumberColumnIndex, NameColumnIndex);
    }
    }
    #endregion

  • 相关阅读:
    HTML中设置在浏览器中固定位置fixed定位
    [简短问答]C-Lodop中一些测试用的地址
    LODOP打印超文本字符串拼接2 单选选择css样式表格
    HTML布局排版之制作个人网站的文章列表
    LODOP打印超文本字符串拼接1 固定表格填充数值
    HTML用table布局排版 padding清零
    [简短问答]LODOP套打问题及相关
    [简短问答]LODOP打印不清晰
    Unity3D深入浅出 -组件与节点之间的调用关系
    Unity3D深入浅出 -创造 物理材质(Physics Materials)
  • 原文地址:https://www.cnblogs.com/blogpro/p/11462918.html
Copyright © 2011-2022 走看看