2012-10-20 4 views
12

私のプロジェクトには、dtFaildtFailedの2つのデータセットがあります(列名の宣言だけにはがあります)。 dtFailに重複した「EmployeeName」列の値があります。だから私は、データビューdvFailを取り、次のコードに示すように、それらが別個にするためにプロセスをした:行を区別してすべての列を表示

dtFail

enter image description here

私は以下のコードを試みた:

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

dtFailed1列のみ

enter image description here

私は

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

以下

のようにその後のDataTable dtFailedは「重複し保存している(を示すが、重複行で)

enter image description here

をdtFailedない場合EmployeeName "にもなります。

お願いします
ありがとうございました。

+0

詳細情報が必要 - dvFailテーブルのデータが何であるかを示すサンプルデータを貼り付けることはできますか? –

+0

@SachinShanbhag私の編集した質問をチェックする –

答えて

0

私はそれが参考になるかどうか分からない。私の質問からは、EmployeeNameが他の列とは無関係であることが必要であると思っています。しかし、ToTableを実行してdistinctフラグをオンにすると、すべての個別の行が表示されますが、そこに含まれる列の数は関係ありません。だから、EmployeeNameだけを言えば明らかにそれに関連するすべての列ではなく、別個のEmployeeNamesを与えます。

だから、私がやったことは、最初に別のEmployeeNameカラムだけを選択し、それを一時DataTable dttに入れます。

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

第二に、私たちは、メインのDataTable dtFailから隔離された行を入れて、手動で列名を設定し、別の一時のDataTableを作成しました。

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

dtFailed DataTableに列を準備します。

別個EmployeeName DTTデータテーブルを介し
 if (dtFailed.Columns.Count == 0) 
    { 
      dtFailed.Columns.Add("EmployeeName"); 
      dtFailed.Columns.Add("EmployeeRole"); 
      dtFailed.Columns.Add("Status"); 
      dtFailed.Columns.Add("Date"); 
    } 

ループと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

SOLUTION 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に戻すことができます。

SOLUTION 2:

私たちは、私は解決策の下好む個別の行を検討する必要がある場合。

var temp = dtFail.AsEnumerable().Distinct(); 
dtFail = temp.CopyToDataTable(); 
関連する問題