/*******************************************************************************
* Copyright(c) 2012 dongke All rights reserved. / Confidential
* 类的信息:
* 1.程序名称:DataJudge.cs
* 2.功能描述:对各种数据集数据是否变化的判断类
* 编辑履历:
* 作者 日期 版本 修改内容
* 欧阳涛 2012/06/07 1.00 新建
*******************************************************************************/
using System;
using System.Data;
using System.Windows.Forms;
namespace Dongke.IBOSS.PRD.Basics.Library
{
///
/// 对各种数据集数据是否变化的判断类
///
public class DataJudge
{
#region IsChange函数
///
/// 判断DataSet里面的内容是否发生了改变
///
/// Modified状态的情况下,编辑前与编辑后的信息进行比较,查看是否有差异。
///
/// 需要判断的数据集
///
/// True:数据集发生了改变
/// False:数据集未发生改变
///
public static bool IsChange(DataSet dataSet)
{
// 数据集为空的情况下,返回False
if (dataSet == null)
{
return false;
}
// 将编辑中的行执行EndEdit结束编辑状态
foreach (DataTable dataTable in dataSet.Tables)
{
foreach (DataRow dataRow in dataTable.Rows)
{
dataRow.EndEdit();
}
}
// 取得数据集中变化的部分,如果为空返回False
DataSet setChanges = dataSet.GetChanges();
if (setChanges == null)
{
return false;
}
// 变化部分的数据表有改变的情况下返回True
foreach (DataTable dataTable in setChanges.Tables)
{
if (IsChange(dataTable))
{
return true;
}
}
return false;
}
///
/// 判断DataTable里面的内容是否发生了改变
///
/// 需要判断的数据集
///
/// True:DataTable发生了改变
/// False:DataTable未发生改变
///
public static bool IsChange(DataTable dataTable)
{
// 数据表为空的情况下,返回false
if (dataTable == null)
{
return false;
}
// 数据表中有新增数据,返回True
if (dataTable.GetChanges(DataRowState.Added) != null)
{
return true;
}
// 数据表中有删除的数据,返回True
if (dataTable.GetChanges(DataRowState.Deleted) != null)
{
return true;
}
// 判断每一行是否有被编辑过的数据
DataTable tableChanges = dataTable.GetChanges(DataRowState.Modified);
if (tableChanges != null)
{
foreach (DataRow dataRow in tableChanges.Rows)
{
if (IsChange(dataRow))
{
return true;
}
}
}
return false;
}
///
/// 判断DataRow数据集里面的内容是否发生了改变
///
/// 需要判断的DataRow数据集
///
/// True:DataRow发生了改变
/// False:DataRow未发生改变
///
public static bool IsChange(DataRow dataRow)
{
// DataRow为空的情况,返回False
if (dataRow == null)
{
return false;
}
// DataRow的行状态为增加或者删除的状态,返回True
if (dataRow.RowState == DataRowState.Added
|| dataRow.RowState == DataRowState.Deleted)
{
return true;
}
// DataRow的状态为编辑状态,分别判断每一行的每一列是否有改变
if (dataRow.RowState == DataRowState.Modified)
{
foreach (DataColumn dataColumn in dataRow.Table.Columns)
{
if (dataColumn.ReadOnly)
{
continue;
}
if (!Utility.Compare(dataRow[dataColumn, DataRowVersion.Original],
dataRow[dataColumn, DataRowVersion.Current]))
{
return true;
}
}
}
return false;
}
#endregion
}
}