Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net treeview上的循环问题_.net_Loops_Treeview - Fatal编程技术网

.net treeview上的循环问题

.net treeview上的循环问题,.net,loops,treeview,.net,Loops,Treeview,这可能非常简单,但我遇到了一个非常奇怪的问题,我编写的用于将菜单项填充到树视图的循环没有显示childnode id。它提取的数据在sql上的格式如下 OptionID OptionText displayOrder parentOptionID optionDeleted 226 test menu 0 0 FALSE 227 test menu

这可能非常简单,但我遇到了一个非常奇怪的问题,我编写的用于将菜单项填充到树视图的循环没有显示childnode id。它提取的数据在sql上的格式如下

OptionID OptionText displayOrder parentOptionID optionDeleted 226 test menu 0 0 FALSE 227 test menu1 0 226 FALSE 228 test menu2 0 227 FALSE 229 test menu 3 0 228 FALSE 230 test 0 229 FALSE 231 test 2 3 228 FALSE 232 test 3 6 229 FALSE OptionID OptionText显示Order parentOptionID optionDeleted 226测试菜单0 0错误 227测试菜单1 0 226错误 228测试菜单2 0 227错误 229测试菜单3 0 228错误 230测试0 229错误 231测试2 3 228错误 232测试36229错误 当try树视图被填充时,它将树中选择节点的parentOptionID输出到一个标签-问题是它没有选择子节点的parentOptionID,在本例中为test、test 2和test。这是我正在使用的代码

 private void populateRootLevelAll(bool ireset)
        {
            // Locals

            Functionality func = new Functionality();
            SqlConnection supportDB = null;
            DataTable t = new DataTable();
            bool opDeleted = false;

            string spName = "gssp_TechCallTrackerOptionsSelectAllWithDelete";

            try
            {
                using (supportDB = new SqlConnection(getConnectionString(ConnectionType.GriffinSupportDB)))
                {
                    using (SqlCommand getCallTrackerOptions = new SqlCommand(spName, supportDB))
                    {
                        // Now set up the rest of the command object
                        getCallTrackerOptions.CommandType = CommandType.StoredProcedure;


                        // Populate the parameters.
                        getCallTrackerOptions.Parameters.Clear();
                        getCallTrackerOptions.Parameters.Add(func.CreateParameter("@optionDeleted", SqlDbType.Bit, ParameterDirection.Input, opDeleted));
                        getCallTrackerOptions.Parameters.Add(func.CreateParameter("@spErrorID", SqlDbType.Int, ParameterDirection.Output, DBNull.Value));

                        // Set up the dataset
                        supportDB.Open();
                        SqlDataAdapter da = new SqlDataAdapter(getCallTrackerOptions);
                        da.Fill(t);
                        supportDB.Close();

                        // Build TreeList Nodes.
                        foreach (DataRow r in t.Rows)
                        {
                            // add top level rows and then add their child rows on each itteration.
                            if (r["parentOptionID"].ToString() == "0")
                            {
                                TreeNode masterNode = new TreeNode(r["optionText"].ToString());
                                if (GetChildNodes(r["OptionID"].ToString(), t) != null)
                                {

                                    List<TreeNode> childNodeList = GetChildNodes(r["OptionID"].ToString(), t);
                                    masterNode.Nodes.AddRange(childNodeList.ToArray());

                                }


                                masterNode.Tag = "0";
                                masterNode.Name = r["OptionID"].ToString();
                                TVCTOptions.Nodes.Add(masterNode);

                            }
                        }

                    }
                }
            }

            catch (Exception e)
            {
                throw e;
            }
        }

        static List<TreeNode> GetChildNodes(string parentOptionID, DataTable t)
        {

            List<TreeNode> nodeList = new List<TreeNode>();
            foreach (DataRow r in t.Rows)
            {
                if (r["parentOptionID"].ToString() == parentOptionID)
                {
                    // create child
                    TreeNode node = new TreeNode(r["optionText"].ToString());
                    node.Tag = parentOptionID.ToString();

                    // check if this child has children.
                    if (GetChildNodes(r["OptionID"].ToString(), t) != null)
                    {
                        node.Nodes.AddRange(GetChildNodes(r["OptionID"].ToString(), t).ToArray());
                        node.Name = (r["OptionID"].ToString());

                    }
                    else
                    {
                        node.Tag = parentOptionID.ToString();
                    }

                    nodeList.Add(node);
                }
            }

            if (nodeList.Count != 0)
                return nodeList;

            else
                return null;    // returns null when no children were found.
        }
