C# ile DevExpress Nesneleri Kullanımı #GridControl Giriş

Ağustos 13, 2016 Mustafa BÜKÜLMEZ 10 Yorum


Selamlar Arkadaşlar

Devexpress nesneleri kullanımı derslerimize devam edelim. DevExpress'in benim gözümde çağ atlatan nesnelerinden birisi GridContol. Çok geniş kapsamlı mükemmel bir nesne olarak " beni kullanın " diye bağırıyor. Çok geniş kapsamlı olduğu için bu ders biraz uzun olacak bu yüzden parça parça anlatabilirim. Mümkün olduğunca ayrıntıya inmeye ve kolayca anlaşılır şekilde çalışacağım.

Not: Çok ayrıntılı bir bilgim yok bu nesne hakkında bildiğim kadarı ile anlatacağım. En çok kullandığım ve sizlerinde en çok kullanacağınız özelliklerden başlayacağım.

Hadi başlayalım.

İçerik Başlıkları;
1 - Tablo Bağlama
2 - Gruplandırma
3 - Veri Filtreleme
4 - Kolon - Satır - Hücre İşlemleri
5 - Alt Toplamlar & Bilgiler
6 - Kolonların Formatlanması


Projemizde bir form açalım ve bir DevExpress GridControl ekleyelim.
İçeriğe geçmeden önce birkaç özellikten bahsedelim. GridControl nesnesinin diğer devexpress nesnelerinde olduğu gibi kendine has bir özellik ekranı var önce onu bir görelim.
Run Designer diyerek ana tasarım ekranını görelim
Arkadaşlar buraları anlatmayacağım en azından şimdilik. Siz kurcalarsınız. Ben daha çok işleri kod kısmında hallediyorum. :)

İçerik başlıklarından devam edelim.

1 - Tablo Bağlama
Bu makalemde üstün körü anlatmıştım. Şimdi ayrıntılı görelim.

 gridControl1.DataSource = null; 
// önce  DataSource u boşaltıyoruz.
 gridView1.Columns.Clear(); 
// kolonları temizliyoruz
 gridControl1.DataSource = sql.ShowTable("sql sorgumuz");
 // sql classımızı kullanarak DataSource'e bir DataTable atıyoruz.

Evet arkadaşlar DataSource için bir DataTable gerekiyor.
İlk iki satırın amacı aynı gridde birden farklı tabloyu sorunsuzca gösterebilmek için. Bazen kolonları temizleyemediği için 2. tablonun verilerini göstermiyor. (Tecrübe ile sabit).  

2 - Gruplandırma
Bu konu kolay ve basit. Gridview'i doldurduktan sonra (çalışma zamanında) kolon başlığını tutup hemen üzerindeki gruplama alanına taşıdığınızda o kolona göre kayıtlar gruplanıyor. Ama önce yapmamız gereken bir şey var. İsterseniz Dizayn sayfasından isterseniz kodla gruplama alanını açıp kapatabilirsiniz. Dizayn kısmını kullanmadığım için yerini bilmiyorum. Hiçte merak etmedim direk kodunu aradım. Sebebi ise yeri geliyor bir formda 3 4 girdcontrol kullanıyorum. E ne yapacam her grid için dizayn sayfasına girip ayar mı yapıcam? Oldu canımmm. Ya projemde 100 tane grid varsa ne olacak onla mı uğraşacaz işi gücü bırakıp. Eğer siz öyle yapmak isterseniz siz bilirsiniz. Ben size ilgili kodu veriyorum..

this.gridView1.OptionsView.ShowGroupPanel = false;
// false  kapatır
// true açar

Elle uğraşmayayım istediğim kolon otomatik gruplu gelsin diyorsanız da; 

 gridView1.BeginSort();
                try
                {
                    gridView1.ClearGrouping();
                    gridView1.Columns["Gruplanacak_Kolon"].GroupIndex = 0;
                }
                finally
                {
                    gridView1.EndSort();
                }

3 - Veri Filtreleme
Bu konu için de bir ayar açmamız gerekiyor. Kodunu veriyorum hemen

 this.gridView3.OptionsView.ShowAutoFilterRow = false;
