1.判断DataTable中数据是否存在重复;
/// <summary>判断DataTable中数据是否存在重复</summary>
/// <param name="dt"></param>
/// <param name="colName"></param>
/// <returns></returns>
public static bool IsReData(DataTable dt, string colName)
{
try
{
if (dt != null && dt.Rows.Count > 0)
{
//对重复的数据进行筛选
Hashtable ht = new Hashtable();
foreach (DataRow dr in dt.Rows)
{
string s = dr[colName].ToString();
if (!ht.Contains(s))
{
ht[s] = dr[colName];
}
else
{
return true;
}
}
}
return false;
}
catch
{
return false;
}
}
2.判断DataTable中指定字段数据是否存在重复;
/// <summary>判断DataTable中指定字段数据是否存在重复</summary>
/// <param name="dt"></param>
/// <param name="colName"></param>
/// <returns></returns>
public static bool IsReDatas(DataTable dt, string[] colName)
{
try
{
bool flag = false;
if (dt != null && dt.Rows.Count > 0)
{
DataTable _dt = dt.Copy();
for (int i = _dt.Rows.Count - 1; i > -1; i--)
{
Hashtable ht = new Hashtable();
for (int j = 0; j < colName.Length; j++)
{
ht[colName[j]] = _dt.Rows[i][colName[j]].ToString();
}
_dt.Rows.RemoveAt(i);
flag = IsReDatasRow(_dt, colName, ht);
if (flag)
{
return flag;
}
}
}
return flag;
}
catch
{
return false;
}
}
private static bool IsReDatasRow(DataTable dt, string[] colName, Hashtable colValue)
{
try
{
if (dt != null && dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
bool flag = true;
for (int j = 0; j < colName.Length; j++)
{
if (!flag)
{
break;
}
if (dt.Rows[i][colName[j]].ToString() == colValue[colName[j]].ToString())
{
flag = true;
}
else
{
flag = false;
}
}
if (flag)
{
return true;
}
}
}
return false;
}
catch
{
return false;
}
}
3.合并两个结构相同的DataTable;
/// <summary>
/// 合并两个结构相同的DataTable
/// </summary>
/// <param name="dt1"></param>
/// <param name="dt2"></param>
/// <returns></returns>
public static DataTable UniteSameFrameDataTable(DataTable dt1, DataTable dt2)
{
try
{
if (dt1 != null && dt1.Rows.Count > 0)
{
if (dt2 != null && dt2.Rows.Count > 0)
{
DataRow[] foundRows = dt2.Select();
for (int i = 0; i < foundRows.Length; i++)
{
dt1.ImportRow(foundRows[i]);
}
}
return dt1.Copy();
}
else
{
return null;
}
}
catch
{
return null;
}
}
4.去掉DataTable中的重复行
/// <summary>
/// 去掉DataTable中的重复行
/// </summary>
/// <param name="dt1"></param>
/// <returns></returns>
public static DataTable RemoveReData(DataTable dt1)
{
try
{
if (dt1 != null && dt1.Rows.Count > 0)
{
DataView myDataView = new DataView(dt1);
string[] strComuns = new string[dt1.Columns.Count];
for (int i = 0; i < dt1.Columns.Count; i++)
{
strComuns[i] = dt1.Columns[i].ColumnName;
}
return myDataView.ToTable(dt1.TableName, true, strComuns);
}
else
{
return null;
}
}
catch
{
return null;
}
}
5.去掉DataTable中的指定字段的重复行
/// <summary>
/// 去掉DataTable中的指定字段的重复行
/// </summary>
/// <param name="dt1"></param>
/// <param name="idColName"></param>
/// <returns></returns>
public static DataTable RemoveReData(DataTable dt1, string[] idColName)
{
try
{
if (dt1 != null && dt1.Rows.Count > 0)
{
//保存临时值
string[] idValue = new string[idColName.Length];
for (int k = 0; k < idValue.Length; k++)
{
idValue[k] = "";
}
for (int i = dt1.Rows.Count; i > 0; i--)
{
//判断是否相同行
bool flag = true;
for (int m = 0; m < idColName.Length; m++)
{
if (dt1.Rows[i - 1][idColName[m].ToString()].ToString().Trim() != idValue[m].ToString().Trim())
{
flag = false;
break;
}
}
if (flag)
{
dt1.Rows.RemoveAt(i - 1);
}
else
{
for (int n = 0; n < idValue.Length; n++)
{
idValue[n] = dt1.Rows[i - 1][idColName[n]].ToString();
}
}
}
return dt1;
}
else
{
return null;
}
}
catch
{
return null;
}
}
6.去掉DataTable中的重复行,并且汇总;
/// <summary>
/// 去掉DataTable中的重复行,并且汇总
/// </summary>
/// <param name="dt1"></param>
/// <param name="idColName">所依据汇总的字段</param>
/// <param name="sumColName">汇总列名</param>
/// <returns></returns>
public static DataTable RemoveReDataAndSum(DataTable dt1,string[] idColName,string[] sumColName)
{
try
{
if (dt1 != null && dt1.Rows.Count > 0)
{
//保存临时值
string[] idValue = new string[idColName.Length];
for (int k = 0; k < idValue.Length; k++)
{
idValue[k] = "";
}
for (int i = dt1.Rows.Count; i > 0; i--)
{
//判断是否相同行
bool flag = true;
for (int m = 0; m < idColName.Length; m++)
{
if (dt1.Rows[i - 1][idColName[m].ToString()].ToString() != idValue[m].ToString())
{
flag = false;
break;
}
}
if (flag)
{
for (int j = 0; j < sumColName.Length; j++)
{
dt1.Rows[i][sumColName[j].ToString()] = Convert.ToInt32(dt1.Rows[i][sumColName[j].ToString()]) + Convert.ToInt32(dt1.Rows[i - 1][sumColName[j].ToString()]);
}
dt1.Rows.RemoveAt(i - 1);
}
else
{
for (int n = 0; n < idValue.Length; n++)
{
idValue[n] = dt1.Rows[i - 1][idColName[n]].ToString();
}
}
}
return dt1;
}
else
{
return null;
}
}
catch
{
return null;
}
}
7.删除dt1中与dt2相同的数据
/// <summary>
/// 删除dt1中与dt2相同的数据
/// </summary>
/// <param name="dt1"></param>
/// <param name="dt2"></param>
/// <param name="idFieldName">主键</param>
/// <returns></returns>
private DataTable DeleteDoubleTableByID(DataTable dt1, DataTable dt2, string idFieldName)
{
try
{
if (dt1 != null)
{
string _id = "";
DataView dataView = dt1.DefaultView;
string filter = "";
foreach (DataRow dr in dt2.Rows)
{
_id += "'" + dr[idFieldName].ToString() + "',";
}
if (_id != "")
{
_id = _id.TrimEnd(',');
}
filter = idFieldName + " not in (" + _id + ")";
dataView.RowFilter = filter;
dt1 = null;
dt1 = dataView.ToTable().Copy();
}
return dt1;
}
catch
{
return null;
}
}
8.dataTable分页;
/// <summary>
/// DateTable的分页操作
/// </summary>
/// <param name="dt">要进行分页的DataTable</param>
/// <param name="currentPageIndex">当前页数</param>
/// <param name="pageSize">一页显示的条数</param>
/// <returns>第pageIndex页的数据</returns>
public static DataTable SetDataTablePage(DataTable dt, int currentPageIndex, int pageSize)
{
if (currentPageIndex == 0)
{
return dt.Copy();
}
DataTable newdt = dt.Clone();
int rowbegin = (currentPageIndex - 1) * pageSize;//当前页的第一条数据在dt中的位置
int rowend = currentPageIndex * pageSize;//当前页的最后一条数据在dt中的位置
if (rowbegin >= dt.Rows.Count)
{
return newdt;
}
if (rowend > dt.Rows.Count)
{
rowend = dt.Rows.Count;
}
DataView dv = dt.DefaultView;
for (int i = rowbegin; i <= rowend - 1; i++)
{
newdt.ImportRow(dv[i].Row);
}
return newdt;
}