public class neth()
{
DataResultSet rs = new DataResultSet();
string sql = "";
ModPub.gDataOper.GetRs(sql, ref rs);
DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn("LISTNAME", typeof(string));
dt.Columns.Add(dc1);
for (int i = 0; i < rs.RowCount; i++)
{
DataRow dtRow = dt.NewRow();
dtRow["LISTNAME"] = rs[i, "LISTNAME"].ToString();
dt.Rows.Add(dtRow);
}
for (int i = 0; i < dt.Rows.Count; i++)
{
fjd = rs[i, "LISTNAME"].ToString();
TreeNode tree = new TreeNode();
tree.Name = dt.Rows[i]["LISTNAME"].ToString();
tree.Text = dt.Rows[i]["LISTNAME"].ToString();
childtree(tree);
treeView1.Nodes.Add(tree);
}
List<string> nodeList = new List<string>();
foreach (TreeNode tree in treeView1.Nodes)
{
if (nodeList.Contains(tree.Text))
{
treeView1.Nodes.Remove(tree);
}
else
{
nodeList.Add(tree.Text);
}
}
//现在就是List集合中有两条往上一模一样的数据,用tree来传值,第一次正常添加到treeview中,第二次因为已经有一样的数据所以不添加,再执行第三次或者更多的话tree就会传null,然后就无法走下去,并且还会添加到treeview中
}
public void childtree(TreeNode node)
{
DataResultSet rs = new DataResultSet();
string sql = $"";
ModPub.gDataOper.GetRs(sql, ref rs);
for (int i = 0; i < rs.RowCount; i++)
{
TreeNode treeNode = new TreeNode();
treeNode.Name = rs[i, "UPID"].ToString();
treeNode.Text = rs[i, "UPID"].ToString();
node.Nodes.Add(treeNode);
}
}
数据就好比如陕西,西安;陕西,咸阳;陕西,渭南;三条数据,foreach里tree传的是陕西,第一次循环判断正常添加treeview中,第二次因为已经有陕西所以不添加陕西,会把咸阳传到子节点,第三次或者多次tree传的null,在if条件会报错对象未实例化,然后结束程序,再次启动程序会再次添加一个陕西的节点,并且两个陕西的节点都会有3个子节点
你为什么判断如果里面已经有了就删掉
有了就不用管了呀,没有就添加
这种应用按理说应该写个递归的,你这样写死了那数据就只能是2层