1. Ana Sayfa
  2. C Sharp

C# DevExpress Gridview Kodla Kolona Button Ekleme

C# DevExpress Gridview Kodla Kolona Button Ekleme
+ - 0

Merhabalar, C# DevExpress Gridview Kodla Kolona Button Ekleme yazım ile  C# yazılarıma devam ediyorum. Yoğunluktan dolayı bir süredir neredeyse hiç yazı yazmamıştım. Bu yoğunluğuma sebep olan işlerimden birinde, ekrandaki liste üzerinde sağ tık yapıp sil demektense listenin her satırının en sağında bir button olsa ona tıklayıp silme işlemini yapsak şeklinde bir istek gelmişti. Ben genellikle Yeni Ekle, Değiştir ve Sil işlemlerini ContextMenuStrip kullanarak yaparım.  Bu istek üzerine bu konuyu araştırdım ve çözdüm. Bu yazımda da bundan bahsedeceğim.

C# MenuStrip, ToolStrip, StatusStrip, ContextMenuStrip

C# DevExpress Gridview Kodla Kolona Button Ekleme

Beni takip edenler, benim entitiy framework kullanmadığımı bilirler. Ben proje içerisinde sql sorgularını özgürce yazabilmekten yanayım. Tabi beni buna alıştıran şeyde, çalıştığım yerlerde hep birden fazla veri tabanı ile aynı anda çalışmak zorunda olmamdan dolayıydı. Neyse dediğim gibi Entity Framework kullanmadığım için bazı şeyleri yapmak zor oluyor.

Bu sebeple bu işlemi DevExpess GridView’in designer sayfasından yapmayacağız. Sadece kod kullanarak butonu gride ekleyip click eventini de elimize eşleyeceğiz. DevExpress GridView’e her nesneyi ekleyemiyoruz. Eklenebilir nesneler ise Repositoryitem olarak geçiyor. Bağlantıya tıklayarak sitesine gidebilir ve detaylı bilgi alabilirsiniz.

C# DevExpress Gridview Kodla Kolona Button Ekleme Kodları

GridView_RepositoryItem_Ekleme.cs

Bu işeme geçmeden önce tabi ki bir Class tanımlıyoruz. Kod ile ekleme yapacağımız için her GridView’e kullanabiliriz. Bu sebeple Class yapıyoruz.

Ben class’ımın adını GridView_RepositoryItem_Ekleme yazdım.

    public static class GridView_RepositoryItem_Ekleme
    {
    }

Class’ımızın içerisinde bir adet KolonBTN adında metod tanımlıyoruz. Metodumuz RepositoryItem türünde bir nesne üretecek ve geri dönüşünü yapacak.

    public static class GridView_RepositoryItem_Ekleme
    {
         public static RepositoryItem KolonBTN()
         {
             
         }
    }

Bu metodumuz elbette birçok parametre alacak. Şimdi bize lazım olan parametreleri yazalım.

    public static class GridView_RepositoryItem_Ekleme
    {
         public static RepositoryItem KolonBTN(GridView grd, string kolon_adi, int Aktif_Pasif, string resim_adi)
         {
             
         }
    }

 

Parametreler

  • GridView grd ilk parametre olarak, buttonları ekleyeceğimiz GridView’i parametre olarak alıyoruz.
  • string kolon_adi, Buttonları ekleyeceğimiz kolonun adını yazıyoruz.
  • int Aktif_Pasif, Buttonların pasif olması gereken durumlar için
  • string resim_adi, Buttonlarda görünecek resmin adı. Ben burada sadece DevExpress resimlerinin kullanılabileceği bir şekilde hazırladım.

Şimdi kodları parça parça verip açıklamaların yapacağım. En sonda tüm class’ı vereceğim… Buradan sonrası metodumuzun içinde olacak kodlardır.

       grd.OptionsView.ShowButtonMode = DevExpress.XtraGrid.Views.Base.ShowButtonModeEnum.ShowAlways;

Parametre olarak aldığımız gridview’in ShowButtonMode özelliğini aktif edip, sürekli görünsün şeklinde ayarlıyoruz.

            GridColumn kolon = new GridColumn();
            kolon.Caption = kolon_adi;
            kolon.FieldName = kolon_adi;
            kolon = grd.Columns.AddVisible(kolon_adi);
            grd.Columns.Add(kolon);

