7

Winformsアプリケーションでは、すべての変更を datagrid (datatable)に記録する必要があります。言い換えれば、ロードされたので、すべての変更を取得したいのです。このために、Datatable.GetChanges()を使用したいと思います。GetChanges()を使用すると、保留中の変更がある元の DataSet 内のすべての行のコピーを含むデータテーブルを取得できます。

私の質問は、変更の追加情報を取得することも可能かどうかです。たとえば、追加または削除されたか、または更新されただけかを知りたいとします。行が更新された場合、どのセルが更新されたのか知りたいですか? このすべての情報をすばやく取得する方法はありますか、または元のデータテーブルと行ごとに詳細な比較を行う必要がありますか?

それとも、RowStateを使用してすべての変更を取得する方がよいでしょうか?

4

2 に答える 2

11

行の追加・削除はRowStateをチェック

行 (別名セル) の各項目について、DataRowVersionを確認します

        foreach (DataRow dr in dt.Rows)
        {
            if (dr.RowState == DataRowState.Modified)
            {
                var changedCols = new List<DataColumn>();
                foreach (DataColumn dc in dt.Columns)
                {
                    if (!dr[dc, DataRowVersion.Original].Equals(
                         dr[dc, DataRowVersion.Current])) /* skipped Proposed as indicated by a commenter */
                    {
                        changedCols.Add(dc);
                    }
                }
                // now handle the changedCols list
            }
        }
于 2012-08-06T15:10:13.387 に答える
2

DataRow結果の DataTable のそれぞれにはRowState、行が追加、削除、または更新されたかどうかを示すプロパティ セットがあります。

個々のセルが更新情報を提供するとは思いませんが、行ごとに追跡されるだけです。

于 2012-08-06T14:54:44.420 に答える