王朝网络
分享
 
 
 

树和自联表(六)

王朝other·作者佚名  2006-11-13
宽屏版  字体: |||超大  

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

结果:

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有