谁有treeview的实例,结点是从sql server 中读出的?
解决方案 »
- ASP.net MVC2 多表单或多模型提交
- 未能映射路径
- 【有外键的话,类应该怎么设计】
- 对吗?Respnose.Write("<a href='aaa.aspx?id="+strid+"' target=_self>");在线
- 救急:在服务器端生成excel文件出错......
- 问一个关于XML打开的问题.
- 求.net学习方法或学习书籍
- 如何让自己发的邮件不被当作垃圾邮件?
- Response.redirect小问题
- 现在的ASP.NET是1.0吗?有关介绍哪里有啊。谢谢
- 服务器权限配置问题!急~~~~~~~~~~~
- 大家实际编成的时候真的在大量使用RangeValidator等一系列的验证控件么。还是自己用脚本来验证
id nodename parentid
1 a 0
2 a_1 1
private void Page_Load(object sender, System.EventArgs e)
{
CreateTreeDataSet();
InitTree(tvMenu.Nodes,"0");
}
//树形目录
private DataSet CreateTreeDataSet()
{
string cmdSelect="select * from categories";
myCmd=new SqlDataAdapter(cmdSelect,publicDB.strConn);
treeds=new DataSet();
myCmd.Fill(treeds,"tree");
return treeds;
}
//生成树
private void InitTree(TreeNodeCollection Nds,string parentId)
{
DataView dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=treeds.Tables["tree"];
dv.RowFilter="ParentId="+parentId+"";
foreach(DataRowView drv in dv)
{
tmpNd=new TreeNode();
tmpNd.ID=drv["NodeId"].ToString();
tmpNd.Text=drv["NodeName"].ToString();
//tmpNd.ImageUrl="images/"+drv["Icon"].ToString();
tmpNd.Target="right";
tmpNd.NavigateUrl=drv["Address"].ToString()+drv.Row["NodeID"].ToString();
Nds.Add(tmpNd);
intId=drv["ParentId"].ToString();
InitTree(tmpNd.Nodes,tmpNd.ID);
}
}
private void Page_Load(object sender, System.EventArgs e)
{
Microsoft.Web.UI.WebControls.TreeNode rootnode = new Microsoft.Web.UI.WebControls.TreeNode();
rootnode.Expanded = true;
TreeView1.Nodes.Add(rootnode);
CreateTree(0, rootnode);
}private void CreateTree(int belong, Microsoft.Web.UI.WebControls.TreeNode rootnode)
{
SqlConnection connection = new SqlConnection("server=localhost;uid=sa;pwd=;database=Sutra");
string strSql="select * from test where belong="+@belong+"and Visible=1";
SqlCommand cmd=new SqlCommand(strSql,connection);
cmd.CommandTimeout = 30;
SqlDataAdapter custDA = new SqlDataAdapter();
custDA.SelectCommand = cmd;
connection.Open();
DataSet ds = new DataSet();
custDA.Fill(ds,"test");
foreach(DataRow dr in ds.Tables[0].Rows)
{
Microsoft.Web.UI.WebControls.TreeNode treenode = new Microsoft.Web.UI.WebControls.TreeNode();
treenode.Text = dr["text"].ToString().Trim();
treenode.CheckBox = true;
treenode.Expanded = true;
rootnode.Nodes.Add(treenode);
int id = int.Parse(dr["id"].ToString().Trim()); CreateTree(id, treenode);
}
ds.Clear();
connection.Close();
}
Populate a TreeView from a SELF-JOINED table
http://www.codeproject.com/cs/database/2dtreeview.asp
其中Parent表示父亲节点,如果是0,则表示跟节点.如果某个记录的Parent等于另一个记录的ID则表示这个记录是另一个记录的子节点,要将他们按照父子节点关系填充到treeview控件.我的代码是这样的:
Public Sub intiTree(ByRef Nds As TreeNodeCollection, ByVal ID As Integer)
Dim dv As New DataView
Dim drv As DataRowView
Dim tmpNd As TreeNode
Dim intId As Integer
dv.Table = ds.Tables("tree")
dv.RowFilter = "ParentID='" & ID & "'"
For Each drv In dv
tmpNd = New TreeNode
tmpNd.ID = CStr(drv("DpNo"))
tmpNd.Text = CStr(drv("Name"))
Nds.Add(tmpNd)
intId = CInt(tmpNd.ID)
intiTree(Nds(Nds.Count - 1).Nodes, intId)
Next
End Sub
Public Sub CreateDataSet(ByVal ds As DataSet) '建立门位置数据集
If conn.State = ConnectionState.Closed Then conn.Open()
Dim myDataAdapter As New SqlDataAdapter("select * from MJCfgDoorPos", conn)
myDataAdapter.Fill(ds, "tree")
myDataAdapter.Dispose()
conn.Close()
End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
CreateDataSet(ds)
intiTree(tvDoorPos.Nodes, 0)
End If
End Sub
这种递归方法虽然有速度问题,但是有时候很有用。很适合处理这样的问题。
很多人有着的例子,都缺句,我这个是经过调试源码,一定可以的