come associare datatable a datagridview in c #

Ho bisogno di bind il mio DataTable al mio DataGridView . lo faccio:

DTable = new DataTable(); SBind = new BindingSource(); //ServersTable - DataGridView for (int i = 0; i < ServersTable.ColumnCount; ++i) { DTable.Columns.Add(new DataColumn(ServersTable.Columns[i].Name)); } for (int i = 0; i < Apps.Count; ++i) { DataRow r = DTable.NewRow(); r.BeginEdit(); foreach (DataColumn c in DTable.Columns) { r[c.ColumnName] = //writing values } r.EndEdit(); DTable.Rows.Add(r); } SBind.DataSource = DTable; ServersTable.DataSource = SBind; 

Ma tutto ciò che ho ottenuto è DataTable AGGIUNGE NUOVE colonne al mio DataGridView . Non ho bisogno di questo, ho solo bisogno di scrivere sotto colonne esistenti. per favore, aiutami ragazzi!

Prova questo:

  ServersTable.Columns.Clear(); ServersTable.DataSource = SBind; 

Se non vuoi cancellare tutte le colonne esistenti, devi impostare DataPropertyName per ogni colonna esistente come questa:

 for (int i = 0; i < ServersTable.ColumnCount; ++i) { DTable.Columns.Add(new DataColumn(ServersTable.Columns[i].Name)); ServersTable.Columns[i].DataPropertyName = ServersTable.Columns[i].Name; } 

Anche meglio:

 DataTable DTable = new DataTable(); BindingSource SBind = new BindingSource(); SBind.DataSource = DTable; DataGridView ServersTable = new DataGridView(); ServersTable.AutoGenerateColumns = false; ServersTable.DataSource = DTable; ServersTable.DataSource = SBind; ServersTable.Refresh(); 

Stai dicendo alla fonte collegabile che è legata al DataTable, a turno devi dire al tuo DataGridView di non generare automaticamente colonne, quindi inserirà solo i dati per le colonne che hai inserito manualmente nel controllo. .. aggiornare infine il controllo per aggiornare il database.

Su DataGridView, imposta DataPropertyName delle colonne sui nomi delle colonne di DataTable.

// Ho prima costruito il mio datatable e lo ho popolato, colonne, righe e tutto il resto. // Quindi, quando il datatable è funzionale, effettuare le seguenti operazioni per associarlo al DGV. NOTA: la proprietà AutoGenerateColumns del DGV deve essere “true” per questo esempio, oppure l'”assegnazione” dei nomi di colonna da datatable a dgv non funzionerà. Ho anche “aggiunto” il mio datatable a un set di dati in precedenza, ma non penso che sia necessario.

  BindingSource SBind = new BindingSource(); SBind.DataSource = dtSourceData; ADGView1.AutoGenerateColumns = true; //must be "true" here ADGView1.Columns.Clear(); ADGView1.DataSource = SBind; //set DGV's column names and headings from the Datatable properties for (int i = 0; i < ADGView1.Columns.Count; i++) { ADGView1.Columns[i].DataPropertyName = dtSourceData.Columns[i].ColumnName; ADGView1.Columns[i].HeaderText = dtSourceData.Columns[i].Caption; } ADGView1.Enabled = true; ADGView1.Refresh(); 
 foreach (DictionaryEntry entry in Hashtable) { datagridviewTZ.Rows.Add(entry.Key.ToString(), entry.Value.ToString()); } 
 private void Form1_Load(object sender, EventArgs e) { DataTable StudentDataTable = new DataTable("Student"); //perform this on the Load Event of the form private void AddColumns() { StudentDataTable.Columns.Add("First_Int_Column", typeof(int)); StudentDataTable.Columns.Add("Second_String_Column", typeof(String)); this.dataGridViewDisplay.DataSource = StudentDataTable; } } //Save_Button_Event to save the form field to the table which is then bind to the TableGridView private void SaveForm() { StudentDataTable.Rows.Add(new object[] { textBoxFirst.Text, textBoxSecond.Text}); dataGridViewDisplay.DataSource = StudentDataTable; }