2013-10-01 5 views
16

Мне нужно связать мой DataTable с моим DataGridView. я это сделать:Как связать datatable с datagridview в 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; 

Но я получил это DataTableдобавляет новые столбцы моей DataGridView. Мне это не нужно, мне просто нужно писать под существующими столбцами. , пожалуйста, помогите мне, ребята!

+1

У вас нет 'DataSet', у вас просто есть' BindingSource' и 'DataTable'. ваш 'BindingSource' пуст. –

ответ

16

Попробуйте это:

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

Если вы не хотите, чтобы очистить все существующие столбцы, вы должны установить DataPropertyName для каждого существующего столбца, как это:

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

Я уже делаю это, просто забыл включить это в сообщение. –

+0

@ Greag.Deay см. Мой обновленный ответ –

+0

ДА! БОЛЬШОЕ СПАСИБО!!! –

9

Еще лучше:

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

Вы сообщаете, что связанный источник связан с ним к DataTable, в свою очередь вам нужно сообщить, что DataGridView не автогенерировать столбцы, поэтому он будет извлекать данные только для столбцов, которые вы вручную вводили в элемент управления ... наконец обновите элемент управления, чтобы обновить привязку данных ,

+0

похоже, что вы правы, но теперь он просто добавляет новые пустые строки без заполнения ячеек. похоже, что datagridview не знает, какие столбцы нужно заполнить. –

+1

Вам нужно будет выразить SBind.DataMember, обычно идентификатор строки. И вам нужно будет установить DataPropertyName для каждого из столбцов, например: http://stackoverflow.com/questions/9154130/fill-specific-columns-in-datagridview-from-mysql-data-vb-net –

+0

Да , в DataGridView вам нужно установить DataPropertyName. После этого это решение работает как шарм. Большое спасибо. – FrenkyB

3

В DataGridView установите DataPropertyName столбцов в имена столбцов вашего DataTable.

0
foreach (DictionaryEntry entry in Hashtable) 
{ 
    datagridviewTZ.Rows.Add(entry.Key.ToString(), entry.Value.ToString()); 
} 
Смежные вопросы