只能用循环了,以前做项目的时候曾经这样做过,其实删除不难,关键是删除了不想要的行之后,应该怎么处理,请仔细看注释。在此假如你的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不自减就检查不到新的下行的记录!
}
}
}
}
{
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不自减就检查不到新的下行的记录!
}
}
}
}
select distinct ...
可是你写的注释太多了,
我反而还看不明白!
不过我会好好研究的!
可是我DataGrid中的数值不是从数据库中直接读取的,
是经过处理之后得到的,
看来不可以用select distinct ...