// false  kapatır
// true açar
//bu kod, kayıtların en üste yer alan bir arama satırı açar. 
//İlk satır boş görünür ve hangi kolonun altındaki hücreye yazı 
//yazarsanız o kolonda yazdıklarınıza eşleşenleri getirir.

 this.gridView3.OptionsView.HeaderFilterButtonShowMode = FilterButtonShowMode.Button;
//bu kod ise kolon adlarının yanı bir ok getirir ve bu ok'a tıkladığınızda o kolondaki 
//verileri gruplayarak, (2 elma, 2 armut, 5 kavun varsa hepsinden 1 er adet gösterir. ) 
//gösterir. Tekli ve veya çok seçim yaparak seçili olan verileri içeren kayıtları gösterir.

örn; listede sadece Mustafa BÜKÜLMEZ ile ilgili kayıtları görmek istiyorsunuz, İlgili kolonun arama hücresine; 
Mustafa  BÜKÜLMEZ yazdığınızda ilgili kayıtları gösterir.
* BÜKÜLMEZ yazdığınızda ikinci kelimesi BÜKÜLMEZ  olan kayıtları gösterir.
------
*.08.2016 yazdığınızda  2016 yılının 8. ayındaki kayıtları gösterir.
*.2016 yazdığınızda  2016 yılındaki kayıtları gösterir.
*mavi* yazdığınızda içerisinde mavi kelimesini içeren kayıtları gösterir. 


4 - Kolon - Satır - Hücre İşlemleri
Bu konuyu da yine kodlarla yapacağız. İşte Kodlar;

* gridView3.OptionsView.ColumnAutoWidth = false;
//bu kod kolonların başlıklarını yada içlerindeki veriye göre büyür yada küçülür, 
//ve kayıtlar ekrana sığmaz ise altında kaydırma çubugu çıkar.
//true olursa tüm kolonları ekrana sığdırmaya çalışır. örn 100 kolon varsa  
//karşınıza şöyle bir görüntü gelir.

Tüm kolonları ekrana sığdırmaya çalışır.

* this.gridView3.Appearance.HeaderPanel.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
//bu kod uzun kolon adlarında kolon adının alt satıra geçmesini sağlar.

*   this.gridView3.Columns["KAYITNO"].Visible = false;
//görünmesini istemediğin kolonlar için.

Lakin çalışma zamanında bu kolona ihtiyaç duyarsanız kolon başlıkları üzerinde sağ tık yaparak,
Columns Chooser seçerek görebilirsiniz. Gizli kolonlar listesini sağ altta gösterecektir isterseniz kulağından tutup kolon başlıklarının arasına bırakarak girdview de görünmesini sağlayabilirsiniz. Diğerlerinin de zaten az çok ne olduğu belli siz uğraşırsınız bunlarla yani denersiniz anlamında  :)

*  gridView3.BestFitColumns();
// kolonlardaki verilerin görüneceği kadar genişletir yada daraltır yani otomatik genişletir yada daraltır.

* this.gridView3.OptionsBehavior.Editable = false;
// hücrelerin düzenlebilir olma özelliğini kapatır yada açar, Açık olduğunda hücreye tıkladığınızda 
//hücre içine focuslanır. Grid üzerinden insert yaptırmak isterseniz bu kodu true ayarlamalısınız.

* this.gridView3.OptionsBehavior.ReadOnly = false;
//hücreleri sadece okunabilir olarak ayarlar. 
//hücre üzerinde değişiklik yapamazsınız yada yapabilirsiniz.. 
//Üstteki kodla hemen hemen aynı işi yapar.

* gridView3.MoveFirst();
//grid üzerindeki  ilk kayda focuslanır.

* gridView3.MoveLast();
//grid üzerindeki son kayda focuslanır.

* this.gridView1.ColumnPanelRowHeight = 45; 
// başlık kısmının yüksekliğini ayarlar.

* this.gridView1.OptionsView.ShowFooter = true; 
// gridin altında alt toplam alanını gösterir bu alanda sağ tık yaparak diğer seçenekleri görebilirsiniz.


