2013-10-01 4 views
16

binden Ich muss meine DataTable an meine DataGridView binden. ich das tun:wie Datentabelle in C#

 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; 

Aber alles, was ich habe ist Datatablefügt neue Spalten meiner Datagridview. Ich brauche das nicht, ich muss nur unter vorhandenen Spalten schreiben. bitte, hilf mir, Leute!

+1

Sie haben kein 'DataSet', Sie haben nur eine' BindingSource' und eine 'DataTable'. Ihre BindingSource ist leer. –

Antwort

16

Try this:

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

Wenn Sie alle vorhandenen Spalten nicht löschen möchten, können Sie DataPropertyName für jede vorhandene Spalte wie folgt festgelegt haben:

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

Ich mache das schon, habe nur vergessen, das in die Post aufzunehmen. –

+0

@ Greag.Deay siehe meine aktualisierte Antwort –

+0

JA! VIELEN DANK!!! –

9

Noch besser:

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

Sie sagen der bindefähigen Quelle, dass sie gebunden ist Bei der DataTable müssen Sie der DataGridView wiederum mitteilen, dass Spalten nicht automatisch generiert werden sollen. Daher werden nur die Daten für die Spalten eingezogen, die Sie manuell in das Steuerelement eingegeben haben. Aktualisieren Sie schließlich das Steuerelement, um die Datenindikation zu aktualisieren .

+0

Es sieht so aus, als ob Sie Recht haben, aber jetzt fügt es einfach neue leere Zeilen hinzu, ohne dass Zellen gefüllt sind. sieht aus wie datagridview nicht wissen, welche Spalten gefüllt werden müssen. –

+1

Sie müssen das SBind.DataMember, normalerweise die ID der Zeile, ausdrücken. Und Sie müssen den DataPropertyName für jede der Spalten festlegen, z. B .: http://StackOverflow.com/questions/9154130/fill-specific-columns-in-datagridview-from-mysql-data-vb-net –

+0

Ja In einem DataGridView müssen Sie DataPropertyName festlegen. Danach funktioniert diese Lösung wie ein Zauber. Danke vielmals. – FrenkyB

3

Setzen Sie in der DataGridView den DataPropertyName der Spalten auf die Spaltennamen Ihrer DataTable.

0
foreach (DictionaryEntry entry in Hashtable) 
{ 
    datagridviewTZ.Rows.Add(entry.Key.ToString(), entry.Value.ToString()); 
}