http://community.csdn.net/Expert/topic/5492/5492712.xml?temp=.5467951
我是用
DataView dv = new DataView(dt);
dv.Sort = "cloumn1 desc";
for (Int32 i = dv.Count - 1; i >= 1; i--)
{
   if (dv[i].Row[1].ToString() == dv[i - 1].Row[1].ToString())
    {
        dv.Delete(i);
    }
}虽然这样可以得到那些我要的行
但是dv.Table就不能得到原来的行
这里是因为dv.Delete(i);
已经把行删除了所以我想问如何不用我上面的写法得到一个DataView而且不改变原来的
DataTable数据PS:这里不要Copy 多出一个DataTable
要是这个DataTable里面操作实现我上面要的
我要取出
1        A        A        1         2        6     
2        B        B        2         1        3谢谢

解决方案 »

  1.   

    DataTable 里面加个 column, 比如说"delete", DataView的filter加上判断这个列的条件,
    以下没试过,不知道可不可以, 主要是filter那里, 
    is null 忘记了可不可以, 不可以就找其他办法, 比如说默认值.. 实在不行加个循环初始值..DataTable dt= GetStructAndData();  // 建立DataTabledt.Columns.Add("delete", typeof(bool));DataView dv = new DataView(dt);
    dv.Sort = "cloumn1 desc";
    dv.Filter = "delete is null or delete = 0"
    for (Int32 i = dv.Count - 1; i >= 1; i--)
    {
       if (dv[i].Row[1].ToString() == dv[i - 1].Row[1].ToString())
        {
            dv[i]["delete"] = false;
        }
    }
      

  2.   

    設計一個過渡二維數組來保存刪除前的DataTable,第一個字符串型一個布爾型,字符串型保存第一列字符,布爾型保存刪除標識。
      

  3.   

    我看一楼的方法行,多加个列,比如flag,如果是第一次出现就设置为true,如果不是则设置成False,如果要取你的数据,只需要找Flag是true的就OK了。