我前两天发了个帖子,我的数据表是gx表,里面就两列数据,fth(父图号)和zth(子图号),例如
fth zth
中国 浙江
中国 湖北
浙江 杭州
浙江 宁波
杭州 余杭
杭州 萧山
······ web程序中有个textbox1和treeview1,在textbox1中输入父图号值,点button,treeview中就会显示相应内容。例如在textbox1中输入“浙江”,treeview1就会显示“
浙江
杭州
余杭
萧山
宁波
这当然只是个例子,我照高手们的意见写完了下面的代码,但是运行的时候却看不到treeview1,请问下是怎么回事?(visible=true了)
protected void TreeView1_Load(object sender, EventArgs e)
{
TreeView1.Nodes.Clear();
string sqlname = "SELECT fth,zth from gx where fth='HW69090701'";
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnString1"]);
SqlCommand cmd = new SqlCommand(sqlname, cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds,"gx");
DataTable dt = ds.Tables[0]; foreach (DataRow dr in dt.Rows)
{
if (dr["fth"].ToString()=="HW69090701") {
TreeNode newNode = new TreeNode(dr["fth"].ToString());
TreeView1.Nodes.Add(newNode); ChildLoad(dr, newNode, dt);
}
} this.TreeView1.ExpandAll(); }
private void ChildLoad(DataRow dr, TreeNode newNode, DataTable dt)
{
foreach (DataRow row in dt.Rows)
{
if (dr["fth"] == row["zth"])
{
TreeNode childNode = new TreeNode();
childNode.Text = row["zth"].ToString();
//newNode.Nodes.Add(childNode);
newNode.ChildNodes.Add(childNode); ChildLoad(row, childNode, dt); }
}
}
fth zth
中国 浙江
中国 湖北
浙江 杭州
浙江 宁波
杭州 余杭
杭州 萧山
······ web程序中有个textbox1和treeview1,在textbox1中输入父图号值,点button,treeview中就会显示相应内容。例如在textbox1中输入“浙江”,treeview1就会显示“
浙江
杭州
余杭
萧山
宁波
这当然只是个例子,我照高手们的意见写完了下面的代码,但是运行的时候却看不到treeview1,请问下是怎么回事?(visible=true了)
protected void TreeView1_Load(object sender, EventArgs e)
{
TreeView1.Nodes.Clear();
string sqlname = "SELECT fth,zth from gx where fth='HW69090701'";
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnString1"]);
SqlCommand cmd = new SqlCommand(sqlname, cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds,"gx");
DataTable dt = ds.Tables[0]; foreach (DataRow dr in dt.Rows)
{
if (dr["fth"].ToString()=="HW69090701") {
TreeNode newNode = new TreeNode(dr["fth"].ToString());
TreeView1.Nodes.Add(newNode); ChildLoad(dr, newNode, dt);
}
} this.TreeView1.ExpandAll(); }
private void ChildLoad(DataRow dr, TreeNode newNode, DataTable dt)
{
foreach (DataRow row in dt.Rows)
{
if (dr["fth"] == row["zth"])
{
TreeNode childNode = new TreeNode();
childNode.Text = row["zth"].ToString();
//newNode.Nodes.Add(childNode);
newNode.ChildNodes.Add(childNode); ChildLoad(row, childNode, dt); }
}
}
解决方案 »
- 输出excel页面自动关闭,无提示“打开”“保存”“取消”对话框
- 求一个正则表达式!
- 工具箱中选好控件后,如何让它自动隐藏呢?(自动隐藏已经是打勾状态了)
- webservice config 问题 来着有分
- 请问高手们 如何里实现自动记录TextBox输入的内容
- 有人用C#写过屏幕旋转的程序吗
- 能不能提供进存销的数据库的源代码啊??
- c# 中 碰到 “在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级。” 错误,如何解决?求大神解救
- 关于出现ContextSwitchDeadlock异常,高手帮忙
- 哪位老板要免费的.net兼职请in!(上海)up有分了
- 关于分页
- 请问记忆账号密码的功能怎么实现
{ TreeView1.Nodes.Clear(); //先清空树
TreeView1.Visible = true;
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnString1"]);
string sqlname = "SELECT fth,zth from gx where fth='HW69090701'";
SqlCommand cmd = new SqlCommand(sqlname, cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "gx");
DataTable dt = ds.Tables[0];
//循环绑定父节点
foreach (DataRow dr in dt.Rows)
{
//遍历加载父节点
if (dr["fth"].ToString() == "HW69090701")
{
TreeNode newNode = new TreeNode(dr["fth"].ToString());
TreeView1.Nodes.Add(newNode); ChildLoad(dr, newNode, dt);
}
} this.TreeView1.ExpandAll(); } private void ChildLoad(DataRow dr, TreeNode newNode, DataTable dt)
{
foreach (DataRow row in dt.Rows)
{
if (dr["fth"] == row["zth"])
{
TreeNode childNode = new TreeNode();
childNode.Text = row["zth"].ToString();
newNode.ChildNodes.Add(childNode); ChildLoad(row, childNode, dt); //递归子节点
}
}
}
而你的循环中:if (dr["fth"].ToString()=="HW69090701") 这里为何要再次判断呢?你SQL语句不是过滤掉了吗?
而且你的递归代码没看到你加载其子树数据的代码。
举个例子:
你的SQL语句检索出的数据
中国 浙江
中国 广东这里没有浙江的子树数据,而且你递归代码里也没有加载数据,请问你何处得到这个树呢?
楼上的帖子我看了一下。#14楼说的有道理,你应该确保取出的有fth="HW69090701"的数据,如果没有的话第一层的父节点就不存在,下面的递归肯定也取不到。1.查询语句改为"SELECT fth,zth from gx"
2.遍历加载你节点时:
TreeNode newNode = new TreeNode(dr["fth"].ToString()); ==>TreeNode newNode = new TreeNode(dr["zth"].ToString());
3.递归的方法ChildLoad()中:
if (dr["fth"] == row["zth"]) ==>if (dr["zth"] == row["fth"])另外,如果你写在Form_Load里,最好加上ispostback判断
protected void Button1_Click(object sender, EventArgs e)
{
TreeView1.Nodes.Clear(); //先清空树
TreeView1.Visible = true;
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnString1"]);
string sqlname = "SELECT fth,zth from gx";
SqlCommand cmd = new SqlCommand(sqlname, cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "gx");
DataTable dt = ds.Tables[0]; foreach (DataRow dr in dt.Rows)
{
if (dr["fth"].ToString() == "HW69090701")
{
TreeNode newNode = new TreeNode(dr["zth"].ToString());
TreeView1.Nodes.Add(newNode);
ChildLoad(dr, newNode, dt);
}
} this.TreeView1.ExpandAll();
}
private void ChildLoad(DataRow dr, TreeNode newNode, DataTable dt)
{
foreach (DataRow row in dt.Rows)
{
if (dr["zth"] == row["fth"])
{
TreeNode childNode = new TreeNode();
childNode.Text = row["zth"].ToString();
newNode.ChildNodes.Add(childNode);
ChildLoad(row, childNode, dt); //递归子节点
}
}
}
这里都加上.ToString()。上面的代码应该没有问题。
1.你检查下数据库里是否有fth="HW69090701"的数据存在。
2.页面上TreeView1的各级父容器,有没有visible=false或者style="display:none"的。你把aspx页面的代码也贴上来看看吧。
确认了是绑定代码的问题的话,你也先不要绑定,用代码添加一个节点TreeView1.Nodes.Add(new TreeNode("...")),看是否显示。
1)静态的treeview运行时是可以显示的;
2)数据库里有fth='HW69090701'的数据存在;
3)用代码添加一个节点是显示的;
4)if (dr["zth"] == row["fth"]) 改成if (dr["zth"].ToString() == row["fth"].ToString())但运行还是没有结果。帮忙再看下。