Используйте прямую трансляцию для вызова списка

Я ищу способ избежать использования 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 для этого, но я не могу понять, как это сделать.

2 ответа

Решение

Учебный класс:

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

Получить объект 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 элемента для каждой коллекции - это таблица. Это соответствует вашим потребностям?

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

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

For Each item in RelevantTables(42)
Другие вопросы по тегам