学院首页>网络编程>ASP.NET>使用递归从数据库读取数据来动态建立菜单

使用递归从数据库读取数据来动态建立菜单

作者: 来源: 添加时间:2006-5-21 19:56:55
表结构与内容

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 页 [1] [2]
站内搜索