を使用DataTable.GetChanges()
すると、変更されたすべての行のリストが表示されます。行レベルで同じことを行う組み込みの方法はありますか? ItemArray
ループ内で手動で比較する以外に、変更された列を確認するには?
質問する
6040 次
1 に答える
13
いいえ。
このコードを使用して、値を以前のバージョンと比較できます。
public static class DataRowExtensions
{
private static bool hasCellChanged(DataRow row, DataColumn col)
{
if (!row.HasVersion(DataRowVersion.Original))
{
// Row has been added. All columns have changed.
return true;
}
if (!row.HasVersion(DataRowVersion.Current))
{
// Row has been removed. No columns have changed.
return false;
}
var originalVersion = row[col, DataRowVersion.Original];
var currentVersion = row[col, DataRowVersion.Current];
if (originalVersion == DBNull.Value && currentVersion == DBNull.Value)
{
return false;
}
else if (originalVersion != DBNull.Value && currentVersion != DBNull.Value)
{
return !originalVersion.Equals(currentVersion);
}
return true;
}
public static IEnumerable<DataColumn> GetChangedColumns(this DataRow row)
{
return row.Table.Columns.Cast<DataColumn>()
.Where(col => hasCellChanged(row, col));
}
public static IEnumerable<DataColumn> GetChangedColumns(this IEnumerable<DataRow> rows)
{
return rows.SelectMany(row => row.GetChangedColumns())
.Distinct();
}
public static IEnumerable<DataColumn> GetChangedColumns(this DataTable table)
{
return table.GetChanges().Rows
.Cast<DataRow>()
.GetChangedColumns();
}
}
datatableまたは datarow でどの列が変更されたかを確認します。
例:
DataTable table;
table.GetChangedColumns()
List<DataRow> listOfRows;
listOfRows.GetChangedColumns()
DataRow row;
row.GetChangedColumns()
于 2013-06-16T14:00:15.653 に答える