树和自联表(六)

Author:水如烟  

三种情形示例

第一个示例,树情形。取MainForm主菜单的数据。ToolStripMenuItem本身是一个树。

随便在一个Form上加一些菜单。我的如图:

结果是:

代码:

Public   Class  FormTree

    
Private   Sub  Button1_Click( ByVal  sender  As  System.Object,  ByVal  e  As  System.EventArgs)  Handles  Button1.Click
        
Dim  mCollection  As   New  LzmTW.uSystem.uCollection.SinceLink.SinceLinkItemCollection( Of   Integer , MenuItemInformation)
        mCollection.AppendFromBlankCodeNode(GetMenuNode(
Me ))

        
Me .TreeView1.Nodes.Clear()
        
Me .TreeView1.Nodes.Add(mCollection.Node.ConvertToTreeNode( " Text " True ))

        
Me .DataGridView1.DataSource  =  mCollection.Node.ConvertToDataTable( True )
    
End Sub

    
Private   Function  GetMenuNode( ByVal  form  As  Form)  As  LzmTW.uSystem.uCollection.Node( Of  MenuItemInformation)
        
If  form.MainMenuStrip  Is   Nothing   Then   Return   Nothing
        
Dim  mNode  As   New  LzmTW.uSystem.uCollection.Node( Of  MenuItemInformation)( New  MenuItemInformation)
        mNode.Item.Name 
=   " Root "

        
For   Each  item  As  ToolStripMenuItem  In  form.MainMenuStrip.Items
            AppendNode(mNode, item)
        
Next

        
Return  mNode
    
End Function

    
Private   Sub  AppendNode( ByVal  node  As  LzmTW.uSystem.uCollection.Node( Of  MenuItemInformation),  ByVal  menuItem  As  ToolStripMenuItem)
        
Dim  mCurrentNode  As  LzmTW.uSystem.uCollection.Node( Of  MenuItemInformation)  =   Nothing
        mCurrentNode 
=  node.Nodes.Add( New  MenuItemInformation(menuItem))

        
For   Each  item  As  ToolStripMenuItem  In  menuItem.DropDownItems
            AppendNode(mCurrentNode, item)
        
Next

    
End Sub
End Class

Public   Class  MenuItemInformation
    
Inherits  LzmTW.uSystem.uCollection.SinceLink.SinceLinkItemBase( Of   Integer )

    
Private  gText  As   String
    
Public   Property  Text()  As   String
        
Get
            
Return  gText
        
End   Get
        
Set ( ByVal  value  As   String )
            gText 
=  value
        
End   Set
    
End Property

    
Sub   New ()
    
End Sub

    
Sub   New ( ByVal  menuItem  As  ToolStripMenuItem)
        
With  menuItem
            
Me .Name  =  .Name
            
Me .Text  =  .Text
        
End   With
    
End Sub

End Class

 

第二个示例,(Code,Name)情形。仍以行政区划数据为例。

代码:

Public   Class  Form1


    
Public  gRegionalDatas  As  DataTable  ' 这是列为Code,Name的行政区划数据表

    
Private   Sub  Button1_Click( ByVal  sender  As  System.Object,  ByVal  e  As  System.EventArgs)  Handles  Button1.Click

        
Dim  mCollection  As   New  LzmTW.uSystem.uCollection.SinceLink.SinceLinkItemCollection( Of   String , RegionalCodeItem)( " 00,00,00 " )

        
For   Each  row  As  DataRow  In  gRegionalDatas.Rows
            
With  row
                mCollection.Add(.Item(
" Code " ).ToString, .Item( " Name " ).ToString)
            
End   With
        
Next

        
Me .TreeView1.Nodes.Clear()
        
Me .TreeView1.Nodes.Add(mCollection.Node.ConvertToTreeNode( " Name " True ))

        
Me .DataGridView1.DataSource  =  mCollection.Node.ConvertToDataTable( True )
    
End Sub

End Class

Public   Class  RegionalCodeItem
    
Inherits  LzmTW.uSystem.uCollection.SinceLink.SinceLinkItemBase( Of   String )

    
Sub   New ()
    
End Sub

    
Sub   New ( ByVal  code  As   String ByVal  name  As   String )
        
MyBase .New(code, name)
    
End Sub

End Class

效果:

第三个示例,自联表数据情形。这里以树和自联表(四) 上的数据为例。

