日期:2014-05-18  浏览次数:20883 次

datatable 去掉重复数据跪求哇下班了回家在线等去
C# code

//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()方法第二个参数只能写一列字段才能去重,但是这样就不能满足我输出是的多

列都有)


------解决方案--------------------
foreach(string s in File.ReadAllLines("")){}判断重复数据
list.Contains
------解决方案--------------------
试试这个:
for (int i = 0; i < dv_All.Table.Rows.Count - 1; i++)
{
for(int j=i+1;j < dv_All.Table.Rows.Count - 1;j++)
{
if (dv_All.Table.Rows[i]["LogInfo"].ToString().Trim() == dv_All.Table.Rows[j]["LogInfo"].ToString().Trim))

dv_All.Table.Rows[j].Delete();
dv_All.Table.AcceptChanges();
}
}
}
------解决方案--------------------
我觉得第一种方法就可以 用Remove()试试
C# code
 
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--;
                }
            }

------解决方案--------------------
C# code


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

------解决方案--------------------
C# code


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 =