2014-10-23 2 views
0

У меня есть два datarows. Я делаю некоторые выбор в обоих:данные дисплея от двух datarows C#

DataRow[] result1 = MainWindow.dt.Select("number ='" + num_int + "' and Group ="'+ group + '""); 
DataRow[] result2 = MainWindow.listUlg.Select("Ulg ='" +row[17]+"'"); 

я получаю от Result1:

group1 2 Name1 

group2 3 Name2 

group3 4 Name3 

и форма result2:

3 tarif1 

2 tarif2 

Я хотел бы, чтобы отобразить tarif2 + Имя2 и tarif1 + name1. Я стараюсь с некоторым Еогеаспом циклом, но я не работаю должным образом, когда Especialy последовательность отличается

DataRow[] result1 = MainWindow.dt.Select("number ='" + num_int + "' and Group ="'+group + '""); 
foreach (var row in result1) 
{ 

    DataRow[] result2 = MainWindow.listUlg.Select("Ulg ='" +row[17]+"'"); 

    foreach (var row2 in result2) 
    { 
    MessageBox.Show(row[2] +" "+ row2[1]) 
    } 
} 
+0

«Я бы хотел отобразить tarif2 + Name2 и tarif1 + Name1» - Почему? Каковы правила, которые подразумевали бы, что tarif2 идет с Name2 и tarif1 идет с Name1? Это заказ в списке? Что-то другое? (Если это просто порядок в списке, используйте функцию linq Zip.) – Hogan

+0

Да, это правильный порядок – user3455769

+0

Ваш ответ не имеет смысла. – Hogan

ответ

0

Как я понимаю, вы должны перебрать массив, имеющий минимальных длину. Тогда просто извлечь элементы и объединить их обычно:

//This is your intial data which depends on the num_int and row[17] 
DataRow[] result1 = MainWindow.dt.Select("number ='" + num_int + "' and Group ="'+group + '""); 
DataRow[] result2 = MainWindow.listUlg.Select("Ulg ='" +row[17]+"'"); 

for(var i = 0; i < Math.Min(result1.Length, result2.Length); i++){ 
    MessageBox.Show(result2[i][1] + " " + result1[i][2]); 
} 
+0

Если я изменю заказ в datarows, я получаю ту же проблему. – user3455769

+0

@ user3455769 Не могли бы вы подробно остановиться на конкретной проблеме? ваш код напечатает некоторый дублированный результат (и это, конечно, не то, что вы хотите), поэтому я даже не знаю проблемы, которую вы здесь имеете в виду (это, конечно, не проблема, вызванная вашим собственным кодом). –

+1

Хорошо. Я ошибся. Everythnig работает нормально. Спасибо за помощь :) – user3455769

0

Вам нужен ключ, чтобы связать строки в наборе данных одной и строк в наборе данных два, что-то вроде внешнего ключа. Как вы уже определили, используя порядок, чтобы определить, какой из совпадений не будет работать.

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

DataRow[] result1 = MainWindow.dt.Select("number ='" + num_int + "' and Group ="'+group + '""); 
DataRow[] result2 = MainWindow.listUlg.Select("Ulg ='" +row[17]+"'"); 

foreach (var row in result1) 
{ 

    string output=row[2]; 

    if(result2.Where(x=>x.id=row.id).Count()>0) 
    { 
    var row2 = result2.Where(x=>x.id=row.id).First(); 
    output+=" "+row2[1]; 
    } 


    MessageBox.Show(output); 

}