treeview动态增删的例子

qq5181688 2010-08-07 05:41:47
vb.net中.....的treeview如何绑定数据库动态显示。。。并且能动态增删节点并写回数据库........本人使用...VS2008+access数据库。。。。
注:是在WEB下面。
...全文
160 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq5181688 2010-09-09
  • 打赏
  • 举报
回复
问题自己解决。
代码留给后人分享:
Private bodyUrl As String = ""
'页面转向,页面变量能在页面内保留,类似ViewState
Private tblClassInfo As New DataTable()
'储存读入的数据
'Private classes As New Classes()

Private Sub Bind()
Dim rootStr As String = "物品信息"
Dim rootNode As New TreeNode(rootStr)
rootNode.Value = "-1"
'rootNode.Target = "bodyFrame"
'rootNode.NavigateUrl = "body.aspx"
PopulateTreeView(0, rootNode)
Me.mytree.Nodes.Add(rootNode)
End Sub

Private Sub PopulateTreeView(ByVal parentId As Integer, ByVal parentNode As TreeNode)
Dim dv As DataView = wp_class.GetClass("parentId=" + parentId.ToString()).DefaultView
For Each drv As DataRowView In dv
Dim myNode As New TreeNode(drv("className").ToString())
myNode.Expanded = False
myNode.Value = drv("classId").ToString()
'myNode.Target = "bodyFrame"
'myNode.NavigateUrl = "body.aspx?classId=" + drv("classId").ToString()
parentNode.ChildNodes.Add(myNode)
PopulateTreeView(Convert.ToInt32(drv("classId").ToString()), myNode)
Next
End Sub

' <summary>
' 取得页面跳转地址
' </summary>
' <returns></returns>
Public Function GetBodyUrl() As String
Return bodyUrl
End Function
' <summary>
' 增加同级
' </summary>
' <param name="sender"></param>
' <param name="e"></param>

Protected Sub cmd_tj_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmd_tj.Click
If mytree.SelectedNode IsNot Nothing Then
lblTitle.Text = "增加同级项"
tree_sj = 1
cmd_save.Enabled = True
txtName.Focus()
Else
Page.ClientScript.RegisterStartupScript(Me.[GetType](), "show", "alert('请选择类别!');;", True)
End If

End Sub
' <summary>
' 增加子级
' </summary>
' <param name="sender"></param>
' <param name="e"></param>
Protected Sub cmd_next_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmd_next.Click
If mytree.SelectedNode IsNot Nothing Then
lblTitle.Text = "增加子级项"
tree_sj = 2
cmd_save.Enabled = True
txtName.Focus()
Else
Page.ClientScript.RegisterStartupScript(Me.[GetType](), "show", "alert('请选择类别!');;", True)
End If
End Sub
'编辑
Protected Sub cmd_edit_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmd_edit.Click
If mytree.SelectedValue IsNot Nothing Then
tree_sj = 3
Dim dt As DataTable = wp_class.GetByClassId(Convert.ToInt32((mytree.SelectedValue).ToString()))
lblTitle.Text = "编辑"
txtName.Text = dt.Rows(0)("className").ToString()
txtdescr.Text = dt.Rows(0)("classDescrip").ToString()
cmd_save.Enabled = True
txtName.Focus()
'btAdd.Text = "修改"
End If
End Sub
' <summary>
' 删除
' </summary>
' <param name="sender"></param>
' <param name="e"></param>
Protected Sub cmd_delete_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmd_delete.Click
If mytree.SelectedNode IsNot Nothing Then
If mytree.SelectedNode.Value = "-1" Then
Page.ClientScript.RegisterStartupScript(Me.[GetType](), "show", "alert('根结点不能删除');", True)
Return
End If
If Not wp_class.HasChild(Convert.ToInt32(mytree.SelectedValue)) Then
'先把同级重新排序
Dim dt As DataTable = wp_class.GetByClassId(Convert.ToInt32(mytree.SelectedValue))
wp_class.UpdateSort(Convert.ToInt32(dt.Rows(0)("sortId").ToString()), Convert.ToInt32(dt.Rows(0)("parentId").ToString()))
wp_class.UpdateChildNum(Convert.ToInt32(dt.Rows(0)("parentId").ToString()), False)
'再删除
wp_class.DeleteClass(Convert.ToInt32(mytree.SelectedValue))
Response.Redirect("tree.aspx")
Else
Page.ClientScript.RegisterStartupScript(Me.[GetType](), "show", "alert('请先删除子级!');;", True)
End If
Else
Page.ClientScript.RegisterStartupScript(Me.[GetType](), "show", "alert('请选择类别!');;", True)
End If
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Bind()
cmd_delete.Enabled = False
cmd_edit.Enabled = False
cmd_save.Enabled = False
cmd_tj.Enabled = False
cmd_delete.Attributes.Add("onclick", userdelete)
cmd_up.Visible = False
cmd_down.Visible = False
End If
End Sub

Protected Sub mytree_SelectedNodeChanged(ByVal sender As Object, ByVal e As EventArgs) Handles mytree.SelectedNodeChanged
If mytree.SelectedValue = "-1" Then
cmd_delete.Enabled = False
cmd_edit.Enabled = False
cmd_save.Enabled = False
cmd_tj.Enabled = False
Else
cmd_tj.Enabled = True
cmd_delete.Enabled = True
cmd_edit.Enabled = True
cmd_next.Enabled = True
End If
lblTitle.Text = mytree.SelectedNode.Text
End Sub

'*****************************************************************

