2012-10-20 77 views
12

在我的項目中有兩個數據表dtFaildtFaileddtFailed除了列名稱聲明之外什麼也沒有)。 dtFail具有重複的「EmployeeName」列值。所以我花了數據視圖dvFail,做的過程中,使他們不同,如​​圖下面的代碼:使行不同,並顯示所有列

dtFail

enter image description here

我嘗試下面的代碼:

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

dtFailed只有一列

enter image description here

如果我喜歡下面

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

dtFailed示出,但與重複行

enter image description here

然後,數據表dtFailed正在存儲複製「 EmployeeName「。

請提前幫助
感謝。

+0

需要更多信息 - 您可以粘貼一些示例數據,顯示dvFail表中的數據是什麼? –

+0

@SachinShanbhag檢查我編輯的問題 –

回答

0

我不知道這將有助於與否。據我從你的問題得到你想要EmployeeName是不同的無關的其他列。但是,如果你ToTable並開啓不同的標誌,它會給所有不同行,無所謂多少列參與那裏。所以如果你只提到EmployeeName,它顯然會給你不同的EmployeeNames,而不是所有與它相關的列。

所以,這就是我做什麼,最初只選擇不同EmployeeName列,並把它變成一個臨時的DataTable DTT。

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

其次我已經創建,我們把隔離行從主數據表dtFail和手動設置列名稱的另一個臨時數據表。

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

準備dtFailed DataTable中的列。

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

循環遍歷不同EmployeeName DTT數據表並匹配EmployeeName並保持,在TempDataTable選定first行。最後將所有行轉移到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

解決方案1:

基於這個問題我的理解是,我們需要考慮基於EmployeeName重複,我們不必擔心其他列。如果情況如此,解決方案效果會更好。

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

如果你想要你可以把dt1放回dtFail。

解決方案2:

如果我們需要考慮不同的行我更喜歡下面的解決方案。

var temp = dtFail.AsEnumerable().Distinct(); 
dtFail = temp.CopyToDataTable();