2015-06-25 6 views
1

Итак, я пытаюсь вернуть все имена столбцов в моем datagridview. Код ниже возвращает имена столбцов, кроме как в конце, я сообщение, указывающее Index was out of range Я предполагаю, что это потому, что у меня меньше 500 столбцов в моем datagridview.Индекс вне диапазона (диапазон переменный)

500 может теоретически быть любой величиной, у некоторых может быть только 20 столбцов, у других может быть 300 столбцов.

Как я могу устранить эту ошибку?

Dim c As Integer 
    For cn = 0 To 500 

     c = c + cn 
     'Debug.Print(cn) 
     Debug.Print(DataGridView1.Columns(cn).Name) 

Next cn 
+2

'Для сп = 0 В DataGridView1.Columns.Count - 1' возможно? – Arvo

+0

* особенно * если столбцы могут отличаться, используйте колонку. Count-1 – Plutonix

+0

Очень ценим @Arvo – Muhnamana

ответ

2

«Индекс вне диапазона» исключение может произойти, когда вы пытаетесь получить доступ к члену коллекции под индексом, который не существует

Давайте ваш пример - вы получаете ошибку здесь DataGridView1.Columns(cn), потому что ваш cn имеет значение, которое не существует в DataGridView1.Columns. Например, если у вас есть 2 столбца, ваши индексы: 0 и 1. Если вы попробуете задать DataGridView1.Columns(2) - вы получите это исключение. Так, как уже упоминалось выше, в комментариях, при работе с коллекциями вы либо использовать For Each цикл или использовать For... count -1 цикл

Это правильный код:

For i as Integer = 0 To DataGridView1.Columns.Count - 1 
    Debug.WriteLine(DataGridView1.Columns(i).Name) 
Next 

Пример For Each

For Each s as String In myStrings ' myStrings can be List(Of String) 
    Debug.WriteLine(s) 
Next