TreeView中父子级数据添加異常

独木成林_ 2019-08-29 04:56:09


string sql = " ";
DataTable dt1 = halper.GetDataSet(sql);
//从treeview_list表内读取整个各节点之间关系表,不包括被删除的,同时排序,主要考虑到各功能段在箱体内的顺序问题
TreeView tree = new TreeView();

TreeNode[] nodes = new TreeNode[dt1.Rows.Count + 1];//新建一个treenode数组,存储每一个treenode,便于后续子节点直接可以增加在父节点上

for (int i = 0; i < dt1.Rows.Count; ++i)//遍历每一个节点,然后将其增加到相应的父节点下
{
TreeNode tn = new TreeNode();
tn.Text = ((string)dt1.Rows[i]["名稱"]).Trim();//数据库提取的text含有空格,要去除空格
int pos = (int)dt1.Rows[i]["編號"];
int parent = (int)dt1.Rows[i]["id"];//先获取父节点的id号
if ((int)dt1.Rows[i]["編號"] == 0)//如果是项目节点,直接在根节点上增加
{

treeView1.Nodes.Add(tn);
}
else//其他节点
{

int number = (int)dt1.Rows[i]["編號"];
//tree.Nodes[0].Nodes[number].Nodes[parent].Nodes.Add(tn);
//在父节点上增加当前节点
nodes[parent].Nodes.Add(tn);//此處彈出異常System.NullReferenceException: '並未將物件參考設定為物件的執行個體。'此時我參考tn其實是有值的。
}

}


...全文
133 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
独木成林_ 2019-08-30
  • 打赏
  • 举报
回复
引用 3 楼 XBodhi. 的回复:
确保好,父子关系,用树链表就可以了。
dear,我可能需要代碼幫助。
XBodhi. 2019-08-30
  • 打赏
  • 举报
回复
用递归,把你的那个 编号,父子关系处理下。
XBodhi. 2019-08-30
  • 打赏
  • 举报
回复
把错误 发出来看下。
u011271924 2019-08-30
  • 打赏
  • 举报
回复
这逻辑要确保数据的排序要按照上到下,才行
独木成林_ 2019-08-30
  • 打赏
  • 举报
回复
引用 5 楼 XBodhi. 的回复:
你的代码那,核心的发下我看看。


/// <summary>
        /// 重置TreeView菜單
        /// </summary>
        /// <param name="sql">sql語句</param>
        private void setTVList()
        {
            string sql = "select * from 組織架構 order by id,名稱,編號 ";
            DataTable dt1 = halper.GetDataSet(sql);
            //从treeview_list表内读取整个各节点之间关系表,不包括被删除的,同时排序,主要考虑到各功能段在箱体内的顺序问题
            TreeView tree = new TreeView();
            //新建一个treenode数组,存储每一个treenode,便于后续子节点直接可以增加在父节点上
            TreeNode[] nodes = new TreeNode[dt1.Rows.Count + 1];
            //遍历每一个节点,然后将其增加到相应的父节点下
            for (int i = 0; i < dt1.Rows.Count; ++i)
            {
                TreeNode tn = new TreeNode();
                //数据库提取的text含有空格,要去除空格
                tn.Text = ((string)dt1.Rows[i]["名稱"]).Trim();
                int pos = (int)dt1.Rows[i]["編號"];
                //先获取父节点的id号
                int parent = (int)dt1.Rows[i]["id"];
                //如果是项目节点,直接在根节点上增加
                if ((int)dt1.Rows[i]["編號"] == 0)
                {

                    treeView1.Nodes.Add(tn);
                }
                //else//其他节点,註銷子節點,主節點是可以正常顯示出來的。
                //{

                //    int number = (int)dt1.Rows[i]["編號"];
                //    //tree.Nodes[0].Nodes[number].Nodes[parent].Nodes.Add(tn);
                //    nodes[parent].Nodes.Add(tn);//在父节点上增加当前节点
                //}

            }
        }

--------------以下是表結構--------------- id 名稱 編號 1 總經理室 0 2 財務室 0 3 行政管理中心 1 4 信息技術部 3
XBodhi. 2019-08-30
  • 打赏
  • 举报
回复
你的代码那,核心的发下我看看。
XBodhi. 2019-08-29
  • 打赏
  • 举报
回复
确保好,父子关系,用树链表就可以了。
独木成林_ 2019-08-29
  • 打赏
  • 举报
回复
引用 1 楼 github_36000833 的回复:
nodes[parent] 可能是null。
是的,我覺得很奇怪,nodes[parent] 把我所有的數據全部查詢出來了,並且給了一個空值。
github_36000833 2019-08-29
  • 打赏
  • 举报
回复
nodes[parent] 可能是null。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