次の方法で共有


DataTable.ColumnChanging イベント

DataRow 内の指定した DataColumn の値が変更されているときに発生します。

Public Event ColumnChanging As DataColumnChangeEventHandler
[C#]
public event DataColumnChangeEventHandler ColumnChanging;
[C++]
public: __event DataColumnChangeEventHandler* ColumnChanging;

[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。

イベント データ

イベント ハンドラが、このイベントに関連するデータを含む、DataColumnChangeEventArgs 型の引数を受け取りました。次の DataColumnChangeEventArgs プロパティには、このイベントの固有の情報が記載されます。

プロパティ 説明
Column 値が変化する DataColumn を取得します。
ProposedValue 列の提示された新しい値を取得または設定します。
Row 値が変化する列の DataRow を取得します。

解説

詳細については、「 DataTable イベントの使用 」を参照してください。

使用例

 
Private Shared Sub DataTableColumnChanging()
    Dim custTable As DataTable = New DataTable("Customers")
    ' add columns
    custTable.Columns.Add( "id", Type.GetType("System.Int32") )
    custTable.Columns.Add( "name", Type.GetType("System.String") )
    custTable.Columns.Add( "address", Type.GetType("System.String") )

    ' set PrimaryKey
    custTable.Columns( "id" ).Unique = true
    custTable.PrimaryKey = New DataColumn() { custTable.Columns("id") }

    ' add a ColumnChanging event handler for the table.
    AddHandler custTable.ColumnChanging, New DataColumnChangeEventHandler( AddressOf Column_Changing )


    ' add ten rows
    Dim id As Integer
    For id = 1 To 10
        custTable.Rows.Add( _
            New Object() { id, string.Format("customer{0}", id), string.Format("address{0}", id) } )
    Next
    
    custTable.AcceptChanges()

    ' change the name column in all the rows
    Dim row As DataRow
    For Each row In custTable.Rows 
        row("name") = string.Format( "vip{0}", row("id") )
    Next

End Sub

Private Shared Sub Column_Changing(sender As Object, e As DataColumnChangeEventArgs)
    Console.WriteLine( "Column_Changing Event: name={0}; Column={1}; proposed name={2}", _
        e.Row("name"), e.Column.ColumnName, e.ProposedValue) 
End Sub

[C#] 
private static void DataTableColumnChanging()
{
    DataTable custTable = new DataTable("Customers");
    // add columns
    custTable.Columns.Add( "id", typeof(int) );
    custTable.Columns.Add( "name", typeof(string) );
    custTable.Columns.Add( "address", typeof(string) );

    // set PrimaryKey
    custTable.Columns[ "id" ].Unique = true;
    custTable.PrimaryKey = new DataColumn[] { custTable.Columns["id"] };

    // add a ColumnChanging event handler for the table.
    custTable.ColumnChanging += new DataColumnChangeEventHandler( Column_Changing );


    // add ten rows
    for( int id=1; id<=10; id++ )
    {
        custTable.Rows.Add( 
            new object[] { id, string.Format("customer{0}", id), string.Format("address{0}", id) } );
    }
    
    custTable.AcceptChanges();

    // change the name column in all the rows
    foreach( DataRow row in custTable.Rows )
    {
        row["name"] = string.Format( "vip{0}", row["id"] );
    }

}

private static void Column_Changing( object sender, DataColumnChangeEventArgs e )
{
    Console.WriteLine( "Column_Changing Event: name={0}; Column={1}; proposed name={2}", 
        e.Row["name"], e.Column.ColumnName, e.ProposedValue );
}

[C++] 

public:
    static void DataTableColumnChanging() {
    DataTable* custTable = new DataTable(S"Customers");
    // add columns
    custTable->Columns->Add(S"id", __typeof(int));
    custTable->Columns->Add(S"name", __typeof(String));
    custTable->Columns->Add(S"address", __typeof(String));

    // set PrimaryKey
    custTable->Columns->Item[ S"id" ]->Unique = true;
    DataColumn* ColumnArray[] = { custTable->Columns->Item[S"id"] };
    custTable->PrimaryKey = ColumnArray;

    // add a ColumnChanging event handler for the table.
    custTable->ColumnChanging += new DataColumnChangeEventHandler(0, Column_Changing);

    // add ten rows
    for (int id=1; id<=10; id++) {
        Object* temp0 [] = {__box(id), String::Format(S"customer {0}", __box(id)), String::Format(S"address {0}", __box(id)) };
        custTable->Rows->Add(temp0);
    }

    custTable->AcceptChanges();

    // change the name column in all the rows
    System::Collections::IEnumerator* myEnum = custTable->Rows->GetEnumerator();
    while (myEnum->MoveNext()) {
        DataRow* row = __try_cast<DataRow*>(myEnum->Current);
        row->Item[S"name"] = String::Format(S"vip {0}", row->Item[S"id"]);
    }

}

public:
    static void Column_Changing(Object* sender, System::Data::DataColumnChangeEventArgs* e) {
        Console::WriteLine(S"Column_Changing Event: name= {0}; Column= {1}; proposed name= {2}",
        e->Row->Item[S"name"], e->Column->ColumnName, e->ProposedValue);
    }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

DataTable クラス | DataTable メンバ | System.Data 名前空間