Kurumsal ve Kişisel ASP.NET C# SQL Eğitiminde Ankara'da Zirve

Access Tablosunu Sürükle Bırak 2

Daha önceki makalemizde, Access tablosunun sürüklenerek datagridview üstüne bırakılmasını verilerin, grid üzerinde gösterilmesini incelemiştik. Şimdi bu işlemi String fonksiyonlardan “Split” ile gerçekleştireceğiz. Kod satırlarının kısalarak dizilere daha çok yer ayrılması nedeniyle ikinci yolu da sizlere anlatacağım. Öncelikle “Split” fonksiyonunun işlevinden bahsedelim. Bu fonksiyon String bir veri içerisinde, belirli bir ayraç yardımı ile verileri dizi haline getirir. Aşağıdaki örnek bu fonksiyonun kullanımını göstermektedir.

string deger = “korhan,nihat,yüksel,sibel,sıdıka”;

char[] ayraclar = new char[] { ‘,’ };

string[] isimler = deger.Split(ayraclar);

for (int i = 0; i <= isimler.GetUpperBound(0); i++)

                MessageBox.Show(isimler[i]);

Yukarıdaki kodlar ile “deger” değişkeni içerisindeki her isim “isimler” dizisinin bir elemanı olmaktadır. Bunun nedeni ayraç olarak belirtilen değer “,” işaretidir. “Split” fonksiyonu parametre olarak char dizisi almaktadır. Bu dizi içerisinde birden çok ayraç belitebilirsiniz.

Şimdi uygulamamıza ait tüm kodları vereceğiz. Ardından burada önemli bir bölümü oluşturan “Jagged” dizinin kullanılışından bahasedeceğiz.

Öncelikle “datagridview1” in properties penceresinden “AllowDrop” özelliğine “true” değerini aktarın.

private void dataGridView1_DragOver(object sender, DragEventArgs e)

        {
            e.Effect = DragDropEffects.Copy;
        }

private void dataGridView1_DragDrop(object sender, DragEventArgs e)

        {

string veri = e.Data.GetData(DataFormats.Text).ToString();

string[] genel = veri.Split(new char[] { ((char)13) });

string[] kolonlar = genel[0].Split(new char[] { ((char)9) });

string[][] satirlar=new string[genel.Length-1][];

for (int i = 1; i <= genel.GetUpperBound(0); i++)

satirlar[i – 1] = genel[i].Split(new char[] { ((char)9) });

DataTable tablo = new DataTable();

for (int i = 0; i <= kolonlar.GetUpperBound(0); i++)

                tablo.Columns.Add(kolonlar[i]);

DataRow satir;

for (int i = 0; i <= satirlar.GetUpperBound(0); i++)

            {
                satir = tablo.NewRow();

for (int j = 0; j <= satirlar[i].GetUpperBound(0); j++)

                {
                    satir[j] = satirlar[i][j];
                }
                tablo.Rows.Add(satir);
            }
            dataGridView1.DataSource = tablo;
        }

Yukarıdaki kodlar, ile öncelikle kolon satırı dahil olmak üzere, satırları da içeren string ifade enter (ascii değeri 13) karakterine göre bölünmüştür. Bölünen bu ifade sonucunda kolon satırı, tab (ascii değeri 9) karakterine göre bölünmüş ve her bir kolon başlığı “kolonlar” dizisine alınmıştır.

Aynı işlem satırlar içinde yapılmalıdır fakat burada bizi “Jagged” dizi tanımlamaya iten durum, her satırın bir dizi içerisine alınması gerektiğidir. “Jagged” dizinin her elemanı aslında kendisine ait bir dizi tutar. Bu nedenle satır sayısı kadar elemana sahip bir “Jagged” dizi tanımlanmıştır. Bu elemanların her birisine ait bir dizi bulunur, eleman sayıları farklı olabilecek bu dizilerin buradaki kullanımında elaman sayılarının eşit olması gerekir. Sebebi ise, her satır değeri aynı kolon sayısına sahiptir.

string[][] satirlar=new string[genel.Length-1][];

for (int i = 1; i <= genel.GetUpperBound(0); i++)

satirlar[i – 1] = genel[i].Split(new char[] { ((char)9) });

“genel” dizisinin ilk satırı kolonların başlıklarını tutması nedeniyle, “satirlar” dizisi, “genel” dizisinin bir eleman eksiği kadar tanımlanmıştır. İşlemler yapılırken de hep bu eksik değer düşünülmüş ve “i-1” şeklinde ifade edilmiştir ya da for döngüsü, “1” den başlamıştır.

Daha önceki yazdığımız kodlardan çok daha kısa ve işlevsel olan bu program ile de aynı sonucu elde etmeniz mümkün. Datagridview içerisinde gösterildiğinde “ID” kolonun satır değerlerine bakacak olursanız, sayıların yanında bir kutucuk görürsünüz. Aslında bu satır başı karakteri (ascii değeri 10) dir. İsterseniz ilk string veriyi aldığınızda bu ifadeyi “Replace” fonksiyonu gibi fonksiyonlarla veri içerisinden çıkarabilirsiniz fakat biz uygulamanın sadeliğini bozmamak adına bunu yapmadık.

Hepinize iyi çalışmalar..

Yorum Yapılmamış

Bir cevap yazın