Как создать массив/серию данных, поддающийся обработке

#vb.net #datatable

Вопрос:

Я хочу динамически создавать массив данных. в соответствии с номером i таблица из datagridview будет сохранена в таблицу данных (например, таблица 1, таблица 2, таблица 3 и т.д.). В другой форме, если пользователь запишет номер i в текстовое поле, datagridview будет заполнен с использованием правильной таблицы (таблица 1, таблица 2…)

Но если я объявлю таблицу(i) как новую, доступную для данных, я получу сообщение «Массивы не могут быть объявлены с ошибкой» Новый»»

Если я объявлю таблицу(i) доступной для данных, я получу ошибку «ссылка на объект system.nullreferenceexception не установлена на экземпляр объекта» при добавлении столбцов

 Sub add newtable()   Dim i As Integer = TextBox1.Text Dim table(i) As New DataTable '!  With table(i).Columns .Add("sample1", Type.GetType("System.String")) .Add("sample2", Type.GetType("System.String")) End With  table(i).Rows.Add("a", "b") table(i).Rows.Add("c", "d")  End sub  

затем

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  DataGridView1.DataSource = table(i)  End Sub  

Комментарии:

1. Sub add newtable() Имя метода не может содержать пробел.

2. Просто используйте набор данных

Ответ №1:

Во-первых, сейчас и навсегда включите опцию Строгий. Свойства проекта -gt; вкладка «Компиляция». Также для будущих проектов Инструменты -gt; Параметры -gt;gt; Проекты и решения -gt;gt;gt; VB по умолчанию

A DataSet сделано для удержания DataTable s. A List(Of DataTable) может быть проще в использовании, потому что вам не придется отслеживать индекс. Если вам действительно нужен массив, объявите его на Class уровне. Мне нравится использовать множественное число для названий коллекций.

 Private tables As DataTable()  Sub addnewtable()   Dim i As Integer = CInt(TextBox1.Text)  tables(i) = New DataTable   With tables(i).Columns  .Add("sample1", Type.GetType("System.String"))  .Add("sample2", Type.GetType("System.String"))  End With   tables(i).Rows.Add("a", "b")  tables(i).Rows.Add("c", "d")  End Sub