Технологии

Решено

Заполнение dataGridView данными из array - вопрос №150184

Здравствуйте! Помогите пожалуйста советом. Как заполнить dataGridView из array, если элементы массива не одного типа.

У меня есть данные хранящиеся в бинарном файле в определенной структуре. При считывании файла получаю структуру данных и сами данные. Записываю в массив, который потом передаю как источник данных в dataGridView

ArrayList array = new ArrayList();

for (int i = 0; i != countRecords; i++)
{

       ArrayList arrayRow =new ArrayList();

       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

  • Константин Жук - аватарка

    Константин Жук

    1-й в

    а колонки данных как добавляются?

    созданы в дизайнере? или автоматически?

    если автоматически (а для выбраного Вами способа назначения источника данных следует выбирать автоматическую генерацию) — проблем быть не должно. соответственно в дизайнере колонки создавать не надо вообще.

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

    см свойство DataGridView.AutoGenerateColumns

    ноябрь 27, 2011 г.
    Ответ понравился автору
    Лучший ответ по мнению автора
  • Константин Жук - аватарка

    Константин Жук

    1-й в

    я говорю о колонках DataGridView

    их не надо трогать ВООБЩЕ

    установите свойство DataGridView.AutoGenerateColumns = true

    потом

    dataGridView1.DataSource = array

    все. больше ни чего не надо делать

    ноябрь 27, 2011 г.
  • Константин Жук - аватарка

    Константин Жук

    1-й в

    если не поможет пришлите код.

    у меня сейчас есть время, можете в чат стукнуть

    ноябрь 27, 2011 г.
  • Константин Жук - аватарка

    Константин Жук

    1-й в

    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

    ...

    }

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

    ноябрь 27, 2011 г.