首页 新闻 赞助 找找看

C# 过滤DataTable中的相同行(gethashcode)

0
悬赏园豆:20 [已关闭问题]

由于没使用到Sql数据库,所以不要说使用Distinct来过滤....

Datatable中的数据格式如下:

编号  日期  源  目标

1    A   1  2

2    B   3  4

3    C   1  2

4    D   5  6

5    E   5  6

怎样过滤掉相同的行,显示效果如下:

 源  目标

 1  2

 3  4

好像gethashcode能实现这样效果,because 我不会,那位大虾指点指点,感激不尽....

 

 

&猪哥靓的主页 &猪哥靓 | 初学一级 | 园豆:75
提问于:2009-05-12 10:05
< >
分享
其他回答(1)
0

下面这个段代码只是根据源来删除相同行。修改下可根据源、目标列一起删除相同行
string keyValue = string.Empty;
int count = 0;
DataView dv = new DataView(dt);
Hashtable dtab = new Hashtable();
DeleteSameRow(ref dv, ref dtab);
foreach (DictionaryEntry de in dtab)
{
         count = int.Parse(de.Key.ToString()) + 2;
          keyValue += "第" + count  + "行(" + de.Value.ToString() + "),";
}
 private void DeleteSameRow(ref DataView dt, ref Hashtable dtable)
    {
        ArrayList indexList = new ArrayList();
        // 找出待删除的行索引
        for (int i = 0; i < dt.Count - 1; i++)
        {
            if (!IsContain(indexList, i))
            {
                for (int j = i + 1; j < dt.Count; j++)
                {
                    if (dt[i]["源"].ToString() == dt[j]["源"].ToString())
                    {
                        if (!dtable.ContainsValue(dt[j]["源"].ToString()))
                            dtable.Add(j, dt[j]["源"].ToString());
                            indexList.Add(j);
                    }
                }
            }
        }
        indexList.Sort();
        // 根据待删除索引列表删除行
        for (int i = indexList.Count - 1; i >= 0; i--)
        {
            int index = Convert.ToInt32(indexList[i]);
            dt.Delete(index);
        }
    }
    bool IsContain(ArrayList indexList, int index)
    {
        for (int i = 0; i < indexList.Count; i++)
        {
            int tempIndex = Convert.ToInt32(indexList[i]);
            if (tempIndex == index)
            {
                return true;
            }
        }
        return false;
    }

sanmin | 园豆:205 (菜鸟二级) | 2009-05-12 11:12
0

你说的相同行,是指行所有单元格都一致,还是只是某标示列相同?

如果是后者,那么你只要在新增行的时候向一个全局变量 list<>对象加入该标示字符,在新增的时候先用list的一个判断重复的方法判断一下,有的话,直接return 。这样就不会重复了。

邢少 | 园豆:10926 (专家六级) | 2009-05-12 18:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册