asp.net2.0中treeview绑定数据库,100分 急!!!!
数据库:
CategoryID ParentID 名称 层次
AE5931B0-BE45-4942-9D04-64A6901015DC4B7C1DF5-D667-4533-AEF5-BA17EFDBD9B0客服00010001000100010013
FC7FEC56-A47B-43BE-854A-DBFF4420190CAE5931B0-BE45-4942-9D04-64A6901015DC客服一部000100010001000100130001
99156740-9756-4846-A43E-B5DC5B0394BBFC7FEC56-A47B-43BE-854A-DBFF4420190C原作0001000100010001001300010001
D1E4E03D-02B9-4B96-B927-BC0BA4B11111FC7FEC56-A47B-43BE-854A-DBFF4420190C退中心0001000100010001001300010002
2D6F0030-8682-4EF9-B0B6-5DC8ACB23DC1FC7FEC56-A47B-43BE-854A-DBFF4420190C案0001000100010001001300010003
F0053403-AA37-49FB-BED9-7340EC74346CFC7FEC56-A47B-43BE-854A-DBFF4420190C修收件0001000100010001001300010004
27CFCCEE-10E3-4684-8C5D-A530F6C92A94FC7FEC56-A47B-43BE-854A-DBFF4420190C修品0001000100010001001300010005
1A3C8766-2FF7-4B98-9F14-29CAF3ED69D4AE5931B0-BE45-4942-9D04-64A6901015DC客服二部000100010001000100130002
76814578-7B84-4599-88CA-C2357AE3A3BD1A3C8766-2FF7-4B98-9F14-29CAF3ED69D4位0001000100010001001300020001
5FC60D8B-E9F4-4625-BA5D-9D5A548466351A3C8766-2FF7-4B98-9F14-29CAF3ED69D4示器0001000100010001001300020002
B91E63D8-B183-4861-B48C-A8038D00EC661A3C8766-2FF7-4B98-9F14-29CAF3ED69D4通0001000100010001001300020003
930221A4-32C3-4FE6-B5CA-D7672A7662671A3C8766-2FF7-4B98-9F14-29CAF3ED69D4光服站0001000100010001001300020004
E4924CE5-D380-49AB-B439-10C5CBCA6D31AE5931B0-BE45-4942-9D04-64A6901015DC客服三部000100010001000100130003
64C8475A-2EDC-4ED7-8347-83D213E5A9D0E4924CE5-D380-49AB-B439-10C5CBCA6D31伺服器0001000100010001001300030001
4E58AF8A-F119-4028-A223-9110FE1AD817E4924CE5-D380-49AB-B439-10C5CBCA6D31路0001000100010001001300030002
824761DE-065F-4C76-8326-A28CE77ADC27E4924CE5-D380-49AB-B439-10C5CBCA6D31系0001000100010001001300030003
727D3FD9-CE7D-43B0-BEAE-614EEA4496E9AE5931B0-BE45-4942-9D04-64A6901015DC客服四部000100010001000100130004
19F4B8E5-8E43-4A5F-981D-68243013F16A727D3FD9-CE7D-43B0-BEAE-614EEA4496E9桃竹客服0001000100010001001300040001
DC8F9AF8-42A1-4820-9B3E-885C2247B223727D3FD9-CE7D-43B0-BEAE-614EEA4496E9修收件0001000100010001001300040002
699493C4-BA3C-47AD-B4EA-0BA7903E33EA727D3FD9-CE7D-43B0-BEAE-614EEA4496E9位0001000100010001001300040003
D7163846-A836-4E9E-A4A5-9D402737AA72727D3FD9-CE7D-43B0-BEAE-614EEA4496E9系整合0001000100010001001300040004
F5C4F2F3-77F4-4327-A8D6-A78000087889AE5931B0-BE45-4942-9D04-64A6901015DC客服五部000100010001000100130005
E582CA2F-B01C-4136-8F91-4E1B7DFC60A5F5C4F2F3-77F4-4327-A8D6-A78000087889台南客服0001000100010001001300050001
D69FAEF8-9CEC-4408-9145-77FB9D866032F5C4F2F3-77F4-4327-A8D6-A78000087889高雄客服0001000100010001001300050002
按照层次在treeview中显示,,注意id 和 parentid都是uniqueidentifier类型
最好是用递归的方法
真的很急啊,谢谢大家了
[解决办法]
private void addNode(string ParentID, TreeNode pNode)
{
DataSet ds = (DataSet)this.ViewState[ "ds "];
DataView dvTree = new DataView(ds.Tables[0]);
dvTree.RowFilter = "ParentID = ' " + ParentID + " ' ";
foreach (DataRowView drv in dvTree)
{
TreeNode node = new TreeNode();
if (pNode == null)
{
node.Text = drv[ "NodeName "].ToString();
this.mytreeview.Nodes.Add(node);
node.Expanded = true;
// node.NavigateUrl = drv[ "URL "].ToString();
// node.Value = drv[ "NodeID "].ToString();
int n = Convert.ToInt32(drv[ "NodeID "].ToString());
node.Value = drv[ "NodeID "].ToString();
this.addNode(drv[ "NodeID "].ToString(), node);
}
else
{
node.Text = drv[ "NodeName "].ToString();
pNode.ChildNodes.Add(node);
node.Expanded = true;
//node.NavigateUrl = drv[ "URL "].ToString();
node.Value = drv[ "NodeID "].ToString();
this.addNode(drv[ "NodeID "].ToString(), node);
}
}
}
不知道行不行
[解决办法]
去数据库的部分,搂主自己改改
--------------------------------------------
private void InitReportMenu()
{
try
{
string strCD= 参数;
DataSet ds = GetDataFromDB(strCD);
if (!ds.Tables[0].Rows.Count.Equals(0))
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
TreeNode menuNode = new TreeNode();
menuNode.Text = ds.Tables[0].Rows[i][ "Name "].ToString();
menuNode.Value = ds.Tables[0].Rows[i][ "Code "].ToString();
TreeView1.Nodes.Add(menuNode);
//二
addchildmenu1(menuNode, menuNode.Value);
}
}
}
catch
{
throw;
}
}
private void addchildmenu1(TreeNode node, string strID)
{
DataSet ds = GetDateFromDB(strID);
if (!ds.Tables[0].Rows.Count.Equals(0))
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
TreeNode menuNode = new TreeNode();
menuNode.Text= ds.Tables[0].Rows[i][ "NAME "].ToString();
menuNode.Value = ds.Tables[0].Rows[i][ "CODE "].ToString();
node.ChildNodes.Add(menuNode);
//下一级
addchildmenu1(menuNode, menuNode.Value);
}
}
}
[解决办法]
做个递归:
C#:
----------------------------
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.NodeBind();//页面加载时解析数据库绑定TreeNode根节点
}
}
#region//数据库连接字符串
public void conString()
{
string conStr = "server=.;uid=sa;pwd=;database=Demo ";
con = new SqlConnection(conStr);
}
#endregion
#region//页面加载时绑定TreeNode根节点
public void NodeBind()
{
this.tvadd.Nodes[0].ChildNodes.Clear();//清空TreeView中所有节点
this.tvadd.Nodes[0].Expanded = true;//设置根节点为展开形式
this.AddChildNode( "NULL ",this.tvadd.Nodes[0]);
}
#endregion
#region//递归解析数据库中节点并绑定在TreeView控件上
/// <summary>
/// 递归解析数据库中节点并绑定在TreeView控件上
/// </summary>
/// <param name= "sqltj "> 要解析库这个节点归属于哪个父节点 </param>
/// <param name= "tn "> 要添加下一级节点的父节点 </param>
public void AddChildNode(string sqltj,TreeNode tn)
{
string sql = "select * from AddNodes where ParentID ";//查询该父节点下还有无子节点SQL语句
if (sqltj == "NULL ")
{
sql += " IS NULL ";//也就是说是根节点下面的第一级子节点
}
else
{
sql += "= " + sqltj;//查询sqltj下有无子节点
}
DataTable dt = this.dtDataBind(sql);
if (dt.Rows.Count == 0)//说明此节点下无子节点
{
return;//退出
}
else
{
for (int i = 0; i < dt.Rows.Count; i++)//循环DataTable表中子节点记录
{
TreeNode tnchild = new TreeNode();//创建新的子节点
tnchild.Text = dt.Rows[i][1].ToString();//为新建子节点的文本赋值
tnchild.Value = dt.Rows[i][1].ToString();//为新建子节点的Value赋值
tnchild.Expanded = true;//设置为不展开节点
tn.ChildNodes.Add(tnchild);//添加此节点的下一级子节点
//递归调用,一直往下直到添加完这一级下面的所有子节点为止,再转到下一个父节点,并添加所有此父节点下面的所有子节点
//i代表DataTable表中循环记录,0代表取得这个记录的ID值,为下面继续检查这个ID下是否还有子目录
//tnchild递归传递给下一次调用此方法,此时如果这个节点下还有子节点,它便成为父节点,对它下面的子节点进行添加
this.AddChildNode(dt.Rows[i][0].ToString(),tnchild);
}
}
}
#endregion
#region//绑—ataTable表
public DataTable dtDataBind(string sql)
{
this.conString();
da = new SqlDataAdapter(sql,con);
dt = new DataTable();
da.Fill(dt);
return dt;
}
#endregion
[解决办法]
LS都那么详细了 !!只好帮你顶个
[解决办法]
发点参考一下吧,应该会有用的
//加载对应一级目录
private void LoadTreeView()
{
DataTable dt_cat = hyscon.selcategory(clist);
TVCategory.Nodes.Clear();
int dtc = dt_cat.Rows.Count;
int cc = dt_cat.Select( "CategoryID= " + cl[0]).Length;
for (int i = 0; i < cl.Length; i++)
{
TreeNode tn = new TreeNode();
tn.SelectAction = TreeNodeSelectAction.Select;
tn.Text = dt_cat.Select( "CategoryID= " + cl[i])[0][ "CategoryName "].ToString();
tn.Value = cl[i];
tn.NavigateUrl = "EditNewsList.aspx?typeid= " + tn.Value;
SetItem(ref tn, ref dt_cat);
this.TVCategory.Nodes.Add(tn);
}
}
//加载子目录
private void SetItem(ref TreeNode tn, ref DataTable dt_cat)
{
DataRow[] drs = dt_cat.Select( "ParentID= " + tn.Value);
foreach (DataRow dr in drs)
{
TreeNode nn = new TreeNode();
nn.SelectAction = TreeNodeSelectAction.Select;
if (dr[ "Free "].ToString() == "Y ")
{
nn.Text = dr[ "CategoryName "].ToString() + " -- Free ";
}
else
{
nn.Text = dr[ "CategoryName "].ToString();
}
nn.Value = dr[ "CategoryID "].ToString();
nn.NavigateUrl = "EditNewsList.aspx?typeid= " + nn.Value;
SetItem(ref nn, ref dt_cat);
tn.ChildNodes.Add(nn);
}
}