下面这个段代码只是根据源来删除相同行。修改下可根据源、目标列一起删除相同行
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;
}
你说的相同行,是指行所有单元格都一致,还是只是某标示列相同?
如果是后者,那么你只要在新增行的时候向一个全局变量 list<>对象加入该标示字符,在新增的时候先用list的一个判断重复的方法判断一下,有的话,直接return 。这样就不会重复了。