Bu makalemizde DataSet sinifina ait bazi methodlarin islevlerine ve özelliklerine deyinecegiz. Bizim için yararli olabilecek bir çok method Datasetlerimizin içerisinde yer almaktadir. Bu methodlar programlama anlayisini kolaylastirmakta ve hizlandirmaktadirlar.
AcceptChange Methodu
DataSet sinifimizda oldugu gibi hem DataTable hemde DataRow Sinifimizda bu methoda sahiptir. Bu methodun DataTable sinifi ile çagrilmasi bütün DataRowlarda da çagrilmasina sepeb olacaktir. Benzer sekilde DataSet sinifimizdan çagirirsak tüm DataTablelar ve dolayisiyla tüm DataRowlar hiyerasik bir yapiyla etkilenecektir. Bu durumda multiple level akisi gerçeklesmis olur. Asagida küçük bir örnegimiz bulunmaktadir. Bir önceki makalemizde iller tablosunu SqlDataApater sinifimizi kullanarak dataSetimize doldurmus ve DataSetimizin içerisinde "Iller" adli bir DataTable olusturmustuk. Elimizde bir adet dataSet ve ona bagli "Iller" dataTable oldugunu varsayarak örnegimizi olusturmaya basiyoruz.
private void AcceptChangesNedir() {
// Iller tablomuza yeni bir satir ekliyoruz.
DataRow myRow;
myRow = dataSet.Tables["Iller"].NewRow();
myRow["Pk_Il_ID"] = 1;
myRow["Il_Ad"] = "Denizli";
// yeni bir satir ekleniyor.
dataSet.Tables["Iller"].Rows.Add(myRow);
// AcceptChange methodu dataSet ten çagrildiginda
// Iller DataTablendaki tüm DataRow lari etkileyecektir.
dataSet.AcceptChanges();
}
Yukaridaki örnekte AcceptChanges() Methodu dataSetten tetiklenmis ve tüm table ve ona bagli rowlar etkilenmistir. Tam anlamiyla DataRowlarin RowState durumlari AcceptChanges() ile; satirin eklenmesi ya da degistirilmesi durumunda (added or modified ) degismemis(unchange) durumuna, silinmesi durumunda ise ayrilmis(detached) pozisyonuna geçmesine neden olacaktir.
private void RowStateNedir()
{
.
DataTable table = dataSet.Tables["Iller"];
DataRow row;
row = table.NewRow();
// Detached row. Ayrilmis Satir
Response.Write("New Row " + row.RowState);
table.Rows.Add(row);
// Added row. Eklenmis satir
Response.Write("AddRow " + row.RowState);
table.AcceptChanges();
// Unchanged row. Degismemis satir
Response.Write("AcceptChanges " + row.RowState);
row["Il_Ad"] = "Konya";
// Modified row. Degistirilmis satir
Response.Write("Modified " + row.RowState);
row.Delete();
// Deleted row. Silinmis Satir
Response.Write("Deleted " + row.RowState);
table.AcceptChanges();
// Detached row. Ayrilmis Satir
Response.Write("AcceptChanges " + row.RowState);
}
Clear Methodu
Clear Methodu sayesinde kolayca tüm tabellarimizin satirlarini ayni anda temizleyebiliriz.
private void Clear_Nedir(DataSet dataSet)
{
// dataSetimize bagli tüm Tablelarda satir sayisini tespit edelim
foreach (DataTable table in dataSet.Tables)
{
Response.Write(table.TableName + "Rows.Count = "
+ table.Rows.Count.ToString());
}
// Tüm tablellarin satirlarini temizleyelim
dataSet.Clear();
// Tekrar gözlemleyelim
foreach (DataTable table in dataSet.Tables)
{
Response.Write(table.TableName + "Satir Sayisi = "
+ table.Rows.Count.ToString());
}
}
Clone Methodu
Clone Methodu ile tabellarimizin yapilarini aralarindaki iliskileri baska bir datasete uyarlayabiliriz. Fakat herhangi bir veri kopyalama söz konusu degildir.
DataSet cloneSet = dataSet.Clone();
Copy Methodu
Clone Methodu ile tabellarimizin yapilarini aralarindaki iliskileri baska bir datasete verileri ile kopyalamamizi saglar.
DataSet copySet = dataSet.Copy();
Merge Methodu
Merge methodu iki tablonun birlestirilmesi esasina dayanir. Iki tablonun birlestirilebilmesi için birtakim ön sartlarin olmasi gereklidir.
Bir datagridde iki tablonunu gösterilebilmesi için,
· Datatable’içindeki tüm column tipleri ve adlari ayni olamlidir.
· DataTable isimleri ayni olmalidir.
Merge Methodunun temel uygulama alanlari Master ve transation tablolarinin yapilandirilmasina yöneliktir.
Table1: Iller Table2: Iller
Alan1 int32 Pk_Il_ID Alan1 int 32 Pk_Il_ID
Alan2 string Il_Ad Alan2 string Il_Ad
private void MergeNedir()
{
DataSet dataSet1 = new DataSet();
DataSet dataSet2 = new DataSet();
// dataSet1 mizin içersine Iller tablosunun fill edildigini düsünelim
// dataSet2 mizin içersine de yeni eklenen iller oldugu varsayalim
dataSet1.Merge(dataSet2);
GridView1.DataSource = dataSet1.Tables[0];
GridView1.DataBind();
}
Verdiginiz bilgilerden dolayi tesekkür ederim.
Yalniz benim kafama söyle bir sorun takiliyor.. Dataset ile ilgili.. Dataset e AcceptChanges() yaparsak satiri UnChange olarak isaretleyecek ve biz bu dataset i Adaptor araciligi asil veri tabanina Adaptor.Update metodu ile gödermeye çalisirsak birsey göndermez.. Çünkü satirlarda degisiklik yapilmamis olarak algilayacak..
Diyeceksiniz ki e o zaman AcceptChanges() yapma o zaman. O da olmuyor malesef. Suan üzerinde ugrastigim programda bununla ilgi
Tesekkürler.