C# DataTable “Bu satır başka bir tabloya ait” Hatası Çözümü, yazım ile C sharp eğitim setime yeni bir hata çözümü daha ekliyorum. Bu hatayı bir datatable’den başka bir datatable ‘ye aktarırken yaşadım. Sizlerinde bu hatayı yaşayabilme ihtimalinizi göz önüne alarak bu dersi yazmak istedim.
C# DataTable “Bu satır başka bir tabloya ait” Hatası Çözümü
Bu hatayı yaşamama sebep olan durumun senaryosu şöyledir;
Elimde kolonları aynı olan 5 datatable var. Bu datatable’lerin son satırlarını alarak farklı bir datatable ‘ye atıp onu da gridcontrol de göstermem gerekiyor. Ancak bu 5 datatable’den alınan son satırlar (DataRow) ları, ana datatable’ye atarken Bu satır başka bir tabloya ait hatası aldım. Bu hatayı daha önce hiç yaşamamıştım. Biraz araştırma yaparak sorunu nasıl çözeceğimi buldum.
Öncelikle DataTable ‘lerden son satıları nasıl aldığımı görelim.
Not: Bu ders içeriğini githup projemde bulabilirsiniz. Aşağıda linkini vereceğim. ;)
DataTable dt1 = new DataTable(); dt1.TableName = "Tablo1"; dr = dt1.Rows[dt1.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. DataTable dt2 = new DataTable(); dt2.TableName = "Tablo2"; dr = dt2.Rows[dt2.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. DataTable dt3 = new DataTable(); dt3.TableName = "Tablo3"; dr = dt3.Rows[dt3.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. DataTable dt4 = new DataTable(); dt4.TableName = "Tablo4"; dr = dt4.Rows[dt4.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. DataTable dt5 = new DataTable(); dt5.TableName = "Tablo5"; dr = dt5.Rows[dt5.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir.
Yukarıda gördüğünüz kodlarla, datatable’nin son satırını alabiliyoruz. Şimdi bu aldığımız satırları dt_Son adı verdiğimiz ana datatable’mize alacağız. Kodlarımıza dt_son datatable’mizi ve dr DataRow’umuzu tanımladıktan sonra, tablolarımızdan aldığımız datarow’ları yeni oluşturduğumuz datarow’a yükledik. O datarow’u da dt_son’a yükledik.
DataTable dt_son = new DataTable(); DataRow dr; DataTable dt1 = new DataTable(); dt1.TableName = "Tablo1"; dr = dt1.Rows[dt1.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. dt_son.Rows.Add(dr); DataTable dt2 = new DataTable(); dt2.TableName = "Tablo2"; dr = dt2.Rows[dt2.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. dt_son.Rows.Add(dr); DataTable dt3 = new DataTable(); dt3.TableName = "Tablo3"; dr = dt3.Rows[dt3.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. dt_son.Rows.Add(dr); DataTable dt4 = new DataTable(); dt4.TableName = "Tablo4"; dr = dt4.Rows[dt4.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. dt_son.Rows.Add(dr); DataTable dt5 = new DataTable(); dt5.TableName = "Tablo5"; dr = dt5.Rows[dt5.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. dt_son.Rows.Add(dr);
NOT: Buradaki işlemleri kısaltmak açısından aşağıdaki gibi kullanabiliriz.
DataTable dt5 = new DataTable(); dt5.TableName = "Tablo5"; dt_son.Rows.Add(dt5.Rows[dt5.Rows.Count - 1]);
Bu bilgiyi de verdikten sonra hatayı almaya hazırız. Böyle bir senaryoda bu hatayı alıyoruz. Tabi ki datatable’lerimiz içerisinde satırlar olması gerekiyor. Yoksa -1 konumunda satır yok hatası alırız.
Biliyorum konuyu fazla uzattım ama bunları göstermek istedim. Şimdi asıl olaya gelelim.
Bize lazım olan metod İmportRow metodudur. Görelim.
DataTable dt_son = new DataTable(); DataRow dr; DataTable dt1 = new DataTable(); dt1.TableName = "Tablo1"; dr = dt1.Rows[dt1.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. //dt_son.Rows.Add(dr); dt_son.ImportRow(dr); DataTable dt2 = new DataTable(); dt2.TableName = "Tablo2"; dr = dt2.Rows[dt2.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. //dt_son.Rows.Add(dr); dt_son.ImportRow(dr); DataTable dt3 = new DataTable(); dt3.TableName = "Tablo3"; dr = dt3.Rows[dt3.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. //dt_son.Rows.Add(dr); dt_son.ImportRow(dr); DataTable dt4 = new DataTable(); dt4.TableName = "Tablo4"; dr = dt4.Rows[dt4.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. //dt_son.Rows.Add(dr); dt_son.ImportRow(dr); DataTable dt5 = new DataTable(); dt5.TableName = "Tablo5"; dr = dt5.Rows[dt5.Rows.Count - 1]; // eğer kolon sayısı 0 ise hata verecektir. //dt_son.Rows.Add(dr); dt_son.ImportRow(dr);
Gördüğünüz gibi, dt_son.importrow metodunu kullanarak başka bir tabloya ait olan satırı başka bir tabloya atabiliyoruz.
Hepsi bu kadar arkadaşlar. Bu dersimizde bu kadardı. Hata çözüm dersi olduğundan elimden geldiğince açık ve hatanın sebebini de vererek açıklamaya çalıştım.
C# DataTable “Bu satır başka bir tabloya ait” Hatası Çözümü, dersimizde bu kadardı dostlar. Umarım faydalı bir yazı olmuştur.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Ayrıca kısa süre önce tüm YENİ derslerimi tek bir proje içinde yapıp github’a yükleyeceğim demiştim. Bu dersimde o projenin içerisinde bir klasör olarak yerini almıştır. Buraya tıklayarak projeye ulaşabilirsiniz.
Sağlıcakla ve takipte kalın ;)
Bol kodlu günler…