「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.03.14
XML
カテゴリ: C#.NET


DataRowのOldValueを取得するには、通常、DataRowの`AcceptChanges`メソッドが呼び出される前にその変更が行われたかどうかを確認する必要があります。DataRowの`AcceptChanges`メソッドが呼び出されると、DataRowの状態が更新され、新しい値が現在の値として設定され、古い値は削除されます。


以下は、DataRowからOldValueを取得するサンプルコードです。


```csharp

using System;

using System.Data;


class Program

{

    static void Main(string[] args)

    {

        // 例として、DataTableを作成し、1つの行を追加します。

        DataTable table = new DataTable("SampleTable");

        table.Columns.Add("ID", typeof(int));

        table.Columns.Add("Name", typeof(string));


        // DataRowの変更を監視するイベントハンドラを設定します。

        table.RowChanged += Table_RowChanged;


        DataRow row = table.NewRow();

        row["ID"] = 1;

        row["Name"] = "John";

        table.Rows.Add(row);


        // 変更を行います。

        row.BeginEdit();

        row["Name"] = "James";

        row.EndEdit();


        // OldValueを取得します。

        PrintOldValue(row, "Name"); // これは "John" を表示するはずです。


        // DataRowの状態を変更し、AcceptChangesメソッドを呼び出します。

        row.AcceptChanges();


        // OldValueを取得しようとすると、nullが返されます。

        PrintOldValue(row, "Name"); // これは null を表示するはずです。


        Console.ReadLine();

    }


    private static void Table_RowChanged(object sender, DataRowChangeEventArgs e)

    {

        if (e.Action == DataRowAction.Change)

        {

            Console.WriteLine($"Row changed: {e.Row["Name", DataRowVersion.Original]} => {e.Row["Name", DataRowVersion.Current]}");

        }

    }


    private static void PrintOldValue(DataRow row, string columnName)

    {

        object oldValue = row[columnName, DataRowVersion.Original];

        Console.WriteLine($"Old value of {columnName}: {oldValue}");

    }

}

```


このサンプルでは、DataTableに1つの行を追加し、その行の変更を監視します。変更が行われると、`Table_RowChanged`メソッドが呼び出され、変更前の値と変更後の値が表示されます。また、`PrintOldValue`メソッドを使用して、特定の列の古い値を取得して表示します。DataRowの状態が変更され、AcceptChangesメソッドが呼び出されると、古い値はnullになります。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.03.14 04:00:34


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

© Rakuten Group, Inc.
Create a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: