哈喽,手机边亲爱的你还好吗?大家新快乐!
今天,我接着给大家分享一下treeview。这次我们要慢慢的加大难度了,之前树上显示的数据都是提前录入好的,显然是不够合理,那接下去我们就要给树做个新增节点的功能,好的,废话不多说,我们直接上干货。
01、建窗体
这次我们就不需要新建的表的,还是沿用之前的那张表,如果你是刚关注我的用户,点击这个地址就行了:
这次,我们需要在原来的窗体上添加一个新增按钮,用于打开新增窗体,如下图,按钮的名称为:btnAdd
接下去我们需要添加一个新的窗体,窗体名称保存为:frmAdd。在新增窗体上添加几个控件,一个组合框,一个文本框,两个按钮,如下图
组合框的名称:ProductParentID,行来源为:SELECT tblProduct.ProductID, tblProduct.ProductName FROM tblProduct;
文件框名称为:ProductName
保存按钮的名称:btnSave
取消按钮的名称:btnClose
02、添加代码
首先,我们先添加打开新增窗体的代码
Private Sub btnAdd_Click()
DoCmd.OpenForm "frmAdd", acNormal
End Sub
接下去就是新增窗体上的代码,一个是保存按钮的代码,一个是取消按钮的代码,代码不复杂,就是在正常的新增时,自动生成相应的编号,代码什么意思,具体的我们在视频中讲解。
'取消按钮
Private Sub btnClose_Click()
DoCmd.Close acForm, Me.Name
End Sub
'保存按钮
Private Sub btnSave_Click()
'判断不能为空
If IsNull(Me.ProductName) Then
MsgBox "产品名称不能为空。", vbExclamation
Me.ProductName.SetFocus
Exit Sub
End If
Dim rst As Object ' DAO.Recordset
Dim strProductID As String
Dim strWhere As String
'判断上级键值是否为空
If Not IsNull(Me.ProductParentID) Then
strWhere = "ProductParentID='" & Me.ProductParentID & "'"
Else
strWhere = "ProductParentID is null"
End If
'取到上级键值的最大值
strProductID = Nz(DMax("ProductID", "tblProduct", strWhere), "")
'生成编号
strProductID = Me!ProductParentID & Format(Val(Right(strProductID, 4)) + 1, "0000")
' Debug.Print strProductID
Set rst = CurrentDb.OpenRecordset("tblProduct", 2) '打开记录集
rst.AddNew
rst!ProductParentID = Me!ProductParentID
rst!ProductName = Me!ProductName
rst!ProductID = strProductID
rst.Update
MsgBox "保存成功。", vbInformation
Form_frmTreeView.Form_Load '树重新加载一下
Me.ProductName = Null
Me.ProductParentID = Null
Me.ProductParentID.RowSource = Me.ProductParentID.RowSource '刷新
rst.Close
Set rst = Nothing
End Sub
最后还一步,非常关键的操作,就是把树控件加载事件的Private 改成Public,如果未修改,则刷新会报错。
03、运行测试
最后,就是运行测试了。
END