Я немного оглянулся, и, похоже, ничто не отвечает на мой вопрос. У меня есть DataGridView, в котором я добавляю строки и столбцы, зависящие от определенного количества записей геопространственных данных, которые хранятся в ArcGIS. Затем данные передаются в gridview для редактирования.VB.NET DataGridView, не отображающий данные
Поэтому я не использую методы привязки данных, а это очень ручной процесс. Я храню данные в двумерных массивах, индексы которых основаны на данных определенных данных.
После завершения циклов данные должны храниться в каждой ячейке в зависимости от индекса. Самая последняя заполненная строка заполняется отлично, но остальные 72 (или около того) строки пустые.
Вот код следующим образом:
Это заполнит заголовки столбцов (отлично работает):
For i_FieldNum = 0 To pFields_1.FieldCount - 1
str_FieldName = UCase(pFields_1.Field(i_FieldNum).Name)
str_FieldAliasName = pFields_1.Field(i_FieldNum).AliasName
ReDim Preserve m_array_str_FieldNames(i_FieldNum)
ReDim Preserve m_array_str_FieldAliasNames(i_FieldNum)
m_array_str_FieldNames(i_FieldNum) = str_FieldName
m_array_str_FieldAliasNames(i_FieldNum) = str_FieldAliasName
i_FieldCount = i_FieldCount + 1
i_ColNum = i_FieldCount - 1
'If this is the "SHAPE", "FID", or "OBJECTID" field, remember it:
If (str_FieldName = "SHAPE") Then
m_i_FieldNum_Shape = i_FieldCount - 1
ElseIf (str_FieldName = "FID") Then
m_i_FieldNum_FID = i_FieldCount - 1
ElseIf (str_FieldName = "OBJECTID") Then
m_i_FieldNum_OBJECTID = i_FieldCount - 1
End If
'Store the field name in the top row:
grid_Data.ColumnCount = i_FieldCount
grid_Data.Columns.Item(i_ColNum).HeaderText = str_FieldName
ReDim Preserve m_array_l_FieldColLengths(i_ColNum)
m_array_l_FieldColLengths(i_ColNum) = pFields_1.Field(i_FieldNum).Length
Next i_FieldNum
Это заполнит двумерный массив:
Do Until pFeat_1 Is Nothing
'Until we run out of features ...
i_FeatCount = i_FeatCount + 1
For i_FieldNum = 0 To pFields_1.FieldCount - 1
'If the field is recorded as a shape
If (i_FieldNum = m_i_FieldNum_Shape) Then
array_Data(i_FeatCount - 1, i_FieldNum) = "<Shape>"
Else
'If the value of the field is null
If IsNothing(pFeat_1.Value(i_FieldNum)) Or pFeat_1.Value(i_FieldNum).ToString = "" Then
array_Data(i_FeatCount - 1, i_FieldNum) = "<Null>"
Else
array_Data(i_FeatCount - 1, i_FieldNum) = pFeat_1.Value(i_FieldNum).ToString
End If
End If
Next i_FieldNum
'End If
'Move to the next feature (if any).
pFeat_1 = pFeatCursor_1.NextFeature
Loop
Предположительно, чтобы отобразить данные:
For i_RowNum = 0 To i_FeatCount - 1
'Add a new row to the grid:
grid_Data.RowCount = i_RowNum + 2
For i_ColNum = 0 To pFields_1.FieldCount - 1
grid_Data.Item(i_ColNum, i_RowNum + 1).Value = array_Data(i_RowNum, i_ColNum)
Next i_ColNum
Next i_RowNum
Все работает и компилирует прекрасно, хотя, как я уже говорил ранее, только данные последней строки является показано (который населяли правильно).
Если кто-то может помочь выяснить, почему только одна строка заполнена, она будет более чем оценена.
Спасибо,
Логан
Должен признаться, что я не могу видеть это. В стороне, хотя если вы установите grid_data.RowCount на i_FeatCount вне цикла, вы получите повышение производительности. –
Спасибо за совет.Это сводит меня с ума. Я просидел все итерации, проверяя каждую ценность. Взял мне 4 с половиной часа. Спасибо за вашу помощь. –
У меня будет попытка, я вижу, что вы пришли из фона VB6, если не все еще в версии 1.1 .Net. Я бы рекомендовал вам перейти от массивов ReDim'ing к использованию дженериков, например: List (of Class). Даже использование DataTable было бы намного легче читать. Совет. Венгерская нотация не нужна с .Net. –