快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

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

表结构与内容

MenBh            MenText     Bhparent

 

0001             文件         

0002             编辑         

0005             打开          0001

0006             新建          0001

0011             access数据库  0006

0012             VFPDbf      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

本新闻共2页,当前在第1页  1  2  

本新闻共2页,当前在第1页  1  2  


返回类别: 教程
上一教程: 头一次手写这么长的代码,真累:(
下一教程: .NET Framework For Java Programmers ---4(Good)

您可以阅读与"使用递归从数据库读取数据来动态建立菜单"相关的教程:
· 使用COBOL.net访问数据库
· 使用perl.net访问数据库
· 使用ADO.NET轻松操纵数据库
· .NET Remoting 实现分布式数据库查询
· 如何使用asp+ 动态创建页面元素
    微笑服务 优质保证 索取样品