2014-10-30 12 views
0

我正在尋找一種方法來避免使用select case訪問特定列表;我將在模塊上有大約90個列表,並且根據在列表框中選擇的記錄(手動填充我的數據庫的大多數表的名稱,但不是全部),我需要讀取列表中的項目。所以,我有這樣的事情:使用直播調用列表

Public RelevantTables_Table001 As List(Of Table001) = New List(Of Table001) 
Public RelevantTables_Table002 As List(Of Table002) = New List(Of Table002) 
'... 
Public RelevantTables_Table999 As List(Of Table999) = New List(Of Table999) 

Class Table001 
'code for populating RelevantTables_Table001 
End Class 

Class Table002 
'code for populating RelevantTables_Table002 
End Class 

Class Table999 
'code for populating RelevantTables_Table999 
End Class 

現在我需要閱讀相關的列表,具體取決於項目挑上一個列表框。例如,如果有人選擇Table042我需要閱讀列表RelevantTables_Table042的項目。

我想爲此使用DirectCast,但我無法弄清楚如何去做。

+0

你是如何填充列表框?用那個更新你的文章。 – OneFineDay 2014-10-30 17:33:41

+0

現在,手動;列表框列出了我數據庫的大部分表格。 – user3050422 2014-10-30 17:38:24

+0

「反射」是一種可能性,因爲您可以創建一個「RelevantTables_」&lsb.Text' = RelevantTables_Table001的字符串,並且這將是該字段的名稱。 – OneFineDay 2014-10-30 17:42:10

回答

0

類:

Public Class Table 
    Public Tablename As String 
    Public Collection As New List(Of String) 
    Public Overrides Function ToString() As String 
    Return Me.TableName 
    End Function 
End Class 

創建新列表:

Private RelevantTable_Table001 As New Table 
RelevantTable_Table001.Tablename = "Table001" 
RelevantTable_Table001.Collection.Add("stuff") 
... 
'add the class and it will display the TableName since we 
'overrided the ToString function 
lsb.Items.Add(RelevantTable_Table001) 
'class objects can be stored in the listbox as an object 

獲取來自SelectedItem屬性的List對象。

Private Sub lsb_SelectedIndexChanged(sender As Object, e As EventArgs) 
    Dim tableList = TryCast(DirectCast(sender, ListBox).SelectedItem, Table) 
    If tableList IsNot Nothing Then 
    'tableList is the reference to the table object you seek. 
    End If 
End Sub 

要使多個對象(在DGV列)的列表中使用自定義類:

Public Class MyCustomClass 
    Public Property Prop1 As String 
    Public Property Prop2 As String 
    Public Property Prop3 As String 
End Class 

然後你Table.Collection將是一個List(Of MyCustomClass)而不是字符串,這會給你3項每個收集項目 - 這是一個表。這是否符合您的需求?

+0

非常感謝,這就是我一直在尋找的東西:) Can我只是最後一個問題而煩惱你?如果我可以用多列創建列表(我需要3),它會幫助我很多。我有代碼來做到這一點,我試圖通過你提供的代碼來應用它。除此之外,再次感謝您們的幫助 – user3050422 2014-10-31 11:02:29

+0

@ user3050422,請問您會這樣做嗎? – OneFineDay 2014-10-31 13:24:44

+0

完全OneFineDay,我解決了這個問題。非常感謝你的伴侶,你真的幫我在這裏:) – user3050422 2014-10-31 17:32:23

0

做一個列表的列表,然後使用下標來訪問正確的列表,如

Public RelevantTables As List(Of List(Of table)) 

For Each item in RelevantTables(42)