Domanda

Il mio DataTable ha oltre 1000 colonne e voglio visualizzare i valori sul datagridview. A causa del problema FillWeigth Io uso il seguente metodo per riempire il GridView,

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;
    }

e qualche volta mi hanno un effetto che il mio GridView è vuota. Solo dopo secondi dati di esecuzione viene visualizzata. Avete delle idee, perché ...?

Grazie.

È stato utile?

Soluzione 3

Bene, ho risolto il mio problema. Con il suggerimento di Ivan ho provato il modo alternativo per i dati di riempimento: invece di utilizzare DataSource aggiungo nuove righe manualmente

            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);
            }

... e funziona - vengono visualizzati i dati in DGV. Grazie!

Altri suggerimenti

Vi consiglio di usare il paging, voglio dire che si può mostrare circa 20 colonne con pulsanti di navigazione sotto la griglia, è come Google o altri ... anche il tuo non sono programmazione di un'applicazione web.

Usa vincolante fonte per riempire la griglia

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

Ora non avete bisogno di preoccuparsi per la creazione di colonne e le cellule di riempimento in loop e la sua molto migliore performance

collegare dati a Datagridview

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top