Parametre olarak aldığımız kolon_adi parametresinde verdiğimiz isimle yeni bir kolon üretip GridView’e ekliyoruz. Bir çok yol denedim sadece yukarıdaki kodlar ile, sql sorgusunda olmadığı halde gridde kolon gösterimini yapabildim.

            RepositoryItemButtonEdit btn = new RepositoryItemButtonEdit();      
            btn.Buttons[0].Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph;
            btn.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;

GridView’e eklenecek buttonedit nesnesini ürettik. Ekleyeceğimiz görselin görünüm şeklini değiştirdik ve ButtonEdit  nesnesinde olan text giriş alanını kaldırdık.

ButtonEdit Görseli Ayarlama

            // miscellaneous - butonun yer aldığı grubun başlığı
            // resmin adı - devexpress resimlerinin üzerine gelindiğinde görünüyor.
            Image img = null;
            if (resim_adi.Contains("16"))
            {
                img = DevExpress.Images.ImageResourceCache.Default.GetImage("images/" + resim_adi);
                kolon.Width = 25;
            }
            else if (resim_adi.Contains("32"))
            {
                img = DevExpress.Images.ImageResourceCache.Default.GetImage("images/" + resim_adi);
                kolon.Width = 41;
            }
            else
            {
                kolon.Width = 41;
            }

            btn.Buttons[0].Image = img;
            btn.Buttons[0].ImageOptions.ImageToTextAlignment = DevExpress.XtraEditors.ImageAlignToText.TopCenter;
            btn.Buttons[0].ImageOptions.Location = DevExpress.XtraEditors.ImageLocation.TopCenter;

Yeni bir Image nesnesi tanımladık. Eğer resmin adında 16 geçiyor ise resmi ona göre seçtik ve kolonun genişliğini ButtonEdit’i tam saracak bir ölçüde ayarladık.

DevExpres kullananlar bilir. Buttonlara image ataması yapmak istediğimizde DevExpress’in kendi ikon koleksiyonu vardır. Bu koleksiyonda ikonlar hem 32×32 hemde 16×16 boyutlarında yer alır. Bahsettiğim ekran aşağıdaki gibidir.

string resim_adi, parametremiz burada bize gerek oluyor. Burada benim istediğim resim adı için, aşağıdaki ekran görüntüsünde gördüğünüz işaretli alanlardaki bilgileri gerekiyor. Parametre şu şekilde olmalı. miscellaneous/publish_32x32.png. miscellaneous  yeşil ile işaretlenmiş alandaki grup adıdır. publish_32x32.png ise kırmızı olarak işaretlenmiş alandaki görünen ikonun adıdır. Biz şuanda 32×32 boyutundaki ikonlara bakmaktayız. Sol kısımdan 16×16’yı seçersek 16×16 boyutundaki ikonlarda görünecektir.

C# DevExpress Gridview Kolona Button Ekleme

string resim_adi, parametresine miscellaneous/publish_32x32.png gönderdiğimizde  images/miscellaneous/publish_32x32.png şeklinde ifade tamamlanmış olacaktır ve GetImage() metodu istediğimiz ikonu ButtonEdit nesnesine ekleyecektir.

Yukarıdaki 25 ve 41 sayıları olabilecek en uygun boyutlardır. Bu ayarı yapmamızın sebebi, ButtonEdit nesnesini hücre içerisinde yatayda ve dikeyde ortalayamıyoruz. En azından ben ortalama yolunu bulamadım. Bu sebeple ikonun ölçüsüne bakarak kolon genişliğini ayarladım.

Kod kısmında gördüğünüz o son iki satırda ikonu button içerisinde ortalamak içindir.

if (Aktif_Pasif == 1) { btn.Buttons[0].Enabled = true; } else { btn.Buttons[0].Enabled = false; }

int Aktif_Pasif parametresi eğer 1 ilse ButtonEdit nesnelerinin enabled özelliklerini true (Aktif), 0 ise false (Pasif) yapıyoruz.

  kolon.ColumnEdit = btn;
            return btn;

Oluşturduğumuz nesneyi, oluşturduğumuz kolona ekliyoruz. Kolonu yukarıda GridView’e eklemiştik. son olarak da geri dönüş olarak ürettiğimiz nesneyi veriyoruz. Neden button nesnesi olarak geri dönüş verdiğimizi birazdan anlayacaksınız.

Class’ın tamamı…

