C# – DataGridViewComboBoxCell İçerisindeki ComboBox Nesnesine Ulaşmak

Merhaba,

C# Windows Forms uygulamalarında standart componentlerden olan DataGridView nesnesi kullanış açısından oldukça etkili olmasına rağmen teknik boyutta biz yazılımcılar açısından da bir o kadar zahmetli ve kompleks bir yapıya sahiptir. DataGridView nesnesi, veri kümelerimizi listelemede devreye giren ve bu esnada birden çok fonksiyonellikle bizlere eşlik edebilen bir nesne olma özelliğinden dolayı detayda birden çok kendisiyle bağdaşık tip barındırmaktadır. İlgili içeriğimizde bu tiplerden birisi olan ve listeye bir ComboBox tipinden kolon eklememizi sağlayan DataGridViewComboBoxCell nesnesi üzerinde duracağız ve pratik olarak bu tipten esas olan ComboBox nesnesine nasıl erişebileceğimizi teknik olarak konuşacağız.

DataGridViewComboBoxCell nesnesi, yukarıda da değinildiği gibi DataGridView nesnesi üzerinde bir ComboBox özelliği gösteren kolon sağlama işlevine sahiptir.

        class Veri
        {
            public int x { get; set; }
            public int y { get; set; }
        }
        List<Veri> VeriKumesi()
        {
            return new List<Veri>
            {
                new Veri{ x = 3, y = 5 },
                new Veri{ x = 1, y = 2 },
                new Veri{ x = 6, y = 4 },
                new Veri{ x = 1, y = 3 },
                new Veri{ x = 2, y = 1 },
            };
        }
        void DataGridViewVeriBagla()
        {
            dataGridView1.DataSource = VeriKumesi();
            DataGridViewComboBoxColumn comboBoxKolon = new DataGridViewComboBoxColumn();
            comboBoxKolon.HeaderText = "ComboBox Kolon";
            comboBoxKolon.Name = "cbKolon";
            comboBoxKolon.DataSource = VeriKumesi().OrderBy(v => Guid.NewGuid()).ToList();
            comboBoxKolon.DisplayMember = "x";
            comboBoxKolon.ValueMember = "y";
            dataGridView1.Columns.Add(comboBoxKolon);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            DataGridViewVeriBagla();
        }

Yukarıdaki kod bloğunu incelerseniz eğer DataGridView nesnesine bir veri kümesi bağlanmakta ve bunun yanında DataGridViewComboBoxColumn nesnesi ile ilgili DataGridView nesnemize bir ComboBox nesnesi eklenmektedir.

Eğer ki çalışma senaryonuz kolon içerisindeki herhangi bir satırda bulunan ComboBox nesnesini salt bir şekilde elde etmeyi gerektirirse şimdi sizlere göstereceğim yöntemi uygulayarak gayeniz doğrultusunda çalışmanızı sürdürebilirsiniz.

Bu işlem için DataGridView nesnesinin EditingControlShowing eventını aşağıdaki şekilde kullanmanız yeterli olacaktır.

        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (e.Control is ComboBox comboBox)
            {
                //İşlemler...
            }
        }

EditingControlShowing eventı sayesinde tıklanan hücredeki ComboBox nesnesi elde edilmekte ve üzerinde istenildiği şekilde işlemler gerçekleştirilmektedir.

Hatta her bir ComboBox nesnesine özel SelectedIndexChanged vs. gibi eventları aşağıdaki gibi bağlayabilir ve olaylara karşı local hücrelerde tepkimeler verebilirsiniz.

        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (e.Control is ComboBox comboBox)
            {
                comboBox.SelectedIndexChanged += (a, b) =>
                {
                    //İşlemler
                };
            }
        }

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.