'Private Sub add_Bind()
' If Request.QueryString("type") IsNot Nothing Then
' MsgBox("增加同级")
' '说明是增加操作
' If Request.QueryString("type") = "add" Then
' lblTitle.Text = "增加同级项"
' Else
' lblTitle.Text = "增加子级项"
' End If
' Else
' MsgBox("编辑")

' If mytree.SelectedValue IsNot Nothing Then
' MsgBox("修改")
' Dim dt As DataTable = wp_class.GetByClassId(Convert.ToInt32((mytree.SelectedValue).ToString()))
' lblTitle.Text = "编辑"
' txtName.Text = dt.Rows(0)("className").ToString()
' txtdescr.Text = dt.Rows(0)("classDescrip").ToString()
' 'btAdd.Text = "修改"
' End If
' End If
'End Sub
'Protected Sub btAdd_Click(ByVal sender As Object, ByVal e As EventArgs)
' Try
' Add()
' Catch ex As Exception
' Page.ClientScript.RegisterStartupScript(Me.[GetType](), "show", "alert('" + ex.ToString() & "');", True)
' End Try
'End Sub
Private Sub Add()
If mytree.SelectedValue IsNot Nothing Then
If tree_sj = 1 Then
'增加同级
Dim dt As DataTable = wp_class.GetParent(Convert.ToInt32((mytree.SelectedValue).ToString()))
If dt.Rows.Count > 0 Then
'如果不是顶级tr
'父级
'最大排序号
wp_class.AddClass(txtName.Text.Trim(), txtdescr.Text, Convert.ToInt32(dt.Rows(0)("classId").ToString()), Convert.ToInt32(dt.Rows(0)("childNum").ToString()), Convert.ToInt32(dt.Rows(0)("depth").ToString()) + 1)
Else
'增加顶级
Dim maxId As String = wp_class.GetMaxSortId(0)
If maxId = "-1" Then
maxId = "0"
End If
wp_class.AddClass(txtName.Text.Trim(), txtdescr.Text, 0, Convert.ToInt32(maxId) + 1, 0)
End If
ElseIf tree_sj = 2 Then
'增加子级
If mytree.SelectedValue <> "-1" Then
Dim dt As DataTable = wp_class.GetByClassId(Convert.ToInt32((mytree.SelectedValue).ToString()))
If dt.Rows.Count > 0 Then
'父级
'最大排序号,是父级孩子数量
wp_class.AddClass(txtName.Text.Trim(), txtdescr.Text, Convert.ToInt32(dt.Rows(0)("classId").ToString()), Convert.ToInt32(dt.Rows(0)("childNum").ToString()), Convert.ToInt32(dt.Rows(0)("depth").ToString()) + 1)
wp_class.UpdateChildNum(Convert.ToInt32((mytree.SelectedValue).ToString()), True)
End If
Else
'增加第一个结点,或者增加最顶级结点。
'找到顶级最大排序号,加一。
wp_class.AddClass(txtName.Text.Trim(), txtdescr.Text, 0, 1, 0)
End If
End If
ElseIf tree_sj = 3 Then
If mytree.SelectedValue IsNot Nothing Then
'修改
wp_class.UpdateClass(txtName.Text.Trim(), txtdescr.Text, Convert.ToInt32((mytree.SelectedValue).ToString()))
End If
End If
'刷新类别树
mytree.Nodes.Clear()
'Response.Redirect("tree.aspx")
Call Bind()
'ltlJs.Text = "window.parent.location.reload();"
'.leftFrame
End Sub

Protected Sub cmd_save_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmd_save.Click
Try
Add()
Catch ex As Exception
Page.ClientScript.RegisterStartupScript(Me.[GetType](), "show", "alert('" + ex.ToString() & "');", True)
End Try
End Sub
hbhdlzq 2010-08-09
  • 打赏
  • 举报
回复
http://demos.devexpress.com/ASPxTreeListDemos/Editing/Modes.aspx

不用写代码就行。
whxxr 2010-08-09
  • 打赏
  • 举报
回复
删除节点, 本人试过好用.

if (目录节点== "0")
{
TreeView1.Nodes.Remove(TreeView1.SelectedNode);
}
else
{
TreeView1.SelectedNode.Parent.ChildNodes.RemoveAt(TreeView1.SelectedNode.Parent.ChildNodes.IndexOf(TreeView1.SelectedNode));
}
wwfgu00ing 2010-08-09
  • 打赏
  • 举报
回复
qq5181688 2010-08-09
  • 打赏
  • 举报
回复
没有人回答哦!难道没有人用过VB。NET做过
cjh200102 2010-08-08
  • 打赏
  • 举报
回复
跟进学习
qq5181688 2010-08-07
  • 打赏
  • 举报
回复
嘿嘿,要是会改,我就自己做出来了咧。
哈哈。。
脾气不坏 2010-08-07
  • 打赏
  • 举报
回复
那就自己改吧
反正也不算困难。。。。
qq5181688 2010-08-07
  • 打赏
  • 举报
回复
上面是C#的哟,我用的是VB.net咧。代码我用软件转换了。有些转换不过来。
SK_Aqi 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wuyq11 的回复:]
http://topic.csdn.net/u/20100802/16/031c7556-401a-4178-b078-13f17694574a.html?79164
[/Quote]
up
qq5181688 2010-08-07
  • 打赏
  • 举报
回复
晕了的,我要详细的代码,不是说个这个就完了....显示的代码我都有.重要的是如何增删.回写数据库.
happy664618843 2010-08-07
  • 打赏
  • 举报
回复
foreach()
qq5181688 2010-08-07
  • 打赏
  • 举报
回复
网上找好多,根本没有实用的例子。
onlylikews 2010-08-07
  • 打赏
  • 举报
回复
经典的递归问题。

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