使用递归从数据库读取数据来动态创建菜单
发表时间:2024-02-15 来源:明辉站整理相关软件相关文章人气:
[摘要]表结构与内容 MenBh MenText Bhparent 0001 文件 0002 编辑 0005 打开 0001 0006 ...
表结构与内容 MenBh MenText Bhparent
0001 文件
0002 编辑
0005 打开 0001
0006 新建 0001
0011 access数据库 0006
0012 VFP的Dbf 0006
0013 剪切 0002
0014 复制 0002
0015 完全复制 0014
Private m As New MainMenu()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim conn As New SqlConnection("server=localhost;uid=sa;pwd=;database=jiang")
Dim cmd As New SqlCommand("select * from a_menu ", conn)
Dim ds As New DataSet()
Dim sqldpr As New SqlDataAdapter(cmd)
sqldpr.Fill(ds, "menu")
Me.DataGrid1.DataSource = ds.Tables("menu")
'创建关系
Dim dr As New DataRelation("self_menu", ds.Tables("menu").Columns("MenBh"), ds.Tables("menu").Columns("Bhparent"))
ds.Relations.Add(dr)
Dim r1 As DataRow
'查找最高的菜单级别,也就是Bhparent列为空的行
For Each r1 In ds.Tables("menu").Rows
If r1.IsNull("Bhparent") Then
addmenuitem(r1, Nothing)
End If
Next
Me.Menu = m '指定主窗体菜单
End Sub
'递归函数
Private Sub addmenuitem(ByVal r As DataRow, ByVal item As MenuItem)
Dim mi As MenuItem
'如果是最外层菜单,要直接添加
If item Is Nothing Then
mi = m.MenuItems.Add(r.Item("MenText"))
Else '如果是下级菜单要在菜单项的上级添加
mi = item.MenuItems.Add(r.Item("MenText"))
End If
Dim r2 As DataRow
For Each r2 In r.GetChildRows("self_menu")
addmenuitem(r2, mi)
Next
End Sub
'--------------------------------------------------------一种方法的改进
‘/////////////////////////////////////////////////////////////////////////////////////
‘继承自menuitem的类
‘/////////////////////////////////////////////////////////////////////////////////////
Public Class mymenuitem
Inherits System.Windows.Forms.MenuItem
Public Sub New(ByVal s As String, ByVal tag As String)
MyBase.New()
Me.Text = s
m_tag = tag
End Sub
Private m_tag As String
Public Property tag() As String
Get
Return m_tag
End Get
Set(ByVal Value As String)
m_tag = Value
End Set
End Property
End class
[1] [2] 下一页