树和自联表(六)

Author:水如烟  

三种情形示例

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

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

树和自联表(六)_第1张图片

树和自联表(六)_第2张图片

结果是:

树和自联表(六)_第3张图片

代码:

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

效果:

树和自联表(六)_第4张图片

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

要使用本示例代码,需把以上数据存为一个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

结果:

树和自联表(六)_第5张图片

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

你可能感兴趣的:(树和自联表(六))