比較2個datatable內容是否相同的方法
DataTable可以通過RowStatus來判斷狀態(tài)是否發(fā)生了改變。但是有些時候我們希望在行狀態(tài)即使為Modified的情況下也不要提示內容發(fā)生了變化,這個時候我們可能就需要自己寫方法去判斷了。比如有一個DataTable中有選擇列的狀態(tài)發(fā)生了變化,但是我在保存時不希望系統(tǒng)判斷DataTable的行狀態(tài)發(fā)生了變化而將數據重新更新到數據庫中。
這樣我們可以將需要判斷DataTable中那些列變化時才需要保存了。以下是比較2個DataTable的內容是否相同的方法:
/// <summary>
/// 比較兩個DataTable內容是否相等,先是比數量,數量相等就比內容
/// </summary>
/// <param name= "dtA "> </param>
/// <param name= "dtB "> </param>
private bool CompareDataTable(DataTable dtA, DataTable dtB)
{
if (dtA.Rows.Count == dtB.Rows.Count)
{
if (CompareColumn(dtA.Columns, dtB.Columns))
{
//比內容
for (int i = 0; i < dtA.Rows.Count; i++)
{
for (int j = 0; j < dtA.Columns.Count; j++)
{
if (!dtA.Rows[i][j].Equals(dtB.Rows[i][j]))
{
return false;
}
}
}
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
/// <summary>
/// 比較兩個字段集合是否名稱,數據類型一致
/// </summary>
/// <param name= "dcA "> </param>
/// <param name= "dcB "> </param>
/// <returns> </returns>
private bool CompareColumn(System.Data.DataColumnCollection dcA, System.Data.DataColumnCollection dcB)
{
if (dcA.Count == dcB.Count)
{
foreach (DataColumn dc in dcA)
{
//找相同字段名稱
if (dcB.IndexOf(dc.ColumnName) > -1)
{
//測試數據類型
if (dc.DataType != dcB[dcB.IndexOf(dc.ColumnName)].DataType)
{
return false;
}
}
else
{
return false;
}
}
return true;
}
else
{
return false;
}
}
相關文章
C#中DataSet、DataTable、DataRow數據的復制方法
這篇文章介紹了C#中DataSet、DataTable、DataRow數據的復制方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07