日期:2014-05-18 浏览次数:21093 次
//OK的话分全部给你,虽然不多
//有一个datatable里面存放,文件名称(FileName),日志信息(LogInfo),所在文件行号(InFileNum)
//eg:
// FileName LogInfo InFileNum
// a.txt log1 1
// a.txt log1 2
// b.txt log2 1
// c.txt log3 10
// c.txt log3 11
//我想得到结果是
// FileName LogInfo InFileNum
// a.txt log1 1
// b.txt log2 1
// c.txt log3 10
//也就是每一个日志出第一次出现的文件及所在文件内的行号现在已经用了
//方法一:
for (int i = 0; i < dv_All.Table.Rows.Count - 1; i++)
{
if (dv_All.Table.Rows[i]["LogInfo"].ToString().Trim() == dv_All.Table.Rows[i+ 1]["LogInfo"].ToString().Trim))
{
dv_All.Table.Rows[i].Delete();
dv_All.Table.AcceptChanges();
i--;
}
}
// 上面这种依然有重复数据
//方法二:
DataTable dv_All = dv_All.Table.DefaultView.ToTable(true, new string[] { "FileName", "LogInfo", "InFileNum"
}).DefaultView;
// 上面这种同第一种一样有重复数据
DataTable dv_All = dv_All.Table.DefaultView.ToTable(true, new string[] {"LogInfo"}).DefaultView;
//这个没有但是只能返回有日志信息(因为dataview的ToTable()方法第二个参数只能写一列字段才能去重,但是这样就不能满足我输出是的多
列都有)
for (int i = 0; i < dv_All.Table.Rows.Count - 1; i++)
{
if (dv_All.Table.Rows[i]["LogInfo"].ToString().Trim() == dv_All.Table.Rows[i+ 1]["LogInfo"].ToString().Trim))
{
dv_All.Table.Rows[i].Delete(); //改成 dv_All.Table.Rows.RemoveAt(i);
dv_All.Table.AcceptChanges();
i--;
}
}
------解决方案--------------------
public class File_info
{
//这里为了简便就不用属性了啊
public string FileName;
public string LogoInfo;
public string InfileNum;
}
DataTable dt = new DataTable();
List<File_info> list = new List<File_info>();
foreach(DataRow row in dt.Rows)
{
//初始化实体
File_info f = new File_info();
f.FileName = row["FileInfo"].ToString();
f.LogoInfo = row["LogoInfo"].ToString();
f.InfileNum = row["InfileNum"].ToString();
if (!list.Contains(f))
{
list.Add(f);
}
}
------解决方案--------------------
public class File_info
{
//这里为了简便就不用属性了啊
public string FileName;
public string LogoInfo;
public string InfileNum;
}
DataTable dt = new DataTable();
List<File_info> list = new List<File_info>();
foreach(DataRow row in dt.Rows)
{
//初始化实体
File_info f =