2012-10-20 23 views
12

W moim projekcie są dwa datatables dtFail i dtFailed (dtFailed (nie ma nic oprócz deklaracji nazw kolumn). dtFail ma duplikaty wartości kolumny "EmployeeName". Wziąłem więc DataView dvFail i zrobił proces, aby je wyraźna, jak pokazano w poniższym kodzie:Wyróżnianie wierszy i pokazywanie wszystkich kolumn

dtFail

enter image description here

próbowałem poniższy kod:

DataView dvFail = new DataView(dtFail); 
    dtFail = dvFail.ToTable(true, "EmployeeName"); //showing only one column in dtFail 

dtFailed (tylko jedna kolumna)

enter image description here

Jeśli zrobić jak poniżej

DataView dvFail = new DataView(dtFail); 
    dtFail = dvFail.ToTable(true, "EmployeeName","EmployeeRole","Status"); 

dtFailed (pokazujący ale z zduplikowane wiersze)

enter image description here

Następnie DataTable dtFailed przechowuje duplikat " EmployeeName "również.

Proszę o pomoc
Dzięki z góry.

+0

Potrzebujesz więcej informacji - czy możesz wkleić niektóre przykładowe dane pokazujące, jakie dane znajdują się w tabeli dvFail? –

+0

@SachinShanbhag sprawdź moje edytowane pytanie –

Odpowiedz

0

nie jestem pewien, że będzie pomocny czy nie. O ile dostaję z twojego pytania, że ​​chcesz, aby EmployeeName było odrębne nieistotne dla innych kolumn. Ale jeśli zrobisz ToTable i włączysz odrębną flagę, to podasz wszystkie odrębne wiersze, nie ma znaczenia, ile kolumn jest tam zaangażowanych. Jeśli więc wspomnisz tylko EmployeeName, to oczywiście dostarczysz różne EmployeeNames, nie wszystkie kolumny z nim związane.

Tak, to co zrobiłem, początkowo wybrać tylko odrębne kolumny EmployeeName i umieścić go w temp DataTable dtt.

DataTable dtt = dvFail.DefaultView.ToTable(true, "EmployeeName"); 

drugie stworzyłem kolejny DataTable temp gdzie stawiamy posegregowane wiersze od głównego DataTable dtFail i ustawić nazwy kolumn ręcznie.

DataTable TempDataTable = new DataTable(); 
DataTable dtFailed = new DataTable(); 

Przygotuj kolumny w tabeli DataTable dtFailed.

 if (dtFailed.Columns.Count == 0) 
    { 
      dtFailed.Columns.Add("EmployeeName"); 
      dtFailed.Columns.Add("EmployeeRole"); 
      dtFailed.Columns.Add("Status"); 
      dtFailed.Columns.Add("Date"); 
    } 

pętli poprzez odrębny EmployeeName DTT DataTable i dopasować EmployeeName i utrzymywać, że wybrany first wiersza w TempDataTable. W końcu wszystkie wiersze zostały przeniesione do pliku dtFailed.

 for (int j = 0; j < dtt.Rows.Count; j++) 
    { 
      string EmployeeName = dtt.Rows[j]["EmployeeName"].ToString(); 
      TempDataTable = dvFail.Select("EmployeeName = " + EmployeeName).CopyToDataTable(); 
      dtFailed.Rows.Add(TempDataTable.Rows[0].ItemArray); 
    } 
1

ROZWIĄZANIE 1:

W oparciu o moje rozumienie jest pytanie, musimy wziąć pod uwagę duplikaty oparte na EmployeeName i nie musimy martwić się o innych kolumnach. Jeśli tak jest, to rozwiązanie działa lepiej.

foreach(DataRow r in dtFail.AsEnumerable()) 
    { 
    if (!dt1.AsEnumerable().Any(r1 => r1["EmployeeName"] == r["EmployeeName"])) 
     { 
    // if you don't want to copy entire row create new DataRow 
    // with required fields and add that row. 
     dt1.Rows.Add(r.ItemArray); 
     } 
    } 

jeśli chcesz, możesz odłożyć dt1 z powrotem do dtFail.

Rozwiązanie 2:

Jeśli musimy rozważyć różne wiersze Wolę poniżej rozwiązania.

Powiązane problemy