2013-10-01 28 views
16

DataTable benim DataGridView bağlamam gerekir. bunu yapmak:datagridview için databridview bağlama nasıl 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; 

Ama aldığım DataTablebenim DataGridView için YENİ sütunları KATIYOR olduğunu. Buna ihtiyacım yok, sadece mevcut sütunların altına yazmam gerekiyor. lütfen bana yardım edin beyler!

+1

Herhangi bir "DataSet" iniz yok, sadece bir "BindingSource" ve bir "DataTable" var. 'BindingSource' boş. –

cevap

16

bu deneyin:

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

Zaten bunu yapıyorum, sadece yazıya dahil etmeyi unuttum. –

+0

@ Greag.Deay Güncelleme yanıtımı gör –

+0

EVET! ÇOK TEŞEKKÜR EDERİM!!! –

9

Daha da iyisi: Eğer mevcut tüm sütunları temizlemek istemiyorsanız

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

, böyle mevcut her sütun için DataPropertyName belirlemek zorunda:

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

Bağlı olduğu çiftlenebilir kaynağı anlatıyorsunuz DataTable'a, sırayla DataGridView'ınızın sütunları otomatik oluşturmamalarını söylemeniz gerekir, bu nedenle yalnızca el ile girdiğiniz sütunlar için veriyi çekersiniz ... son olarak databind'i güncelleştirmek için denetimi yenile .

+0

Doğru gibi görünüyorsun, ancak şimdi hiçbir hücre doldurulmadan yeni boş satırlar ekliyor. Hangi sütunların doldurması gerektiğini bilmeyen datagridview gibi görünüyor. –

+1

SBind.DataMember, genellikle satırın kimliğini belirtmeniz gerekir. Ve her bir sütun için DataPropertyName değerini ayarlamanız gerekir, ör .: http://stackoverflow.com/questions/9154130/fill-specific-columns-in-datagridview-from-mysql-data-vb-net –

+0

Evet DataGridView üzerinde DataPropertyName ayarlamalısınız. Bundan sonra, bu çözüm bir çekicilik gibi çalışır. Çok teşekkürler. – FrenkyB

3

DataGridView'da, DataTropertyName sütunlarını DataTable'ınızın sütun adlarına ayarlayın.

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