我数据库里有一无限父子表
我想把它显示在TREEVIEW里
有没有事例
我想把它显示在TREEVIEW里
有没有事例
解决方案 »
- 如果我在asp.net中产生一个控件,我要加到页面上去,我怎么控制控件的位置,这个要怎么做啊?各位高手帮忙一下
- Server Error in '/' Application.出现这个问题,怎么回事?
- 我的DATAGRID中放了一个CHECKBOX用来标志删除,但是我在选中它之后进行删除
- 无法创建asp.net 应用程序
- GridView的insert按钮在哪?
- 自定义控件显示问题,急!急!急!
- ★★★★★100分+Google\Baidu中没有找到比较好答案的问题(什么是界面类、实体类、记录集类),您将书写历史★★★★★
- 如何让让我的网页asp.net每隔一定时间自动运行一段代码?
- datagrid 如何分页
- 咨询同时连接多个sql服务器的问题
- 什么去除html代码,包括有图像的
- 请问高手:input type="text"控件加上runat="server"后怎么调用(显示)当前日期?
http://www.cnblogs.com/dahuzizyd/archive/2004/08/09/31517.aspx
http://www.cnblogs.com/bonny.wong/archive/2005/01/07/88169.html
可快速绑定到关系表或单表的树
//最好不要一次性读取出来全部数据
//开始读取第一级,当点第一级的时候再绑定下属子级
//绑定treeView
public void GetTreeNode()
{
this.treeView1.Nodes.Clear();
SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
int i = 0;
foreach (ManagementObject disk in searcher.Get())
{
if(disk["DriveType"].ToString() == "3")
{
TreeNode node = new TreeNode();
node.Text = disk["Name"].ToString();
node.Tag = disk["Name"].ToString()+"\\";
node.ImageIndex = 0;
this.treeView1.Nodes.Add(node); //this.InsertTree(treeView1.Nodes[i].Nodes, disk["Name"].ToString()); i ++;
}
}
} /// <summary>
/// 填充treeView节点
/// </summary>
/// <param name="nodes">要填充节点的父节点的子节点集合</param>
/// <param name="dir">父节点所代表的路径</param>
public void InsertTree(TreeNodeCollection nodes, string dir)
{
string[] cats = new string[0];
try { cats = Directory.GetDirectories(dir); }
catch { }
if(cats.Length>0)
{
foreach(string cat in cats)
{
TreeNode node = new TreeNode();
node.Text = cat.Substring(cat.LastIndexOf("\\")+1);
node.Tag = cat+"\\";
node.ImageIndex = 1;
node.SelectedImageIndex = 2;
nodes.Add(node);
nodes[nodes.Count-1].EnsureVisible();
//InsertTree(node.Nodes, cat);
}
}
}
{
if (!this.IsPostBack)
{
this.NodeBind();//页面加载时解析数据库绑定TreeNode根节点
this.DisPanel(true);//显示或不显示
}
} #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//绑定DataTable表
public DataTable dtDataBind(string sql)
{
this.conString();
da = new SqlDataAdapter(sql,con);
dt = new DataTable();
da.Fill(dt);
return dt;
}
#endregion
{ //Hashtable htb = bll.GetInfoDirectoryList(parentId);
DataTable dt = bll.GetInfoDirectoryList(parentId);
foreach (DataRow dr in dt.Rows)
{
TreeNode NewNode = new TreeNode(dr["MenuName"].ToString(), dr["MenuID"].ToString());
NewNode.ShowCheckBox = true; NewNode.SelectAction = TreeNodeSelectAction.Expand;
//NewNode.NavigateUrl = "nodepermission_role.aspx?nodekey=" + de.Key.ToString() + "&RoleId=" + Request.QueryString["RoleId"].ToString();
NewNode.Target = "dd";
tn.ChildNodes.Add(NewNode);
if (dr["ParentID"].ToString() != "52")
{
AddNode(NewNode, dr["MenuID"].ToString());
}
else
{
NewNode.ShowCheckBox = false;
}
}
}