treeView实现了无限分类,节点链接问题?
我做了一个treeView的无限分类,节点链接想实现的效果是点击一个节点,查询出此节点下的所有子节点下的产品,包括子节点下的子节点,比如我点击“数码品牌”,查出来的各式各样的手机产品和电脑产品,请问怎么实现???我目前做的链接只能查出节点下的子节点,比如点击“数码品牌”,只能查出“手机”和“电脑”,不能查出“诺基亚”产品和“三星”产品等界面基本效果如下:
数码品牌
手机
诺基亚
三星
电脑
显示器
机箱
生活用品
数据库只有一个表tree,4个字段分别为:id,Powername,ParentId,Layer
cs代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.AddTreeNodes();//添加树节点
this.MenuNodes();//添加菜单节点
}
}
private void AddTreeNodes()
{//添加树节点
DataView dv = drv("select * from tree where ParentId=0");
foreach (DataRowView datav in dv)
{
TreeNode tn = new TreeNode();
tn.Text = datav["PowerName"].ToString();
tn.Value = datav["id"].ToString();
tn.Expanded = false;
TreeView1.Nodes.Add(tn);
AddchildNodes(tn);
if (tn.ChildNodes.Count == 0)//判断是否有子节点
{
tn.NavigateUrl = "product.aspx?id=" + tn.Value;
}
}
}
private DataView drv(string sques)
{
SqlConnection con = new SqlConnection("server=.;database=login;uid=sa;pwd=;");
con.Open();
SqlDataAdapter sdr = new SqlDataAdapter();
sdr.SelectCommand = new SqlCommand(sques,con);
DataSet ds = new DataSet();
sdr.Fill(ds,"tree");
return ds.Tables["tree"].DefaultView;
}
private void AddchildNodes(TreeNode tn)
{//添加树子节点
int bid = Convert.ToInt32(tn.Value);
DataView dv = drv("select * from tree where ParentId=" + bid + "");
foreach (DataRowView datav in dv)
{
TreeNode ctn = new TreeNode();
ctn.Text = datav["PowerName"].ToString();
ctn.Value = datav["id"].ToString();
int ParentID = Convert.ToInt32(datav["ParentId"]);
ctn.Expanded = false;
tn.ChildNodes.Add(ctn);
AddchildNodes(ctn);
if (ctn.ChildNodes.Count == 0)//判断是否有子节点
{
ctn.NavigateUrl = "product.aspx?id=" + ctn.Value;
}
}
} --------------------编程问答-------------------- 在 TreeNodeExpanded 事件中写上
protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
{
TreeView1.SelectedNode.ExpandAll();
}
就可以了。
当然,前提是你有选中的NODE。 --------------------编程问答-------------------- http://www.cnblogs.com/time-is-life/articles/329691.html --------------------编程问答-------------------- mark --------------------编程问答-------------------- 大家没有看明白我的意思,不是展开子节点,我要实现的是从数据库中查询,也就是说查询条件怎么写? --------------------编程问答-------------------- 我有一段代码 可能对你有帮助
void PopulateCategories(TreeNode node)
{
DataSet ds = new DataSet();
string m_connectionStr = ConfigurationManager.ConnectionStrings["ehPublicConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(m_connectionStr);
conn.Open();
SqlCommand comm = new SqlCommand("select Id,ProvinceName from Provinces", conn);
comm.CommandType = CommandType.Text;
SqlDataAdapter sda = new SqlDataAdapter(comm);
sda.Fill(ds);
conn.Close();
if (ds.Tables.Count > 0)
{
foreach (DataRow row in ds.Tables[0].Rows)
{
TreeNode NewNode = new TreeNode(row["ProvinceName"].ToString(), row["Id"].ToString());
NewNode.PopulateOnDemand = true;
NewNode.Collapse();
NewNode.SelectAction = TreeNodeSelectAction.Expand;
node.ChildNodes.Add(NewNode);
}
}
}
void PopulateProducts(TreeNode node)
{
DataSet ds = new DataSet();
string m_connectionStr = ConfigurationManager.ConnectionStrings["ehPublicConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(m_connectionStr);
conn.Open();
SqlCommand comm = new SqlCommand("select CityName from Citys where ProvinceId=@Id", conn);
comm.CommandType = CommandType.Text;
comm.Parameters.Add("@id", SqlDbType.Int).Value = node.Value;
SqlDataAdapter sda = new SqlDataAdapter(comm);
sda.Fill(ds);
conn.Close();
if (ds.Tables.Count > 0)
{
foreach (DataRow row in ds.Tables[0].Rows)
{
TreeNode NewNode = new TreeNode(row["CityName"].ToString());
NewNode.PopulateOnDemand = false;
NewNode.NavigateUrl = row["CityName"].ToString();
node.ChildNodes.Add(NewNode);
}
}
}
protected void TreeView1_TreeNodePopulate1(object sender, TreeNodeEventArgs e)
{
if (e.Node.ChildNodes.Count == 0)
{
switch (e.Node.Depth)
{
case 0:
PopulateCategories(e.Node);
break;
case 1:
PopulateProducts(e.Node);
break;
}
}
}
--------------------编程问答-------------------- 楼上可以留下你的联系方式吗?
有几个问题还要请教 --------------------编程问答-------------------- 楼上的代码我也看过了,链接还是不能达到要求 --------------------编程问答-------------------- up
补充:.NET技术 , ASP.NET