DataTable Olaylarını İşleme
nesnesi, DataTable bir uygulama tarafından işlenebilen bir dizi olay sağlar. Aşağıdaki tabloda olaylar açıklanmaktadır DataTable
.
Olay | Açıklama |
---|---|
Initialized | yöntemi DataTable çağrıldıktan sonra EndInit gerçekleşir. Bu olay öncelikli olarak tasarım zamanı senaryolarını desteklemeye yöneliktir. |
ColumnChanged | içinde bir değer başarıyla değiştirildikten DataColumnsonra gerçekleşir. |
ColumnChanging | için bir değer gönderildiğinde DataColumn gerçekleşir. |
RowChanged | içindeki bir DataColumn değeri veya RowState değeri DataRowDataTable başarıyla değiştirildikten sonra gerçekleşir. |
RowChanging | içindeki bir değer veya RowState DataRow DataTable değeri için bir DataColumn değişiklik gönderildiğinde gerçekleşir. |
RowDeleted | içindeki DataTable bir DataRow olarak Deleted işaretlendikten sonra gerçekleşir. |
RowDeleting | içinde DataTable bir DataRow olarak Deleted işaretlenmeden önce gerçekleşir. |
TableCleared | yöntemine ClearDataTable yapılan bir çağrının her DataRow birini başarıyla temizledikten sonra gerçekleşir. |
TableClearing | Yöntemi çağrıldıktan sonra Clear ancak işlem başlamadan önce Clear gerçekleşir. |
TableNewRow | yöntemine NewRow DataTable yapılan bir çağrıyla yeni DataRow bir oluşturulduktan sonra gerçekleşir. |
Disposed | olduğunda DataTable Disposed gerçekleşir. öğesinden MarshalByValueComponentdevralındı. |
Not
Satır ekleyen veya silen işlemlerin çoğu ve ColumnChanging
olaylarını ColumnChanged
tetiklemiyor. Ancak yöntemiReadXml
, okunan XML belgesi bir DiffGram
olduğunda veya olarak ayarlanmadığı DiffGram
Auto
sürece XmlReadMode
ve ColumnChanging
olaylarını tetiklerColumnChanged
.
Uyarı
Veri bozulması, olayın oluşturulduğu bir DataSet
RowChanged
veride değişiklik yapılırsa oluşabilir. Bu tür veri bozulması oluşursa hiçbir özel durum tetiklenmez.
ek ilgili olaylar
Constraints özelliği bir ConstraintCollection örneği barındırıyor. ConstraintCollection sınıfı bir CollectionChanged olayı kullanıma sunar. Kısıtlama eklendiğinde, değiştirildiğinde veya öğesinden ConstraintCollection
kaldırıldığında bu olay tetikleniyor.
Columns özelliği bir DataColumnCollection örneği barındırıyor. DataColumnCollection
sınıfı bir CollectionChanged olayı kullanıma sunar. Bu olay, öğesine DataColumn
eklendiğinde, değiştirildiğinde veya öğesinden DataColumnCollection
kaldırıldığında tetikler. Olayın tetiklesine neden olan değişiklikler, bir sütunun adı, türü, ifadesi veya sıralı konumunda yapılan değişiklikleri içerir.
Tables özelliğinin DataSet bir örneği vardırDataTableCollection. DataTableCollection
sınıfı hem a CollectionChanged
hem de bir CollectionChanging
olayı kullanıma sunar. bu olaylar, öğesine DataTable
eklendiğinde veya öğesinden kaldırıldığında tetikleniyor DataSet
.
'de DataRows
yapılan değişiklikler, ilişkili DataViewbir için olayları da tetikleyebilir. sınıfı, DataView
bir ListChanged değer değiştiğinde veya görünümün oluşturma veya sıralama düzeni değiştiğinde tetikleyen bir DataColumn
olayı kullanıma sunar. sınıfı, DataRowView ilişkili DataColumn
bir PropertyChanged değer değiştiğinde tetikleyen bir olayı kullanıma sunar.
İşlem Dizisi
Bir eklendiğinde, değiştirildiğinde veya silindiğinde DataRow
gerçekleşen işlemlerin sırası aşağıdadır:
Önerilen kaydı oluşturun ve değişiklikleri uygulayın.
İfade olmayan sütunlar için kısıtlamaları denetleyin.
veya
RowDeleting
olaylarınıRowChanging
uygun şekilde yükseltin.Önerilen kaydı geçerli kayıt olarak ayarlayın.
İlişkili dizinleri güncelleştirin.
İlişkili nesneler için olayları ve
PropertyChanged
ilişkiliDataView
nesneler içinDataRowView
olayları tetiklerListChanged
.Tüm ifade sütunlarını değerlendirin, ancak bu sütunlardaki kısıtlamaları denetlemeyi geciktirin.
İfade sütunu değerlendirmelerinden etkilenen ilişkili
DataView
nesneler için olaylar vePropertyChanged
ilişkiliDataRowView
nesneler için olaylar tetiklemeListChanged
.RowDeleted
Veya olayları uygun şekilde yükseltinRowChanged
.İfade sütunlarında kısıtlamaları denetleyin.
Not
İfade sütunlarına yapılan değişiklikler hiçbir zaman olay oluşturmaz DataTable
. İfade sütunlarına yapılan değişiklikler yalnızca ve DataRowView
olaylarını oluştururDataView
. İfade sütunlarının diğer birden çok sütuna bağımlılıkları olabilir ve tek DataRow
bir işlem sırasında birden çok kez değerlendirilebilir. Her ifade değerlendirmesi olayları tetikler ve ifade sütunları etkilendiğinde tek DataRow
bir işlem birden çok ListChanged
ve PropertyChanged
olay oluşturabilir ve büyük olasılıkla aynı ifade sütunu için birden çok olay da dahil olabilir.
Uyarı
Olay işleyicisi içinde bir NullReferenceException oluşturmayın RowChanged
. NullReferenceException bir olayı DataTable
içinde RowChanged
bir oluşturulursa, o zaman DataTable
bozulur.
Örnek
Aşağıdaki örnekte , , , RowChanging
, RowDeleted
, RowDeleting
, ColumnChanged
, ColumnChanging
, TableNewRow
, TableCleared
ve TableClearing
olayları için RowChanged
olay işleyicilerinin nasıl oluşturulacağı gösterilmektedir. Her olay işleyicisi, tetiklendiğinde konsol penceresinde çıkışı görüntüler.
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