5 - Alt Toplamlar & Bilgiler

 for (int i = 0; i < gridView1.Columns.Count; i++)
            {
                string tipi = this.gridView1.Columns[i].ColumnType.ToString();
                // kolondaki verinin tipi alıyoruz.       
                if (tipi == "System.Double")
                {
                    // eğer tipi double ise 
                    gridView1.Columns[i].DisplayFormat.FormatType = FormatType.Numeric;
                    // görünüm şeklini numeric yaptık
                    gridView1.Columns[i].DisplayFormat.FormatString = "n2";
                    // devexpress in numeric format kodu virgülden sonra 2 basamak
                    gridView1.Columns[i].SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum;
                    // alt bilgi yada alt toplam şeklini seçtik
                    // tipi double olanların kolonlarının altında tüm kolonun toplamını göstersin
                    // istedik.
                    gridView1.Columns[i].SummaryItem.DisplayFormat = "{0:N2}";
                    // alt toplam görünüm şekli virgülden sonra 2 basamak
                    gridView1.Columns[i].SummaryItem.Tag = 1;
                }
            }

Şimdi kodu inceleyelim.
Bütün gridview üzerindeki hücre değerlerine tek tek bakacak tipi double olanları (0,00) formatı şeklinde gösterecek yani virgülden sonra 2 basamak şeklinde. Sonra hangi kolonda ise bu double veriler o kolonların altında (footer alanına) alt toplam olarak gösterecek. Amma ve lakin önce footerın gösterilmesini sağlamamız gerek. Önceki madde söylemiştim yine söyliyeyim.

NOT: Tabi bu kodu yazarsanız veriler normalden daha geç gelecektir. Dilerseniz kolon bazlı olarak da bu işlemi yapabilirsiniz.

* this.gridView1.OptionsView.ShowFooter = true; 
// gridin altında alt toplam alanını gösterir bu alanda sağ tık yaparak diğer seçenekleri görebilirsiniz.


Örnekteki kod alt toplam alır.
  gridView1.Columns[i].SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum;
En sonraki " sum " ifadesi bunu sağlar. sum Türkçesi toplama işlemi, diğer işlemler arasında count(kayıt sayısı), AVG(ortalama) , En büyük ve en küçük gibi seçenekler mevcut.


6 - Kolonların Formatlanması

* this.gridView3.Columns["TARİH"].DisplayFormat.FormatString = "DD-MM-YYYY SS:dd";
// TARİH kolonunun görünüş formatını değiştirr. Varsayılan olarak tarih 13.08.2016
//şeklinde görünür yukarıdaki kodu yazarsanız saat ve dakika da görünür.

Bu konunun bir kısmı da önceki maddede gösterilmiştir. ;)


GridControl Eventleri hakkında bir makale daha hazırlayacağım arkadaşlar sıralı olsun diye bu makaleden sonra hemen onu paylaşacağım.

Ama arkadaşlar dediğim gibi sadece kullandığım kısımları yazıp paylaşıyorum. Yani internetten araştırıp kopyala yapıştır yapmıyorum. Anlatmam gereken ama teknik olarak bilmediğim konuları da kaynak göstererek alıyorum. Sonuçta copy/paste ile kaynak göstermeden kendi hazırlamış gibi göstererek içerik oluşturulmaz bu sadece çalmak olur.

Saygılarımla
Mustafa BÜKÜLMEZ
http://mustafabukulmez.com/


10 yorum:

  1. eline sağlık çok işime yaradı

    YanıtlaSil
  2. Teşekkürler. Faydalı olmasına sevindim.

    YanıtlaSil
  3. Ellerinize Sağlık çok iyi oldu teşekkürler.

    YanıtlaSil
  4. Valla elinize kolunuza sağlık

    YanıtlaSil
  5. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  6. Hocam merhaba gridview stok seçmeden adet yada birim fiyatı yazmasın istiyorum ve ikinci satıra geçmesin stok seç uyarısı yapsın istiyorum nasıl yaparız bir kod paylaşır mısınız

    YanıtlaSil
  7. Elinize emeğinize sağlık

    YanıtlaSil
  8. Merhaba. Benim şöyle bir sorunum var. sql den verilerin sıralaması örnek; id, ay, yıl, isim ve tüm kodlama ekle sil güncelle ler buna göre kodladım ama şimdi tüm verilerim zarar görmeden bu sıralamayı grid üzerinde ay olanı en başa almak istiyorum ve bu grid her açtığımda bu şekilde kalmasını istiyorum. yoksa tüm yapıyı bu sıralamayla değiştirirsem çok fazla zamanımı alacak bunun gridview üzerinde veya kodlama ile istediğimiz sıralamayı yapabilmemiz mümkünmü teşekkürler.

    YanıtlaSil