Пустой DataGridView после добавления значений из DataTable с большим количеством столбцов - PullRequest
1 голос
/ 17 февраля 2012

моя таблица данных имеет более 1000 столбцов, и я хочу отображать значения в представлении данных. Из-за проблемы FillWeigth я использую следующий метод для заполнения вида сетки:

public bool TransferDataTableToGrid(DataGridView dataGrid, DataTable dataTable)
    {
        dataGrid.SuspendLayout();

        if ((dataGrid != null) && (dataTable != null))
        {
            dataGrid.Columns.Clear();
            dataGrid.AutoGenerateColumns = false;
            dataGrid.DataSource = dataTable;

            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                DataGridViewColumn column = new DataGridViewColumn();
                column.Name = dataTable.Columns[i].ColumnName;
                column.FillWeight = 1;
                column.CellTemplate = new DataGridViewTextBoxCell();
                column.ValueType = dataTable.Columns[i].DataType;
                dataGrid.Columns.Add(column);
            }
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                for (int ii = 0; ii < dataTable.Rows.Count; ii++)
                {
                    dataGrid[i, ii].Value = dataTable.Rows[ii][i];
                }
            }
        }
        dataGrid.ResumeLayout();
        return true;
    }

и иногда у меня возникает эффект, что мой вид сетки пуст. Только после второго выполнения отображаются данные. У вас есть идеи, почему ...?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 17 февраля 2012

Используйте источник привязки, чтобы заполнить вашу сетку

            SqlDataAdapter adapter = new SqlDataAdapter(database.cmd);
            dataSet1.Tables.Clear();
            adapter.Fill(dataSet1, "Table");
            bs = new BindingSource();
            bs.DataSource = dataSet1.Tables["Table"];
            dataGridView1.DataSource = bs;

Теперь вам не нужно беспокоиться о создании столбцов и заполнении ячеек в циклах и о его гораздо лучшей производительности

Привязать данныеDataGridView

0 голосов
/ 21 февраля 2012

Ну, я решил свою проблему.По предложению Ивана я попробовал альтернативный способ заполнения данных: вместо использования источника данных я добавляю новые строки вручную

            foreach (DataRow row in dataTable.Rows)
            {
                var dataGridRow = new DataGridViewRow();
                dataGridRow.CreateCells(dataGrid);

                for (int i = 0; i < row.ItemArray.Length; i++)
                {
                    dataGridRow.Cells[i].Value = row.ItemArray[i];
                }

                dataGrid.Rows.Add(dataGridRow);
            }

... и все работает - отображаются данные в dgv.Спасибо!

0 голосов
/ 17 февраля 2012

Я рекомендую использовать подкачку, я имею в виду, что вы можете отобразить около 20 столбцов с кнопками навигации под вашей сеткой, это как Google или другие ... даже вы не программируете веб-приложение.

...