问题自己解决。
代码留给后人分享:
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