2012-03-09 5 views
1

У меня есть этот код:Показать данные в DataGridView из нескольких источников

 DataTable s = produseTableAdapter.GetData(); 
     DataTable t = produse_magazinTableAdapter.GetData(); 
     foreach (DataRow row in s.Rows) 
      if (row.ItemArray[2].Equals("consumabile")) 
      { 
       t.Rows.Add(row); 
      } 
     dataGridView1.DataSource = t; 

Проблема заключается в том, что dataGridView1 показывает данные:

 DataTable t = produse_magazinTableAdapter.GetData(); 

Как я могу решить эту проблему?

ответ

0

Если я правильно понимаю ваш код, вы берете строку из своей первой таблицы и добавляете ее во вторую таблицу.
Это не представляется возможным непосредственно Rows.Add
Я думаю, вы должны использовать

t.ImportRow(row); 

или

t.LoadDataRow(row.ItemArray, false); 

Конечно, при условии, ваша таблица имеет ту же схему и нет первичного ключа нарушения ,

С вашего вопроса неясно, если produse_magazinTableAdapter.GetData() пуст или нет.
Если нормально начать с пустой таблицы, вы можете создать DataTable с той же схемой, используя t = s.Clone(); и затем заполнение строк с помощью ImportRow или LoadDataRow

+0

И если существуют нарушения первичного ключа, как я могу их разрешить? – Vlasin

+0

Вы можете создать новый datarow с правильными значениями и добавить его в t. Однако, делая это таким образом, вы потеряете PK строки в s. – Koen

0

Один из вариантов заключается в объединении двух компонентов вместе, а затем использовать фильтр для данных.

Вы можете просто просто объединить два данных в один. Тем не менее, вам необходимо убедиться, что датаколонны имеют одно и то же имя и тип. Пример:

DataTable s = produseTableAdapter.GetData(); 
DataTable t = produse_magazinTableAdapter.GetData(); 
s.Merge(t); 

BindingSource bs = new BindingSource(); 
bs.DataSource = s; 
bs.Filter = "YourColumnName LIKE '%consumabile%'"; 
//OR 
bs.Filter = "yourColumnName = 'consumabile'"; 

Примечание: YourColumnName относится к тому, что столбец назван в ItemArray [2] в соответствии с вашим кодом. Вы можете использовать этот источник привязки на вашем DataGridView так:

this.grid_yourGrid.DataSource = this.bs; 

Это приносит как DataTables вместе так же, как это. Смотрите MSDN для получения дополнительной информации:

http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx

Для слияния: http://msdn.microsoft.com/en-us/library/fk68ew7b.aspx

Для источника привязки: http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

Надеется, что это помогает!