NewbNoobCoder Ответов: 4

Vb.net ADO indexwasoutof range


Я хочу отобразить свой набор данных на Datagridview, но это меня беспокоит.

Как ты можешь это объяснить? Есть какие-нибудь решения?

Private Sub dgvOutput()

       With dgvDisplay


           .Columns(1).HeaderCell.Value = "ID"
           .Columns(1).Width = 30
           .Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
           .Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter

           .Columns(1).HeaderCell.Value = "Place"
           .Columns(1).Width = 100
           .Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter

           .Columns(2).HeaderCell.Value = "Facility"
           .Columns(2).Width = 100
           .Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter

           .Columns(3).HeaderCell.Value = "Date Reserved"
           .Columns(3).Width = 200
           .Columns(3).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter

           .Columns(4).HeaderCell.Value = "Time Start"
           .Columns(4).Width = 100
           .Columns(4).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter

           .Columns(5).HeaderCell.Value = "Time End"
           .Columns(5).Width = 100
           .Columns(5).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter

           .Columns(6).HeaderCell.Value = "Requestor"
           .Columns(6).Width = 80
           .Columns(6).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter

           .Columns(7).HeaderCell.Value = "Price"
           .Columns(7).Width = 70
           .Columns(7).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter

           .Columns(8).HeaderCell.Value = "Note"
           .Columns(8).Width = 180
           .Columns(8).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter


       End With

   End Sub

   Private Sub FillTable()
       Dim adapter As New OleDbDataAdapter
       Dim dt As New DataTable

       adapter.SelectCommand = command
       adapter.Fill(dt)
       dgvDisplay.DataSource = dt
       dgvOutput()
       adapter.Dispose()
       command.Dispose()
       conn.Close()

   End Sub


Что я уже пробовал:

Я пытался изменить столбцы и их индексы, но все равно безуспешно

нужно ли мне объявлять количество столбцов?

или какие-то особые коды.

если вы хотите проверить весь мой код

вы можете написать мне: [Email удален]

приблизительный размер файла проекта: 1,5 Мб

4 Ответов

Рейтинг:
23

OriginalGriff

Проблема в том, что это будет очень зависеть от ваших данных, к которым у нас нет никакого доступа, поэтому мы не можем точно сказать, почему вы получаете ошибку или даже где именно.

Дело в том, что вы получаете доступ к несуществующему столбцу - и поскольку мы не можем запустить ваш код, мы понятия не имеем, сколько столбцов у вас должно быть. Я подозреваю, что индексы начинаются с нуля, а не с единицы - так что, вероятно, у вас есть восемь столбцов, и вам нужно ссылаться на них как на 0-7, а не 1-8.


Рейтинг:
2

Patrice T

Цитата:
Vb.net ADO indexwasoutof range
2 возможности:
- любой dgvDisplay.DataSource = dt не удалось вернуть ожидаемый объект.
- либо там меньше колонок, чем ожидалось.
во всех случаях убедитесь, что у вас есть то, что вы ожидаете.

Используйте отладчик, чтобы увидеть, что не так.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
2

NewbNoobCoder

@OriginalGriff

Я добавил этот код поверх объявления столбцов и изменил его индексы с 0 до 8, и теперь он работает.

dgvOutput.Источник Данных = Ничего
dgvOutput.Rows.Четкий()
dgvOutput.ColumnCount = 9


Спасибо сэр Грифф :) Большие пальцы вверх для вас :)


Но я столкнулся с другой проблемой :(

Недопустимое исключение операции было необработано
Свойство SelectCommand не было инициализировано перед вызовом 'Fill'.

как было заявлено сэром пполиморфом, это может быть связано с таблицами данных :(

Надеюсь, вы могли бы мне помочь, сэр, потому что наши профессора плохо учили нас.


Рейтинг:
1

NewbNoobCoder

Проблема Решена

Просто нужно объявить этот код

Команда Dim As OleDBConnection = Nothing

и используйте это на некоторых SQL-операторах

Команда Dim как новая OleDBCommand


Спасибо Ребята :) Ценим Ваше время и efffort :)