private void populateRootLevelAll(bool-ireset)
{
//当地人
功能func=新功能();
SqlConnection-supportDB=null;
DataTable t=新的DataTable();
bool opDeleted=false;
string spName=“gssp\U TechCallTrackerOptions SelectAllWithDelete”;
尝试
{
使用(supportDB=newSQLConnection(getConnectionString(ConnectionType.GriffinSupportDB)))
{
使用(SqlCommand getCallTrackerOptions=newsqlcommand(spName,supportDB))
{
//现在设置命令对象的其余部分
getCallTrackerOptions.CommandType=CommandType.StoredProcess;
//填充参数。
getCallTrackerOptions.Parameters.Clear();
getCallTrackerOptions.Parameters.Add(funct.CreateParameter(“@optionDeleted”,SqlDbType.Bit,ParameterDirection.Input,opDeleted));
getCallTrackerOptions.Parameters.Add(func.CreateParameter(“@spErrorID”,SqlDbType.Int,ParameterDirection.Output,DBNull.Value));
//设置数据集
supportDB.Open();
SqlDataAdapter da=新的SqlDataAdapter(getCallTrackerOptions);
da.填充(t);
supportDB.Close();
//构建树列表节点。
foreach(t.Rows中的数据行r)
{
//添加顶级行,然后在每个行上添加其子行。
if(r[“parentOptionID”].ToString()=“0”)
{
TreeNode masterNode=新的TreeNode(r[“optionText”].ToString());
if(GetChildNodes(r[“OptionID”].ToString(),t)!=null)
{
List childNodeList=GetChildNodes(r[“OptionID”].ToString(),t);
masterNode.Nodes.AddRange(childNodeList.ToArray());
}
masterNode.Tag=“0”;
masterNode.Name=r[“OptionID”].ToString();
tvcOptions.Nodes.Add(主节点);
}
}
}
}
}
捕获(例外e)
{
投掷e;
}
}
静态列表GetChildNodes(字符串parentOptionID,数据表t)
{
列表节点列表=新列表();
foreach(t.Rows中的数据行r)
{
if(r[“parentOptionID”].ToString()==parentOptionID)
{
//创建子对象
TreeNode=newTreeNode(r[“optionText”].ToString());
node.Tag=parentOptionID.ToString();
//检查此孩子是否有孩子。
if(GetChildNodes(r[“OptionID”].ToString(),t)!=null)
{
node.Nodes.AddRange(GetChildNodes(r[“OptionID”].ToString(),t.ToArray());
node.Name=(r[“OptionID”].ToString());
}
其他的
{
node.Tag=parentOptionID.ToString();
}
nodeList.Add(节点);
}
}
if(nodeList.Count!=0)
返回节点列表;
其他的
return null;//未找到子项时返回null。
}

谢谢你把它解决了。我需要返回节点列表;在其他人之后

static List<TreeNode> GetChildNodes(string parentOptionID, DataTable t) 
        { 

            List<TreeNode> nodeList = new List<TreeNode>(); 
            foreach (DataRow r in t.Rows) 
            { 
                if (r["parentOptionID"].ToString() == parentOptionID) 
                { 
                    // create child 
                    TreeNode node = new TreeNode(r["optionText"].ToString()); 
                    node.Tag = parentOptionID.ToString(); 

                    // check if this child has children. 
                    if (GetChildNodes(r["OptionID"].ToString(), t) != null) 
                    { 
                        node.Nodes.AddRange(GetChildNodes(r["OptionID"].ToString(), t).ToArray()); 
                        node.Name = (r["OptionID"].ToString()); 

                    } 
                    else 
                    { 
                        node.Tag = parentOptionID.ToString(); 
                    } 

                    nodeList.Add(node); 
                } 
            } 

            if (nodeList.Count != 0) 
                return nodeList; 

            else 
                return nodeList; 
        } 
静态列表GetChildNodes(字符串parentOptionID,数据表t)
{ 
列表节点列表=新列表();
foreach(t.Rows中的数据行r)
{ 
if(r[“parentOptionID”].ToString()==parentOptionID)
{ 
//创建子对象
TreeNode=newTreeNode(r[“optionText”].ToString());
node.Tag=parentOptionID.ToString();
//检查此孩子是否有孩子。
if(GetChildNodes(r[“OptionID”].ToString(),t)!=null)
{ 
node.Nodes.AddRange(GetChildNodes(r[“OptionID”].ToString(),t.ToArray());
node.Name=(r[“OptionID”].ToString());
} 
其他的
{ 
node.Tag=parentOptionID.ToString();
} 
nodeList.Add(节点);
} 
} 
if(nodeList.Count!=0)