Kurumsal Otomasyon Çözümlerinde Zirve

Access Tablosunu Sürükle Bırak

Öncelikle belirtmeliyiz ki, sürükle – bırak (drag – drop)  işlemleri, üç ana safhadan oluşur. Bunlardan ilki, işlemin başlatıldığı yerdir. Bu yer Mouse olaylarından birisidir. Genellikle sürükleme işlemi mouse’un sol tuşuna basılıyken başlar. Ardından üzerine bırakacağınız yerin, (parmağınız hala mouse’un sol tuşunda) üzerinde beklerken ki bölümdür yani ikinci safha gerçekleşiyordur. Bu olay ise, üzerine bırakılacak yerin “dragover” olayıdır. Bu olay içerisinde, üzerine bırakılınacak olan nesnenin ne olduğu alınabilir ve belli şartlarda gelen değerlerin kabulü, diğerlerinin gelmesi durumunda ise, işlemin yapılması engellenilebilir. Eğer ikinci safhada gerçekleşmiş ise, artık son bölüm devreye girer. Bu bölüm ise “dragdrop” olayıdır.

Örneğimiz için, sürüklemeyi başlatan biz olmayacağız. Dolayısıyla biz son iki safha ile ilgileniyoruz. Formumuzda bulunan datagridview üzerine bırakılacak herhangi bir Access tablosunun verileri ve kolonları alınacak, alınan bu değerlere göre de bir tablo oluşturulacaktır. Bu işlemler süresince veritabanı bağlantısı yapılmayacaktır.

Öncelikle forma koyduğunuz datagridview kontrolünün properties (özellikler) penceresinden, “allowdrop” özelliğini “true” yapınız. Ardından, datagridview kontrolünün “dragover” olayına geliniz.

     private void dataGridView1_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Copy;
        }

Yukarıdaki kod ile üzerinde nesne bırakılmaya hazırlanılırken izin verilme işlemi gerçekleştiriliyor. Burada DragDropEffects.Copy yerine, DragDropEffects.Move derseniz, access tablonuzu sürüklemeyi başlattığınızda tabloyu taşımak istediğine emin misin gibi bir soru soracaktır. Bizim amacımız taşımak değil sadece kopyalamak o nedenle yukarıdaki gibi yazdık. İkinci olayımız ise, bırakıldıktan sonra gerçekleşecek olan “dragdrop” olayıdır.

private void dataGridView1_DragDrop(object sender, DragEventArgs e)

        {

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

            kolonlariAl(veri);

tablo = new DataTable();

DataColumn[] kolonlar = kolonlariAl(veri);

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

            {
                tablo.Columns.Add(kolonlar[i]);
            }
            TabloDoldur(veri, tablo);
            dataGridView1.DataSource = tablo;
        }

Bu olay içerisinde, üzerine bırakılan tablonun “text” formatında alınması ve string bir değişken olan “veri” ye aktarılması gerçekleştirilmiştir. Kullandığımız iki fonksiyondan, “kolonlariAl” tek parametre isteyen ve yaptığı işlemin sonucunda geriye “DataColumn” tipindeki dizi ile tablonun kolonlarını döndüren bir fonksiyondur. İkincisi ise, “TabloDoldur” fonksiyonudur. Bu fonksiyon aldığı string parametre verisi ile gönderilen boş tabloyu doldurur. Boş tablonun bu şekilde dolması ise, referance değişkenlerle ilgili bir durumdur.

Encoding sınıfı “System.Text” kütüphanesi içerisinde bulunmaktadır. Bu sınıfın “GetEncoding” metodu kullanılarak istenilen dil kodlamasında, veri dönüşümleri yapılabilmektedir. Biz de string bir değişkenin verisini, byte bir diziye, ya da byte diziyi char dizisine Türkçe Dil Kodlaması kullanarak dönüştürme uyguladık.

Fonksiyonlar içerisinde kontrol edilen,

                if (bDizi[i] == 13)
                {
                    liste.Add(isim);
                    break;
                }

else if (bDizi[i] == 9)

                {
                    liste.Add(isim);
                    isim = “”;
                }

gibi 13 ya da 9 gibi değerler ise, enter – tab tuşları anlamına gelmektedir. Gelen veri içerisinde bu değerler kolonların başlıklarını ya da satırların bitimlerini kontrol etmemiz sağlar.

Uygulamaya ait tüm kod bloğu ;
        DataTable tablo;

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();

            kolonlariAl(veri);

tablo = new DataTable();

DataColumn[] kolonlar = kolonlariAl(veri);

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

            {
                tablo.Columns.Add(kolonlar[i]);
            }
            TabloDoldur(veri, tablo);
            dataGridView1.DataSource = tablo;
        }

DataColumn[] kolonlariAl(string veri)

        {

DataColumn[] kolonlarR;

byte[] bDizi = Encoding.GetEncoding(“iso-8859-9”).GetBytes(veri);

ArrayList liste = new ArrayList();

string isim = “”;

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

            {

if (bDizi[i] == 13)

                {
                    liste.Add(isim);
                    break;
                }

else if (bDizi[i] == 9)

                {
                    liste.Add(isim);
                    isim = “”;
                }
                else
                {
                    isim = isim + ((char)bDizi[i]).ToString();
                }
            }
            kolonlarR = new DataColumn[liste.Count];

for (int i = 0; i <= liste.Count – 1; i++)

            {
                kolonlarR[i] = new DataColumn(liste[i].ToString());
            }

return kolonlarR;

        }

int TabloDoldur(string veri, DataTable tbl)

        {

bool durum = false;

byte[] bDizi = Encoding.GetEncoding(“iso-8859-9”).GetBytes(veri);

char[] cDizi = Encoding.GetEncoding(“iso-8859-9”).GetChars(bDizi);

string deger = “”;

DataRow satir = tbl.NewRow();

int sayac = 0;

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

            {

if (bDizi[i] == 10)

                {
                    durum = true;
                }

if (durum)

                {

if (bDizi[i] != 10)

                    {
                        if (bDizi[i] == 9 )
                        {

satir[sayac] = deger;

                            deger = “”;
                            sayac++;
                        }
                        else if (bDizi[i] == 13)
                        {

satir[sayac] = deger;

                            sayac = 0;

tbl.Rows.Add(satir);

                            deger = “”;

satir = tablo.NewRow();

                        }
                        else
                        {

deger = deger + cDizi[i].ToString();

                           if (i == cDizi.GetUpperBound(0))
                           {

satir[sayac] = deger;

tbl.Rows.Add(satir);

                           }
                        }
                    }
                }
           }

return tbl.Rows.Count;

        }
Sürüklenecek tablonun bulunduğu yerden alınırkenki ekran görüntüsü ;
access-tablosunu-surukle-birak-1

access-tablosunu-surukle-birak-1

Yukarıdaki gibidir. Örneğin sürüklenen bir tablo sonucu oluşacak ekran görüntüsü ise aşağıdaki gibi olacaktır.

access-tablosunu-surukle-birak-2

access-tablosunu-surukle-birak-2

 

Yorum Yapılmamış

Bir cevap yazın