Megosztás a következőn keresztül:


DataTable-események kezelése

Az DataTable objektum egy alkalmazás által feldolgozható eseménysorozatot biztosít. Az alábbi táblázat az eseményeket ismerteti DataTable .

Esemény Leírás
Initialized A metódus meghívása DataTable után EndInit következik be. Ez az esemény elsősorban a tervezési idejű forgatókönyvek támogatására szolgál.
ColumnChanged Egy érték sikeres módosítása után következik be.DataColumn
ColumnChanging Akkor fordul elő, ha egy érték elküldve lett egy DataColumn.
RowChanged Az érték vagy a RowState benne lévő DataTable értékek DataRow sikeres módosítása után DataColumn következik be.
RowChanging Akkor fordul elő, ha módosítást küldtek el egy DataColumn értékre vagy egy DataRow értékre vonatkozóan RowState a DataTable.
RowDeleted A azt követően következik be, hogy a DataRow fájlban a rendszer a következőként van megjelölve: .</a0DataTable>
RowDeleting A jelölés előtt DataRow következik be.DataTableDeleted
TableCleared A metódus meghívása Clear után történik, amely sikeresen törölte az DataTable összes DataRow.
TableClearing A metódus meghívása Clear után, de a Clear művelet megkezdése előtt következik be.
TableNewRow Akkor fordul elő, ha a metódus metódusára irányuló hívás NewRowDataTablelétrehoz egy újatDataRow.
Disposed Akkor fordul elő, ha az DataTable .Disposed Öröklődve innen MarshalByValueComponent: .

Feljegyzés

A sorok hozzáadására vagy törlésére vonatkozó legtöbb művelet nem emeli ki az eseményeket és ColumnChanging az ColumnChanged eseményeket. A ReadXml metódus azonban nem hoz létre ColumnChanged és ColumnChanging eseményeket, kivéve, ha az DiffGramXmlReadMode olvasás DiffGramalatt álló XML-dokumentum értéke vagy beállítása Auto .

Figyelmeztetés

Adatsérülés akkor fordulhat elő, ha olyan adat módosul DataSet , amelyből az RowChanged esemény keletkezik. Ilyen adatsérülés esetén a rendszer nem emel kivételt.

A Constraints tulajdonság tartalmaz egy példányt ConstraintCollection . Az ConstraintCollection osztály egy eseményt CollectionChanged tesz közzé. Ez az esemény akkor aktiválódik, ha kényszert adnak hozzá, módosítanak vagy eltávolítanak a ConstraintCollectionrendszerből.

A Columns tulajdonság tartalmaz egy példányt DataColumnCollection . Az DataColumnCollection osztály egy eseményt CollectionChanged tesz közzé. Ez az esemény akkor aktiválódik, amikor hozzáadnak, DataColumn módosítanak vagy eltávolítanak egy elemet a DataColumnCollectionprogramból. Az eseményt kiváltó módosítások közé tartozik az oszlop nevének, típusának, kifejezésének vagy sorszámának módosítása.

Egy Tables példány tulajdonsága DataSet tartalmaz egy példányt DataTableCollection . Az DataTableCollection osztály egy és egy eseményt CollectionChanging is CollectionChanged elérhetővé tesz. Ezek az események akkor aktiválódik, ha a rendszer hozzáad vagy DataTable eltávolít egy elemet a DataSetprogramból.

DataRows A módosítások eseményt is kiválthatnak egy társított DataVieweseményhez. Az DataView osztály egy olyan eseményt ListChanged tesz közzé, amely akkor aktiválódik, amikor egy DataColumn érték megváltozik, vagy amikor a nézet összetétele vagy rendezési sorrendje megváltozik. Az DataRowView osztály egy eseményt PropertyChanged tesz közzé, amely egy társított DataColumn érték változásakor aktiválódik.

Műveletek sorrendje

Íme a műveletek sorozata, amelyek a DataRow hozzáadás, a módosítás vagy a törlés során következnek be:

  1. Hozza létre a javasolt rekordot, és alkalmazza a módosításokat.

  2. Ellenőrizze a nem kifejezésoszlopokra vonatkozó korlátozásokat.

  3. Szükség szerint emelje fel az RowChanging eseményeket vagy RowDeleting eseményeket.

  4. Állítsa be a javasolt rekordot az aktuális rekordra.

  5. Frissítse a társított indexeket.

  6. Események létrehozása ListChanged a társított DataView objektumokhoz és PropertyChanged eseményekhez a társított DataRowView objektumokhoz.

  7. Értékelje ki az összes kifejezésoszlopot, de késleltetje az oszlopokra vonatkozó korlátozások ellenőrzését.

  8. Eseményeket hozhat létre ListChanged a kifejezésoszlopok kiértékelése által érintett társított DataViewDataRowView objektumokhoz és PropertyChanged eseményekhez.

  9. Igény szerint emelhet RowChanged vagy RowDeleted eseményeket is.

  10. Ellenőrizze a kifejezésoszlopokra vonatkozó korlátozásokat.

