2014-10-30 2 views
0

Я ищу способ избежать использования select case для доступа к определенному списку; У меня будет около 90 списков в модуле и в зависимости от записи, выбранной в списке (вручную заполненной именем большинства таблиц моей базы данных, но не всеми) мне нужно прочитать элементы списка , Так что у меня есть что-то вроде этого:Используйте directcast для вызова списка

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 

И теперь мне нужно прочитать соответствующий список, в зависимости от пункта взял на ListBox. Например, если кто-то выбирает Table042 Мне нужно прочитать пункты списка RelevantTables_Table042.

Я пытаюсь использовать DirectCast для этого, но я не могу понять, как это сделать.

+0

Как вы заполняете список? Обновите сообщение. – OneFineDay

+0

прямо сейчас, вручную; listbox перечисляет большинство таблиц моей базы данных. – user3050422

+0

'Reflection' - это возможность, так как вы могли бы создать строку' 'RelevantTables_ '& lsb.Text' = RelevantTables_Table001, и это будет имя поля. – OneFineDay

ответ

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 

Get объект List из свойства SelectedItem.

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

Большое вам спасибо, это именно то, что я искал :) Может я беспокою вас только последним вопросом? это очень помогло бы мне, если бы я мог создавать списки с несколькими столбцами (мне нужно 3). У меня есть код для этого, и я пытаюсь применить его по коду, который вы предоставляете. Кроме того, спасибо вам, ребята, еще раз за вашу помощь – user3050422

+0

@ user3050422, это будет? – OneFineDay

+0

Полностью OneFineDay, у меня проблема решена. Большое вам спасибо, вы действительно помогли мне здесь :) – user3050422

0

Составьте список списков, а затем использовать индекс для доступа правильного списка, например,

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

For Each item in RelevantTables(42) 
Смежные вопросы