方法一:
//dt为需要转换的表
//PrimaryKeyColumns为dt中欲不含重复行值的列名
public DataTable GetDistinctPrimaryKeyColumnTable(DataTable dt, string[] PrimaryKeyColumns)
{
DataView dv = dt.DefaultView;
DataTable dtDistinct = dv.ToTable(true, PrimaryKeyColumns);
return dtDistinct;
}
调用:(例)
DataTable dt = GetDistinctPrimaryKeyColumnTable(dt_User, new string[] { "name", "sex"});
注:此方法是必须name和sex都相同的才删除
方法二:
/// <summary>
/// 删除数据表中重复的数据
/// </summary>
/// <param name="dt">数据集</param>
/// <param name="columNum">用来判断的主键列</param>
/// <returns></returns>
private DataTable DelRepeat(DataTable dt, string columNum)
{
//用来存储主键列的数据
ArrayList checkList = new ArrayList();
//定义一个新的数据表
DataTable tempDt = new DataTable();
//源数据表里的列数
int columCount = dt.Columns.Count;
//将新的数据表的架构跟源数据表配置一致
//for (int i = 0; i < columCount; i++)
//{
// tempDt.Columns.Add(new DataColumn("" + i + ""));
//}
tempDt.Columns.Add(new DataColumn("name"));
tempDt.Columns.Add(new DataColumn("sex"));
tempDt.Columns.Add(new DataColumn("address"));
//tempDt.Rows.Count = count;
if (dt.Rows.Count > 0)
{
//将主键列填装到arraylist里
foreach (DataRow dr in dt.Rows)
{
//除去重复的数据
if (!checkList.Contains(dr[columNum].ToString()))
{
checkList.Add(dr[columNum].ToString());
}
}
//用主键列的数据循环判断
foreach (string str in checkList)
{
int num = 0;
//用源数据表里主键列数据跟arraylist里数据匹对
foreach (DataRow dr in dt.Rows)
{
if (str.ToString() == dr[columNum].ToString())
{
//第一次填充tempDt
if (num == 0)
{
DataRow temDr = tempDt.NewRow();
temDr = dr;
tempDt.Rows.Add(temDr.ItemArray);
}
num++;
}
}
}
}
return tempDt;
}
调用:(例)
tblDatas= DelRepeat(tblDatas, "name");
注:此方法是根据指定的字段相同的来删除,不管其他的相同不,如这里的name