Feljegyzés

A kifejezésoszlopok módosításai soha nem emelnek DataTable eseményeket. A kifejezésoszlopok módosításai csak emelnek és DataRowView eseményeket tartalmaznakDataView. A kifejezésoszlopok több más oszloptól is függhetnek, és egyetlen DataRow művelet során többször is kiértékelhetők. Minden kifejezés kiértékelése eseményeket hoz létre, és egyetlen DataRow művelet több és PropertyChanged eseményt ListChanged is létrehozhat, ha a kifejezésoszlopok érintettek, akár több eseményt is ugyanabban a kifejezésoszlopban.

Figyelmeztetés

Ne dobja az NullReferenceExceptionRowChanged eseménykezelőbe. Ha a rendszer egy NullReferenceException eseményen DataTablebelül RowChanged dob egy elemet, akkor a DataTable rendszer megsérül.

Példa

Az alábbi példa bemutatja, hogyan hozhat létre eseménykezelőket a RowChanged, RowChanging, , RowDeleted, ColumnChangedRowDeleting, ColumnChanging, TableNewRowTableCleared, és TableClearing eseményekhez. Minden eseménykezelő megjeleníti a kimenetet a konzolablakban, amikor aktiválódik.

static void DataTableEvents()
{
    DataTable table = new("Customers");
    // Add two columns, id and name.
    table.Columns.Add("id", typeof(int));
    table.Columns.Add("name", typeof(string));

    // Set the primary key.
    table.Columns["id"].Unique = true;
    table.PrimaryKey = new DataColumn[] { table.Columns["id"] };

    // Add a RowChanged event handler.
    table.RowChanged += Row_Changed;

    // Add a RowChanging event handler.
    table.RowChanging += Row_Changing;

    // Add a RowDeleted event handler.
    table.RowDeleted += Row_Deleted;

    // Add a RowDeleting event handler.
    table.RowDeleting += Row_Deleting;

    // Add a ColumnChanged event handler.
    table.ColumnChanged +=
        Column_Changed;

    // Add a ColumnChanging event handler.
    table.ColumnChanging +=
        Column_Changing;

    // Add a TableNewRow event handler.
    table.TableNewRow +=
        Table_NewRow;

    // Add a TableCleared event handler.
    table.TableCleared +=
        Table_Cleared;

    // Add a TableClearing event handler.
    table.TableClearing +=
        Table_Clearing;

    // Add a customer.
    DataRow row = table.NewRow();
    row["id"] = 1;
    row["name"] = "Customer1";
    table.Rows.Add(row);

    table.AcceptChanges();

    // Change the customer name.
    table.Rows[0]["name"] = "ChangedCustomer1";

    // Delete the row.
    table.Rows[0].Delete();

    // Clear the table.
    table.Clear();
}

static void Row_Changed(object sender, DataRowChangeEventArgs e) =>
    Console.WriteLine("Row_Changed Event: name={0}; action={1}",
        e.Row["name"], e.Action);

static void Row_Changing(object sender, DataRowChangeEventArgs e) =>
    Console.WriteLine("Row_Changing Event: name={0}; action={1}",
        e.Row["name"], e.Action);

static void Row_Deleted(object sender, DataRowChangeEventArgs e) =>
    Console.WriteLine("Row_Deleted Event: name={0}; action={1}",
        e.Row["name", DataRowVersion.Original], e.Action);

static void Row_Deleting(object sender,
DataRowChangeEventArgs e) =>
    Console.WriteLine("Row_Deleting Event: name={0}; action={1}",
        e.Row["name"], e.Action);

static void Column_Changed(object sender, DataColumnChangeEventArgs e) =>
    Console.WriteLine("Column_Changed Event: ColumnName={0}; RowState={1}",
        e.Column.ColumnName, e.Row.RowState);

static void Column_Changing(object sender, DataColumnChangeEventArgs e) =>
    Console.WriteLine("Column_Changing Event: ColumnName={0}; RowState={1}",
        e.Column.ColumnName, e.Row.RowState);

static void Table_NewRow(object sender,
    DataTableNewRowEventArgs e) =>
    Console.WriteLine("Table_NewRow Event: RowState={0}",
        e.Row.RowState.ToString());

