表结构与内容
MenBh MenText Bhparent
0001 文件
1<null>
2
30002 编辑 <null>
4
50005 打开 0001
6
70006 新建 0001
8
90011 access 数据库 0006
10
110012 VFP 的 Dbf 0006
12
130013 剪切 0002
14
150014 复制 0002
16
170015 完全复制 0014
18
19Private m As New MainMenu()
20
21Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load
22
23Dim conn As New SqlConnection("server=localhost;uid=sa;pwd=;database=jiang")
24
25Dim cmd As New SqlCommand("select * from a_menu ", conn)
26
27Dim ds As New DataSet()
28
29Dim sqldpr As New SqlDataAdapter(cmd)
30
31sqldpr.Fill(ds, "menu")
32
33Me .DataGrid1.DataSource = ds.Tables("menu")
34
35' 创建关系
36
37Dim dr As New DataRelation("self_menu", ds.Tables("menu").Columns("MenBh"), ds.Tables("menu").Columns("Bhparent"))
38
39ds.Relations.Add(dr)
40
41Dim r1 As DataRow
42
43' 查找最高的菜单级别 , 也就是 Bhparent 列为空的行
44
45For Each r 1 In ds.Tables("menu").Rows
46
47If r1.IsNull("Bhparent") Then
48
49addmenuitem(r1, Nothing )
50
51End If
52
53Next
54
55Me .Menu = m ' 指定主窗体菜单
56
57End Sub
58
59' 递归函数
60
61Private Sub addmenuitem( ByVal r As DataRow, ByVal item As MenuItem)
62
63Dim mi As MenuItem
64
65' 如果是最外层菜单,要直接添加
66
67If item Is Nothing Then
68
69mi = m.MenuItems.Add(r.Item("MenText"))
70
71Else ' 如果是下级菜单要在菜单项的上级添加
72
73mi = item.MenuItems.Add(r.Item("MenText"))
74
75End If
76
77Dim r2 As DataRow
78
79For Each r 2 In r.GetChildRows("self_menu")
80
81addmenuitem(r2, mi)
82
83Next
84
85End Sub
86
87'--------------------------------------------------------一种方法的改进
88
89‘ ///////////////////////////////////////////////////////////////////////////////////////////////
90
91‘ 继承自 menuitem 的类
92
93‘ ///////////////////////////////////////////////////////////////////////////////////////////////
94
95Public Class mymenuitem
96
97Inherits System.Windows.Forms.MenuItem
98
99Public Sub New ( ByVal s As String , ByVal tag As String )
100
101MyBase .New()
102
103Me .Text = s
104
105m_tag = tag
106
107End Sub
108
109Private m_tag As String
110
111Public Property tag() As String
112
113Get
114
115Return m_tag
116
117End Get
118
119Set ( ByVal Value As String )
120
121m_tag = Value
122
123End Set
124
125End Property
126
127End class
128
129‘ ///////////////////////////////////////////////////////////////////////////////////////////////
130
131‘ 在代码中实现这种菜单项的添加和菜单的建立
132
133‘ //////////////////////////////////////////////////////////////////////////////////////////////
134
135Private m As New MainMenu()
136
137Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load
138
139Dim conn As New SqlConnection("server=localhost;uid=sa;pwd=;database=jiang")
140
141Dim cmd As New SqlCommand("select * from a_menu ", conn)
142
143Dim ds As New DataSet()
144
145Dim sqldpr As New SqlDataAdapter(cmd)
146
147sqldpr.Fill(ds, "menu")
148
149'Me.DataGrid1.DataSource = ds.Tables("menu")
150
151Me .DataGrid1.DataSource = ds
152
153Me .DataGrid1.DataMember = "menu"
154
155' 创建关系
156
157Dim dr As New DataRelation("self_menu", ds.Tables("menu").Columns("MenBh"), ds.Tables("menu").Columns("Bhparent"))
158
159ds.Relations.Add(dr)
160
161Dim r1 As DataRow
162
163' 查找最高的菜单级别 , 也就是 Bhparent 列为空的行
164
165For Each r 1 In ds.Tables("menu").Rows
166
167If r1.IsNull("Bhparent") Then
168
169addmenuitem(r1, Nothing )
170
171End If
172
173Next
174
175Me .Menu = m ' 指定主窗体菜单
176
177End Sub
178
179' 递归函数
180
181Private Sub addmenuitem( ByVal r As DataRow, ByVal item As MenuItem)
182
183Dim mi As MenuItem
184
185' 如果是最外层菜单,要直接添加
186
187If item Is Nothing Then
188
189Try
190
191mi = New mymenuitem(r.Item("MenText"), "1")
192
193m.MenuItems.Add(mi)
194
195Catch ex As Exception
196
197MessageBox.Show(ex.ToString)
198
199End Try
200
201Else ' 如果是下级菜单要在菜单项的上级添加
202
203mi = New mymenuitem(r.Item("MenText"), "2")
204
205item.MenuItems.Add(mi)
206
207End If
208
209Dim r2 As DataRow
210
211For Each r 2 In r.GetChildRows("self_menu")
212
213addmenuitem(r2, mi)
214
215Next
216
217End Sub</null></null>