只能用循环了,以前做项目的时候曾经这样做过,其实删除不难,关键是删除了不想要的行之后,应该怎么处理,请仔细看注释。在此假如你的DataGrid的数据源是一个DataView,你指的列的名字是“CODE”。实现方法:两个指针(这里的指针不是C语言中的指针),第一个放在第一行,另外一个自上而下查找并删除与第一个相同的记录,然后第一个指针下移放在第二行,另外一个继续相同的工作,依次类推.for(int j=0;j<this.BindingContext[this.dataView1].Count;j++)
{
   row = this.BindingContext[this.dataView1].Count;
   //此处不可以用row=this.DataSet.Tables[0].Rows.Count,因为数据集中该值不变
   int del=0;
   //用来记录删除的行数,因为删除之后row的值就减小,
   //此时第二层循环再用k<row显然不可以,就超出了界限了
   if(row-j>=1)
   {
      DataRowView code= this.dataView1[j];
      for(int k=j+1;k<row-del;k++)
      {
DataRowView drv = this.dataView1[k];
if(drv["CODE"].ToString()==code["CODE"].ToString())
{    this.BindingContext[this.dataView1].RemoveAt(k);
   del++;
            //删除的行数必须自增
   k--;
            //k自减的目的:删除重复行之后原来的下下行变成了下行,
            //若k不自减就检查不到新的下行的记录!
}

        }
    }
}

解决方案 »

  1.   

    sql语句中把重复的去掉不就行了吗?
    select distinct ...
      

  2.   

    真的非常感谢zhuohs(凌九霄) 大虾,
    可是你写的注释太多了,
    我反而还看不明白!
    不过我会好好研究的!
      

  3.   

    To:jiezhi(西域浪子) 大虾:
    可是我DataGrid中的数值不是从数据库中直接读取的,
    是经过处理之后得到的,
    看来不可以用select distinct ...