要使用本示例代码,需把以上数据存为一个Excel文件,文件名为Menus.xls,数据簿工作表名称为Menus。存它到程序运行目录上。

首先把数据读进一个DataTable里面。

     Private   Sub  Button2_Click( ByVal  sender  As  System.Object,  ByVal  e  As  System.EventArgs)  Handles  Button2.Click
        
Dim  cn  As   New  Odbc.OdbcConnection( " Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=menus.xls;HDR=Yes; " )
        
Dim  cm  As   New  Odbc.OdbcCommand( " SELECT * FROM [Menus$] " , cn)
        
Dim  ad  As   New  Odbc.OdbcDataAdapter(cm)
        
Dim  mds  As   New  DataSet( " Menus " )
        ad.Fill(mds, 
" Menu " )
        mds.WriteXmlSchema(
" Menus.xsd " )
        mds.WriteXml(
" menus.xml " )
        
Me .DataGridView1.DataSource  =  mds.Tables( 0 )
    
End Sub

由于我没有预建一个DataTable,所以上面代码运行后它自动的将Integer类型作为Double类型来处理。因此,需把它转为Intege类型。在此,我将数据存为xml形式,同时输出Schema文件。

之后,打开Menus.xsd文件,将所有Double类型改为Integer类型,保存。

现在可以使用这些数据了:

 

< Serializable() >  _
Public   Class  MenuItem
    
Inherits  LzmTW.uSystem.uCollection.SinceLink.SinceLinkItemBase( Of   Integer )

    
Private  gText  As   String
    
Private  gDeclare  As   String
    
Private  gToolTipText  As   String
    
Private  gShortcut  As   Integer
    
Private  gClickAction  As   String
    
Private  gVisible  As   Boolean
    
Private  gEnabled  As   Boolean

    
Public   Property  Text()  As   String
        
Get
            
Return  gText
        
End   Get
        
Set ( ByVal  value  As   String )
            gText 
=  value
        
End   Set
    
End Property

    
Public   Property  [ Declare ]()  As   String
        
Get
            
Return  gDeclare
        
End   Get
        
Set ( ByVal  value  As   String )
            gDeclare 
=  value
        
End   Set
    
End Property

    
Public   Property  ToolTipText()  As   String
        
Get
            
Return  gToolTipText
        
End   Get
        
Set ( ByVal  value  As   String )
            gToolTipText 
=  value
        
End   Set
    
End Property

    
Public   Property  Shortcut()  As   Integer
        
Get
            
Return  gShortcut
        
End   Get
        
Set ( ByVal  value  As   Integer )
            gShortcut 
=  value
        
End   Set
    
End Property

    
Public   Property  ClickAction()  As   String
        
Get
            
Return  gClickAction
        
End   Get
        
Set ( ByVal  value  As   String )
            gClickAction 
=  value
        
End   Set
    
End Property

    
Public   Property  Visible()  As   Boolean
        
Get
            
Return  gVisible
        
End   Get
        
Set ( ByVal  value  As   Boolean )
            gVisible 
=  value
        
End   Set
    
End Property

    
Public   Property  Enabled()  As   Boolean
        
Get
            
Return  gEnabled
        
End   Get
        
Set ( ByVal  value  As   Boolean )
            gEnabled 
=  value
        
End   Set
    
End Property
End Class

 

     Private   Sub  Button1_Click( ByVal  sender  As  System.Object,  ByVal  e  As  System.EventArgs)  Handles  Button1.Click
        
Dim  ds  As   New  DataSet
        ds.ReadXmlSchema(
" Menus.xsd " )
        ds.ReadXml(
" Menus.xml " )

        
Dim  mCollection  As   New  LzmTW.uSystem.uCollection.SinceLink.SinceLinkItemCollection( Of   Integer , MenuItem)


        
'  mCollection.Read()

        mCollection.AppendFromSinceLinkTable(ds.Tables(
0 ))

        
'  mCollection.Save()

        
Me .DataGridView1.DataSource  =  mCollection.Node.ConvertToDataTable( True )
        
Me .TreeView1.Nodes.Clear()
        
Me .TreeView1.Nodes.Add(mCollection.Node.ConvertToTreeNode( " Declare " True ))

        
' Console.WriteLine(mCollection.Node.FindFirstNode("Code", "300").Item.Text)
         ' Console.WriteLine(mCollection.Find("Code", "300").Text)
     End Sub

结果:

用这种方法,处理以上三种通常用到的数据,还是比较方便的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值