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其實是有值的。
}

}


...全文
198 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。
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境完成了系统仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

111,129

社区成员

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

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

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