C# 使行不同并显示所有列

C# 使行不同并显示所有列,c#,datatable,dataset,dataview,C#,Datatable,Dataset,Dataview,在我的项目中有两个数据表dtFail和dtFailed(dtFailed只有列名声明)dtFail具有重复的“EmployeeName”列值。因此,我采用了dataviewdvFail,并进行了如下代码所示的过程,以使它们区别开来: dtFail 我尝试了以下代码: DataView dvFail = new DataView(dtFail); dtFail = dvFail.ToTable(true, "EmployeeName"); //showing only one col

在我的项目中有两个数据表
dtFail
dtFailed
dtFailed
只有列名声明)
dtFail
具有重复的“EmployeeName”列值。因此,我采用了dataview
dvFail
,并进行了如下代码所示的过程,以使它们区别开来:

dtFail

我尝试了以下代码:

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

如果我真的喜欢下面

   DataView dvFail = new DataView(dtFail);
   dtFail = dvFail.ToTable(true, "EmployeeName","EmployeeRole","Status");
dtFailed(显示但有重复行)

然后数据表
dtFailed
也存储重复的“EmployeeName”

请帮忙
提前感谢。

尝试此查询-

DataTable distinctTable = originalTable.DefaultView.ToTable( /*distinct*/ true);
欲了解更多信息,请点击下面的链接-


我希望这会对你有所帮助。

我不确定这是否有用。我从你的问题中了解到,你希望
EmployeeName
与其他栏目无关。但是,如果您执行ToTable,并打开distinct标志,它将给出所有不同的行,而不管其中涉及多少列。因此,如果你只提到EmployeeName,它显然会给出不同的EmployeeName,而不是所有与之相关的列

所以,这就是我所做的,最初只选择不同的
EmployeeName
列,并将其放入临时数据表dtt中

DataTable dtt = dvFail.DefaultView.ToTable(true, "EmployeeName");
其次,我创建了另一个临时数据表,我们将主数据表dtFail中的隔离行放入其中,并手动设置列名

DataTable TempDataTable = new DataTable();
DataTable dtFailed = new DataTable();
准备dtFailed数据表中的列

     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中的第一行。最后,传输到DTP的所有行都失败了

     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);
     }
for(int j=0;j
解决方案1:

根据我理解的问题,我们需要考虑基于雇员名的重复,我们不必担心其他列。如果是这种情况,下面的解决方案效果更好

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

需要更多信息-您可以粘贴一些示例数据,显示dvFail表中的数据吗?@SachinShanbhag检查我编辑的问题