/******************************************************************************* * 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 } }