using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Grid;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BateMenu.Cls.Global
{
    public static class GridView_RepositoryItem_Ekleme
    {
        public static RepositoryItem KolonBTN(GridView grd, string kolon_adi, int Aktif_Pasif, string resim_adi)
        {
            grd.OptionsView.ShowButtonMode = DevExpress.XtraGrid.Views.Base.ShowButtonModeEnum.ShowAlways;

            GridColumn kolon = new GridColumn();
            kolon.Caption = kolon_adi;
            kolon.FieldName = kolon_adi;
            kolon = grd.Columns.AddVisible(kolon_adi);
            grd.Columns.Add(kolon);

            RepositoryItemButtonEdit btn = new RepositoryItemButtonEdit();
            btn.Buttons[0].Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph;
            btn.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;

            // miscellaneous - butonun yer aldığı grubun başlığı
            // resmin adı - devexpress resimlerinin üzerine gelindiğinde görünen adı
            Image img = null;
            if (resim_adi.Contains("16"))
            {
                img = DevExpress.Images.ImageResourceCache.Default.GetImage("images/" + resim_adi);
                kolon.Width = 25;
            }
            else if (resim_adi.Contains("32"))
            {
                img = DevExpress.Images.ImageResourceCache.Default.GetImage("images/" + resim_adi);
                kolon.Width = 41;
            }
            else
            {
                kolon.Width = 41;
            }

            btn.Buttons[0].Image = img;
            btn.Buttons[0].ImageOptions.ImageToTextAlignment = DevExpress.XtraEditors.ImageAlignToText.TopCenter;
            btn.Buttons[0].ImageOptions.Location = DevExpress.XtraEditors.ImageLocation.TopCenter;



            if (Aktif_Pasif == 1) { btn.Buttons[0].Enabled = true; } else { btn.Buttons[0].Enabled = false; }

            kolon.ColumnEdit = btn;
            return btn;
        }

    }
}

Class’ın Kullanımı

Şimdi nasıl kullanacağımıza gelelim.

GridView_RepositoryItem_Ekleme.KolonBTN(gridView1, "Yükle", 1, "miscellaneous/publish_32x32.png");

Bu şekilde kullandığımızda, parametre olarak verdiğimiz GridView’e kolon ve buttonEdit nesneleri eklenecektir ama tıkladığınızda hiçbir işlevi olmayacaktır. İşte metodunun neden RepositoryItem olarak geri dönüş verdiğinin açıklaması budur. Eğer bir item olarak geri dönüş vermezsek Click eventi veremeyiz. Şimdi Click eventimizi verelim.

Cls.Global.GridView_RepositoryItem_Ekleme.KolonBTN(gridView1, "Yükle", 1, "miscellaneous/publish_32x32.png").Click +=

+=’i yazar yazmaz hızlıca TAB+TAB yapıyoruz. VS geri kalanını tamamlıyor.

  Cls.Global.GridView_RepositoryItem_Ekleme.KolonBTN(gridView1, "Yükle", 1, "miscellaneous/publish_32x32.png").Click += form1_Click;
        private void form1_Click(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

Burada alacak bir isim bulamadığı için evente formun adını verdi. Dilersek eventin adını değiştirebiliriz.

  Cls.Global.GridView_RepositoryItem_Ekleme.KolonBTN(gridView1, "Yükle", 1, "miscellaneous/publish_32x32.png").Click += gridview_buttonedit_Click;
        private void gridview_buttonedit_Click(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

Şimdi Click eventimizin kodlarını yazalım ve bitirelim.  Tıkladığımız satırın sırasını veren (index + 1) ve messagebox ile gösterecek kodları yazalım.

C# MessageBox İşinize Yarayacak Tüm Özellikleri

        private void gridview_buttonedit_Click(object sender, EventArgs e)
        {
            int index = gridView1.FocusedRowHandle;
            if (index >= 0)
            {
                MessageBox.Show((index + 1).ToString() + ". satıra tıkladınız.");
            }
        }

Bu kodlar ile bir GridView’e eklenen ButtonEdit’e tıkladığımızda, tıkladığımız ButtonEdit’in bulunduğu satırın (Row) kaçıncı sırada olduğunu (index+1) bize messagebox ile gösterecektir. Bu index numarası ile gridview’deki kaydın ID bilgisi alarak veri tabanından silinmesi işlemini yapabilirsiniz.

Çalışması ve nasıl göründükleri aşağıdaki gibidir.

C# DevExpress Gridview Kolona Button Ekleme


C# DevExpress Gridview Kodla Kolona Button Ekleme yazımızda bu kadardı arkadaşlar. Diğer derslerimizde görüşmek üzere….

C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız. Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…

475. Yazı bitti.

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)