static void Table_Cleared(object sender, DataTableClearEventArgs e) =>
    Console.WriteLine("Table_Cleared Event: TableName={0}; Rows={1}",
        e.TableName, e.Table.Rows.Count.ToString());

static void Table_Clearing(object sender, DataTableClearEventArgs e) =>
    Console.WriteLine("Table_Clearing Event: TableName={0}; Rows={1}",
        e.TableName, e.Table.Rows.Count.ToString());
Private Sub DataTableEvents()

    Dim table As New DataTable("Customers")
    ' Add two columns, id and name.
    table.Columns.Add("id", Type.GetType("System.Int32"))
    table.Columns.Add("name", Type.GetType("System.String"))

    ' Set the primary key.
    table.Columns("id").Unique = True
    table.PrimaryKey = New DataColumn() {table.Columns("id")}

    ' Add a RowChanged event handler.
    AddHandler table.RowChanged, _
           New DataRowChangeEventHandler(AddressOf Row_Changed)

    ' Add a RowChanging event handler.
    AddHandler table.RowChanging, _
           New DataRowChangeEventHandler(AddressOf Row_Changing)

    ' Add a RowDeleted event handler.
    AddHandler table.RowDeleted, New _
           DataRowChangeEventHandler(AddressOf Row_Deleted)

    ' Add a RowDeleting event handler.
    AddHandler table.RowDeleting, New _
           DataRowChangeEventHandler(AddressOf Row_Deleting)

    ' Add a ColumnChanged event handler.
    AddHandler table.ColumnChanged, _
           New DataColumnChangeEventHandler(AddressOf Column_Changed)

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

    ' Add a TableNewRow event handler.
    AddHandler table.TableNewRow, New _
           DataTableNewRowEventHandler(AddressOf Table_NewRow)

    ' Add a TableCleared event handler.
    AddHandler table.TableCleared, New _
           DataTableClearEventHandler(AddressOf Table_Cleared)

    ' Add a TableClearing event handler.
    AddHandler table.TableClearing, New _
           DataTableClearEventHandler(AddressOf Table_Clearing)

    ' Add a customer.
    Dim row As DataRow = table.NewRow()
    row("id") = 1
    row("name") = "Customer1"
    table.Rows.Add(row)

    table.AcceptChanges()

    ' Change the customer name.
    table.Rows(0).Item("name") = "ChangedCustomer1"

    ' Delete the row.
    table.Rows(0).Delete()

    ' Clear the table.
    table.Clear()
End Sub


Private Sub Row_Changed(ByVal sender As Object, _
    ByVal e As DataRowChangeEventArgs)
    Console.WriteLine("Row_Changed Event: name={0}; action={1}", _
     e.Row("name"), e.Action)
End Sub

Private Sub Row_Changing(ByVal sender As Object, _
    ByVal e As DataRowChangeEventArgs)
    Console.WriteLine("Row_Changing Event: name={0}; action={1}", _
     e.Row("name"), e.Action)
End Sub

Private Sub Row_Deleted(ByVal sender As Object, _
    ByVal e As DataRowChangeEventArgs)
    Console.WriteLine("Row_Deleted Event: name={0}; action={1}", _
     e.Row("name", DataRowVersion.Original), e.Action)
End Sub

Private Sub Row_Deleting(ByVal sender As Object, _
    ByVal e As DataRowChangeEventArgs)
    Console.WriteLine("Row_Deleting Event: name={0}; action={1}", _
       e.Row("name"), e.Action)
End Sub

Private Sub Column_Changed(ByVal sender As Object, _
    ByVal e As DataColumnChangeEventArgs)
    Console.WriteLine("Column_Changed Event: ColumnName={0}; RowState={1}", _
       e.Column.ColumnName, e.Row.RowState)
End Sub

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

Private Sub Table_NewRow(ByVal sender As Object, _
ByVal e As DataTableNewRowEventArgs)
    Console.WriteLine("Table_NewRow Event: RowState={0}", _
       e.Row.RowState.ToString())
End Sub

Private Sub Table_Cleared(ByVal sender As Object, _
    ByVal e As DataTableClearEventArgs)
    Console.WriteLine("Table_Cleared Event: TableName={0}; Rows={1}", _
       e.TableName, e.Table.Rows.Count.ToString())
End Sub

Private Sub Table_Clearing(ByVal sender As Object, _
    ByVal e As DataTableClearEventArgs)
    Console.WriteLine("Table_Clearing Event: TableName={0}; Rows={1}", _
       e.TableName, e.Table.Rows.Count.ToString())
End Sub

Lásd még