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”列值。因此,我采用了dataviewdvFail
,并进行了如下代码所示的过程,以使它们区别开来:
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检查我编辑的问题