#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