Технологии
Решено
Заполнение dataGridView данными из array - вопрос №150184
Здравствуйте! Помогите пожалуйста советом. Как заполнить dataGridView из array, если элементы массива не одного типа.
У меня есть данные хранящиеся в бинарном файле в определенной структуре. При считывании файла получаю структуру данных и сами данные. Записываю в массив, который потом передаю как источник данных в dataGridView
ArrayList array = new ArrayList();
for (int i = 0; i != countRecords; i++)
{
ArrayList arrayRow =
for (int j = 0; j != countFields; j++)
{
// получаю значение полей и записываю в массив строки (тут может использовать какую то структуру, которую определить ранее, но я такое не использовал ранее)
arrayRow.Add(value);
}
array.Add(arrayRow);
}
tf.dataGridView1.DataSource = array;
В результате строки добавляются, но данные не передаются.
Как разумнее поступить в данной ситуации?
Дополнение автора от ноябрь 27, 2011 г., 21:17:57
Колонки определяются в цикле после считывания структуры:
foreach (Field field in arrayFields)
{
tf.dataGridView1.Columns.Add(field.fieldName, field.fieldName);
}
В результате получаю dataGridView своей структуры + 2 колонки свойств массива array «Capacity»,«Count», где заполнены только последние поля.
knowell ноябрь 25, 2011 г.
-
Всего ответов: 4
-
а колонки данных как добавляются?
созданы в дизайнере? или автоматически?
если автоматически (а для выбраного Вами способа назначения источника данных следует выбирать автоматическую генерацию) — проблем быть не должно. соответственно в дизайнере колонки создавать не надо вообще.
при автоматическом добавлении, колонки источника данных будут добавлены к созданным в дизайнере. тогда они могут быть просто не видны на форме, но доступны при горизонтальной прокрутке в право
см свойство DataGridView.AutoGenerateColumns
Лучший ответ по мнению автора -
я говорю о колонках DataGridView
их не надо трогать ВООБЩЕ
установите свойство DataGridView.AutoGenerateColumns = true
потом
dataGridView1.DataSource = array
все. больше ни чего не надо делать
-
если не поможет пришлите код.
у меня сейчас есть время, можете в чат стукнуть
-
for (int i = 0; i != countRecords; i++)
{...
}
знаете почему так нельзя делать?
почему везде рекомендуется
for (int i = 0; i < countRecords; i++)
{...
}
представте что в теле цикла довольно много строк сложного кода и часто используется значение i
и однаж ды кто то вносит изменение такого вида
for (int i = 0; i != countRecords; i++)
{...
i = x // где x имеет значение больше countRecords
...
}
тогда Вы получите «вечный» цикл, по крайней мере очень большой и может с каким ни будь исключением