Проблемы при загрузке DataGridView с двухмерным arrayList - PullRequest
0 голосов
/ 26 августа 2010

Я пишу приложение, в котором я загружаю два DataGridViews из БД. Я успешно сделал это, используя dataAdapter.Fill (DataSet), но проблема, с которой я столкнулся, заключалась в том, что данные, поступающие из БД, содержат 10 тысяч записей. Это очень медленно (слишком медленно, около 7 минут) при первом запуске. В следующий раз время будет более разумным (около 35 секунд). Поэтому я решил попробовать другой подход: загрузить двухмерные массивы с данными, а затем передать их в таблицы данных. Первоначально я думал, что это будет быстрый тест, чтобы увидеть выигрыш времени, если таковой имеется, но это оказалось сложнее, чем я думал. Вот что у меня есть:

while(dr.Read())
        {



            for (int l = 0; b && l <= dr.FieldCount-1; l++)
            {
                DataGridViewColumn column = new DataGridViewColumn();
                column.CellTemplate = cellTemplate;
                column.FillWeight = 1;
                column.Name = dr.GetName(l);
                dgv.Columns.Add(column);
            }
            b = false;

            for (int i = 0; i <= dr.FieldCount - 1; i++ )
            {
                row.Add(dr.GetValue(i));
            }

            table.Add(row);

            row = new System.Collections.ArrayList();
        }

        dgv.DataSource = table;

Обратите внимание, я бы создал класс для встраивания данных (член данных для каждого столбца, но столбцы могут измениться), таким образом, идея arrayList. В результате в сетке данных появляются правильные столбцы, правильные имена и правильные номера или строки, однако все строки пустые, и добавлены дополнительные столбцы, относящиеся к структуре arrayList. Что я делаю неправильно? Есть ли способ лучше? Любая помощь / обратная связь будет оценена! : -)

Спасибо

Ben

1 Ответ

0 голосов
/ 27 августа 2010

Хорошо ... Я понял это ... вроде ;-) Я отказался от идеи Arraylist и просто добавил значения непосредственно в dgv.Вот что я сделал, если кому-то все равно: -)

...
    while(dr.Read())
    {
        for (int l = 0; b && l <= dr.FieldCount-1; l++)
        {
            DataGridViewColumn column = new DataGridViewColumn();
            column.CellTemplate = cellTemplate;
            column.FillWeight = 1;
            column.Name = dr.GetName(l);
            dgv.Columns.Add(column);
        }
        b = false;

        dgvRow = new DataGridViewRow();

        for (int i = 0; i <= dr.FieldCount - 1; i++ )
        {

            dgvCell = new DataGridViewTextBoxCell();
            dgvCell.Value = dr.GetValue(i).ToString();
            dgvRow.Cells.Add(dgvCell);
        }

        dgv.Rows.Add(dgvRow);
    }
...

Что приводит меня к моему следующему вопросу: Лучший способ заполнить DataGridView большим количеством данных

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