C# ILE DEVEXPRESS NESNELERI KULLANIMI #ButtonEdit

Ağustos 18, 2016 Mustafa BÜKÜLMEZ 0 Yorum


Merhabalar Arkadaşlar

Bu makalemde DevExpress nesnelerinden çok sık kullandığım bir nesneyi daha anlatmaya çalışacağım. O nesnenin adı da ButtonEdit.

ButtonEdit textbox ile button un birleştirilmiş hali gibi birşey.

Bu şekilde görünür. Sağdaki 3 nokta button olarak iş görür.


Textbox gibi de kullanabilirsiniz Button olarak da.

Bir kaç kullanım örneği göstereyim.

 private void ButtonEdit1_ButtonClick(object sender, ButtonPressedEventArgs e)
        {
           //gördüğünüz gibi buttonclick eventi ile buton olarak da kullanabilirsiniz.
           //Şimdi Önceki dersimde biraz bashetmiştim ona bir örnek yapmış olalım.

           //şimdi grid fromumuzu çağıralım
           OrtakListe fr =  new OrtakListe();  // from tanımı
           fr.SQLSorgu = "sql sorgunuzu yazın"; // OrtakListe formundak public değişkenimiz
           //Formlar arası veri aktarımı makalemde ayrıntılı olarak görebilirsiniz.
           fr.ShowDialog(); // formu ekrana getirdik.

        }

Şimdi OrtakListe formumuzun load Eventi içerisinde gridview'imizi sorguya göre doldurduğumuzda gridview ekrana dolu bir şekilde gelecektir.
Diyelim ki biz stok birimi seçtirmek istiyoruz. Yukarıdaki sql sorgumuz bu olsun ve o button'a tıkladığımızda ekrana stok birimleri listelenmiş bir grid gelecek. Biz bu listeden bir kayda çift tıkladığımızda tıkladığımız satırdaki bilgileri alacak ve form kapanacak ve form kapandığında ise buttonEdit'in text'ine de seçtiğimiz birimin adını getirecek.

 public string Adi="";
 private void gridView1_DoubleClick(object sender, EventArgs e)
        {                  
                int index = gridView1.FocusedRowHandle;
                Adi = gridView1.GetRowCellValue(index, "birim_adi").ToString();       
               Close();                     
        }

Evet gridview'in satırına çift tıkladık ve birim_adini aldık. Şimdi bunu önceki forma göndereceğiz. Yukarıdaki ButtonEdit nesnesinin ButtonClick eventine bir satır ekliyoruz.

 private void ButtonEdit1_ButtonClick(object sender, ButtonPressedEventArgs e)
        {
           //gördüğünüz gibi buttonclick eventi ile buton olarak da kullanabilirsiniz.
           //Şimdi Önceki dersimde biraz bashetmiştim ona bir örnek yapmış olalım.

           //şimdi grid fromumuzu çağıralım
           OrtakListe fr =  new OrtakListe();  // from tanımı
           fr.SQLSorgu = "sql sorgunuzu yazın"; // OrtakListe formundak public değişkenimiz
           //Formlar arası veri aktarımı makalemde ayrıntılı olarak görebilirsiniz.
           fr.ShowDialog(); // formu ekrana getirdik.
           ButtonEdit1.Text = fr.Adi; // bunu da eklediğimizde form kapandığında seçtiğimiz veri buttonedit'in text'ine yazılır
        }

Ben en çok bu şekilde kullanıyorum. Başka şekilde pek kullanmıyorum. Ama sizin kullanabileceğiniz bir yöntem daha geldi aklıma gerçi bende bir iki kere kullanmıştım.

Diyelim ki bir sql yedekleme işlemi için yedekleme klasörünün dosya yolunu almanız gerekiyor. ButtonEdit'in button kısmına OpenFileDialog ekleyerek dosya ekranını açabilir ve seçilen klasörün yolunu ButtonEdit'in Text'ine yazdırabilirsiniz. Ve bunu parametreler tablonuza kaydedebilirsiniz.

Bu makalemizde bu kadar arkadaşlar. Başka bir makalede görüşmek üzere...

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




0 Yorum:

C# ILE DEVEXPRESS NESNELERI KULLANIMI #GRIDCONTROL EVENTLER

Ağustos 18, 2016 Mustafa BÜKÜLMEZ 0 Yorum



Merhabalar Arkadaşlar

Kaldığımız yerden devam ediyoruz. Bu makalemizde GridControl ve GridView eventleri hakkında olacak.

Her zaman diyorum yine diyeceğim. Sadece kullandığım kısımlarını anlatacağım. Çünkü hepsini anlatacak olsak 100 tane ders çıkar.

Hadi Başlayalım.

1- GridView_Click
2- GridView_RowClick
3- GridView_KeyDown
4- GridView_RowStyle
5- GridView_DoubleClick

1- GridView_Click 
 Bu event çok kullanışlı değildir. Tabi kullandığınız yere göre yapacağınız işleme göre kullanışlı olabilir. Örn bir projenizde tıkladığınız gridview'in adını almanız gerekebilir.

 private void gridView1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(gridView1.Name.ToString());
        }

2- GridView_RowClick
Bu eventi çok kullanırım şahsen. Genelde kayıt formu ile listesi aynı formda olduğunda KartOku işlemini daha rahat yapmak için kullanırım. RowClick ile Click arasındaki fark biri sadece satıra tıkladığınızda diğeri de gridview'in herhangi bir yerine tıkladığınızda tetiklenir. Bu yüzden KartOku işlemi yaparken index numarasını alamayacağından dolayı Click eventinde daha çok hata çıkacaktır.

private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) 
        { 
            Temizle();
            KartOku(); 
        }

3- GridView_KeyDown
Bu eventi de her zaman rowclick eventi ile aynı anda kullanırım. Amacı ise kullanıcı sadece mouse ile tıklamak zorunda kalmasın. Klavyeden yön tuşları ile de KartOku işlemini gerçekleştirebilir.

   private void gridView1_KeyDown(object sender, KeyEventArgs e) 
        { 
            Temizle();
            KartOku(); 
        }

4- GridView_RowStyle
Bu eventi genelde gridview renklendirme işlemlerinde kullanırım. Örn Veresiye takibi yapılacak bir formda günü geçen ödemeleri kırmızı renkle göstermek isteyebiliriz.O zaman bu eventi kullanırız.

      private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
        {
            GridView View = sender as GridView;           
                if (e.RowHandle >= 0)
                {
                    DateTime Odeme_Tarih = Convert.ToDateTime(gridView1.GetRowCellValue(e.RowHandle, "ÖDEME_TARİHİ"));                   
                    if (DateTime.Now > Odeme_Tarih)
                    {
                        e.Appearance.BackColor = Color.FromName("Red"); // soldan sağa
                        e.Appearance.BackColor2 = Color.FromName("Blue"); // sağdan sola
                        e.Appearance.ForeColor = Color.FromName("Black"); // yazı rengi
                    }                   
              }
        }
İşte burada DevExpress'in bir özelliği giriyor araya. BackColor  ve BackColor2 ile satırı radyan olarak renkledirebiliyoruz. Yani satıra renk geçişi verebiliyoruz. BackColor sadece buna renk verirseniz tek renk olur BackColor ve BackColor2 renk verirseniz renk geçişli olur. Diğeri de zaten yazı rengidir. Color.FromName özelliği renk adından " Color " nesnesi çıkarır. Projemde bunu parametrik yaptığım için kullanıcı istediği rengi parametreler tablosuna kaydediyor ve oradaki kayda göre renkleri değişiyor.

5- GridView_DoubleClick
Bu eventi de ComboBox'u ve DevExpress nesnelerinden olup hemen hemen aynı özelliğe sahip LookUpEdit  nesnesini sevmediğimden belirli bir sistem ile gridview'in bu özelliğini sık kullanıyorum.
Şimdi neden ve nasıl kullandığımı açıklayayım.

Yukarıda bahsettiğim nesneleri kullanmayı sevmediğimden dolayı forma bir ButtonEdit ve CalcEdit ekliyorum. ButtonEdit'e tıklandığında bana istediğim verilerle dolu olan bir grid açıyor. Bu gridde istediğim kayda çift tıklayarak formun Close eventi içerisinde tıkladığın satırın verilerini önceki formdaki ButtonEdit (Adını) ve CalcEdit(Kodunu) nesnelerine dolduruyorum. İnsert içerisinde de CalcEdit'teki veriyi kaydediyorum ve listede gösterirken de İç İçe Select kullanarak kodu yerine adını gösteriyorum.

       private void gridControl1_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                int index = gridView1.FocusedRowHandle; // satırın index numarası
                RECNO = Convert.ToInt32(gridView1.GetRowCellValue(index, "KAYITNO").ToString());
                KODU = Convert.ToString(gridView1.GetRowCellValue(index, "KODU").ToString());
                ADI = Convert.ToString(gridView1.GetRowCellValue(index, "ADI").ToString());                                Close();
            }
            catch
            {
            }
        }

Bunu keydown eventi ile birlikte de kullanabiliriz. Fakat onda da tuş kontrolü yapmamız gerekir.

 private void gridView1_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyData)
            {
                case Keys.Enter: // ENTER tuşuna basılırsa
                    try
                    {
                        int index = gridView1.FocusedRowHandle;
                        RECNO = Convert.ToInt32(gridView1.GetRowCellValue(index, "KAYITNO").ToString());
                        KODU = Convert.ToString(gridView1.GetRowCellValue(index, "KODU").ToString());
                        ADI = Convert.ToString(gridView1.GetRowCellValue(index, "ADI").ToString());
                        Close();
                    }
                    catch
                    {
                    }
                    break;
            }
        }

Bunlar sadece en sık kullandığım eventler. Yenileri eklendikçe bende bu makale üzerinde " Edit " diye belirterek ekleyeceğim.
Bu makalemizde bu kadar arkadaşlar. Başka bir makalede görüşmek üzere.

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


0 Yorum:

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:

C# ile DevExpress Nesneleri Kullanımı #RadioGroup

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


Selamlar Arkadaşlar

Bu makalemde DevExpress  nesnelerinden olan RadioGroup kullanımını anlatmaya çalışacağım.

Arkadaşlar bildiğiniz üzere Windows nesneleri artık kullanışsız geliyor. Kaldi ki görsel olarakda hiç iyi değil. Kullanımları daha zor geliyor bana. Ama DevExpress görsel olarak kendini aşmış kullanım olarak maksimum kolaylık bir eklenti olarak karşımıza çıkıyor ve hem masaüstü hemde web kapsamlı bir eklentidir.. Bugünde bize sağladığı kolaylıklardan biri olan RadioGroup nesnenesini anlatmaya çalışacağım.

Bence henüz devexpress kullanmıyorsanız bir an önce kullanmaya başlayın. Sağladığı kolaylıklara inanamayacaksınız.

Windows nesnelerinde radio nesnesini kullanacağımız zaman önce bir onları bir groupbox'a alıp sonra özellikler kısmından ait oldukları grupları belirmek gerekiyor ki bunu yapmazsak sadece birinin seçilmesini istesek de tüm seçenekler işaretlenebiliyor. Ama bizim istediğim örn 5 tane radio'dan sadece birinin seçilmesi....

DevExpress bunu bizim için hazır hale getirmiş. RadioGroup nesnesini ekliyorsunuz. Sağ üst kısımdaki ok simgesine tıklayarak nesneye özel ayarlara girip oradan o grup içine istediğiniz kadar radio nesnesi ekleyebiliyorsunuz.

Resimde gördüğünüz gibi " Edit Items " e tıkladığınız raido ekleme alanı karşımıza geliyor.
Add butonuna tıkladıkça yeni bir radio ekliyor ve sağ taraftan adını vs güncelleyebiliyoruz.


Kullanımınu bir örnek üzerinde uğraşalım. Örneği yine geliştirdiğim projelerden örneklerle anlatacağım.
Şimdi senaryomuz şöyle olsun;
Formumuzda 1 adet GridView var. Bu GridView de ise siparişlerimizi listeliyoruz. Formun en üstünde de bir adet RadioGroup nesnemiz var. 
ve bu RadioGroup nesnemizde de resimdeki liste seçeneklerimiz var. Seçtiğimiz seçeneğe göre listemizde siparişlei göstereceğiz. 

Şimdi GridView güncellemek için bir void yazalım.

 private void GridUpdate()
        {
            string where = "  ";
            switch (radioGroup1.SelectedIndex)
            {
                case 0:
                    where = " where Siparis_Tarihi < " + DateTime.Now.ToString("yyyyMMdd");
                    break;
                case 1:
                    where = " where Siparis_Tarihi = " + DateTime.Now.ToString("yyyyMMdd");
                    break;
                case 2:
                    where = " where  Siparis_Tarihi > " + DateTime.Now.ToString("yyyyMMdd");
                    break;
            }
            // switch case konusunu daha sonra ayrıntılı bir şekilde anlatacağım
            // burada switch case yerine if de kullanabilirsiniz.
            gridControl1.DataSource = null;
            gridView1.Columns.Clear();
            gridControl1.DataSource = sql.ShowTable("Select * from Siparisler  "+ where);
        }


Yukarıda gördüğünüz gibi RadioGroup nesnesinden seçilen radio'ya göre ilgili listeyi sql sorgusunun where şartını değiştirerek göstermiş olduk. 

Amaaa şimdi bu da çok açıklayıcı olmadı en iyisi birde sql insert ve update de bunu nasıl kullanırız ona bakalım.
Sadece insert sorgusu içerisinde nasıl kullanılır onu göstereceğim.

" radioGroup1.SelectedIndex " Bunu yazdığınızda seçili olanın index numarasını alır.
" radioGroup1.Text " Bunu yazdığınızda seçili olanın yazısını alır. (ama bunu tavsiye etmiyorum.)

Kaydı  tekrar güncellemek için kartoku işlemi yaptığınızda bu değeri
" radioGroup1.SelectedIndex  = Convert.ToInt16(okunandeğer)
şeklinde atamasını yapmanı lazım. 

Ama burada da bir handikap var. Herşeyi ayarladınız. Müşteriye kullandırdınız. Adam bir dünya kayıt girdisi yaptı. Eğer ki sonradan RadioGroup içerisindeki Radioların yerlerini değiştirirseniz kartoku işleminde yanlış seçim yapacaktır. Örn;

0 - bitmiş işler
1 - bitmemiş işler
2 - yapılan işler

Sıralaması ile ayarladanız ve seçime göre de update yaptırdınız. Bir zaman sonra(Örn 3 ay sonra);

0 - bitmemiş işler
1 - yapılan işler
2 - bitmiş işler

Şeklinde sıralamayı değiştirdiniz.
Değiştirmeden önce bitmiş işlerde görünen bütün işler değişimden sonra bitmemiş işler olarak görünür.
Çünkü öncesinde durum bilgisi 0 olanlar(sıfırıncı index) bitmiş işlerdi. Ama artık durum bilgisi 0 olanlar bitmemiş işler oldu. Bu durumda kart oku işlemi yaptığınızda durum bilgisi stunundaki o işe ait durum bilgisi 0 olduğundan ve biz de bunu RadioGroup nesnesinin selectedindex değerine gönderdiğimiz için 0. index (sıfırıncı) seçili olacak ve aslında bitmiş olarak işaretlenen iş bitmemiş olarak işaretlenmiş gibi olacak.

Eğer  radioGroup1.Text şeklinde kaydederseniz, Kartoku işlemi yaptığınızda yukarıdaki gibi geri atama yapamayabilirsiniz. Daha önce onu hiç denemedim o yüzden olur yada olmaz diye birşey diyemeyeceğim. Olursa sorun yok ama olmazsa daha uzun bir yol seçmeniz gerekiyor. O uzun yol ise SQL select sorgusu içerisinde Case When (daha sonra bu konuyu da anlatacağım) kullanarak yapmaktır.

NOT: örnekte gördüğünüz sql.showtable("...") şeklinde kullanım şekli yazdığım bir sql işlemleri class ın kullanım şeklidir. İlgili makale için tıklayın

Saygılarımla
Mustafa BÜKÜLMEZ




0 Yorum:

C# İç İçe İf Kullanımı

Ağustos 12, 2016 Mustafa BÜKÜLMEZ 0 Yorum


Merhaba Arkadaşlar,

Bu makalemizde iç içe if kullanımını anlatacağım. Hazırladığım bir projede yazdığım kodlar :)

Kaydet butonunun click eventinde yazan kodlar

 private void BTN_KAYDET_Click(object sender, EventArgs e)
        {
            string mailler = "";
            if (MailList.Count > 0)
            {
              // insert ve update için hazırlık kodları
                if RECno == 0)
                {
                  //İnsert kod bloğu
                    if (sql.ok == 1)
                    {
                        //sql classından gelen bir kontrol. 1 ise kayıt başarılıdır.
                        MessageBox.Show("Kayıt başarılı");

                        for (int i = 0; i < MailList.Count; i++) { mailler += MailList[i] + ","; }
                        mailler = (mailler.Substring(0, mailler.Length - 1));
                        //otomatik mail göndermeden önce liste içerisindeki mailleri aralarına virgül
                        //atarak yan yana yazmak için kullandım.        
                        if (SendMail.SendMailLocal(mailler, "Bildirim" ,"Mail İçeriği", "Sistem", "") == true)
                            MessageBox.Show("Mailler Gönderildi.");
                           // Mail gönderme class'ı bir bool değer döndürüyor.                                               
                    }
                    else
                        MessageBox.Show("Kayıt başarısız");
                       // Classdan gelen " OK " değişkeni  1 olmadğı için kayıt başarısız.
                }
                else
                {
                    if (Durum == "Açık" & YetkiliKisi == Global_System.AktifKullanici)
                    {
                        // Update kod bloğu
                        if (sql.ok == 1)
                        {
                          //sql classından gelen bir kontrol. 1 ise güncelleme başarılıdır.                            
                            MessageBox.Show("Güncelleme başarılı");
                            for (int i = 0; i < MailList.Count; i++) { mailler += MailList[i] + ","; }
                            mailler = (mailler.Substring(0, mailler.Length - 1));
                         //otomatik mail göndermeden önce liste içerisindeki mailleri aralarına virgül
                         //atarak yan yana yazmak için kullandım.                                
                          
                         if (SendMail.SendMailLocal(mailler, "Bildirim", "Mail İçeriği","Sistem", "") == true)
                        }
                        else
                        {
                            MessageBox.Show("Güncelleme başarısız");
                           // Classdan gelen " OK " değişkeni  1 olmadğı için güncelleme başarısız.
                            Close();
                        }
                    }
                    else
                        MessageBox.Show("Bu kayıt kapatılmış yada düzenleme yetkiniz yok. ");
                       // Durum açık olmadığı ve YetkiliKisi aktif kullanıcı olmadığı için
                       // bu mesajı gösterdik.
                }
            }
            else
                MessageBox.Show("Hiç mail adresi seçmediniz.");
                // mail gönderilecek kişi seçilmediği için buraya geçti.
                // bunu yaptık çünkü hiç mail seçilmezse for döngüsünde hata verecektir.
        }

Evet arkadaşlar yukarıda gördüğünüz gibi, iç içe bir sürü " if " kullandık ama bunun sıkıntıları da yok değil. Çünkü if ler çoğaldıkça anlaşılması daha zor hale gelir. Belki daha kolay bir yolunu bulabiliriz yukarıdaki örneğin ama acil olarak yapmam gerektiği çok özenmedim.

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

0 Yorum:

C# Dosya / Klasör İşlemleri

Ağustos 12, 2016 Mustafa BÜKÜLMEZ 0 Yorum


Selamlar Arkadaşlar,

Çalıştığım yerde bu işlem lazım oldu. Biraz araştırdım ve istediğim şekilde düzeltmelerimi yaptım veee hemen sizlerle de paylaşmak istedim :)

Devam edelim...

KLASÖR İŞLEMLERİ

Klasör Oluşturma 
Directory.CreateDirectory("YeniKlasör");
//Proje klasörü içerisindeki bin/debug in içerisine YeniKlasör isimli bir klasör açar.
// Eğer exe'yi başka klasöre çıkarttıysanız o klasöre açar

Directory.CreateDirectory(@"C:\YeniKlasör");
//C'ye  YeniKlasör isminde bir klasör açar.

Klasör Silme
Directory.Delete(@"C:\YeniKlasör");
//C' deki içi boş olan YeniKlasör’ü siler.
Directory.Delete(@"C:\YeniKlasör",true);
//C' deki  direk YeniKlasör’ü siler. Dolu mu boş mu kontrol etmez.

Klasör Bilgilerini Alma
DateTime OluşturmaZamani  = Directory.GetCreationTime("YeniKlasör");
MessageBox.Show(OluşturmaZamani  .ToString());
//YeniKlasörün oluşturulduğu tarih ve zamanı gösterir.

DateTime SonErisimZamani =  Directory.GetLastAccessTime("YeniKlasör");
MessageBox.Show(SonErisimZamani .ToString());
//YeniKlasöre en son sağlanan erişim zamanın bilgisini döndürür.

DateTime SonKayitZamani =  Directory.GetLastWriteTime("YeniKlasör");
MessageBox.Show(SonKayitZamani .ToString());
//YeniKlasöre en son veri yazıldığı zamanın bilgisini döndürür.

Klasör Taşıma
Directory.Move("YeniKlasör",@"C:\YeniKlasör");
//YeniKlasörü ilk parametredeki yerden alıp, ikinci parametredeki yere taşır.
//Verilen örneğe göre (bin/debug'dan C'ye)

Klasör Varlığı Kontrolü
// Burada cevap true yada false döner.
if (Directory.Exists(@"c:\Program Files"))
{
      MessageBox.Show("Var");
    //Klasör Varsa Çalışır
}
else
{
      MessageBox.Show("Yok");
    //Klasör Yoksa Çalışır
}

DOSYA İŞLEMLERİ

Dosya Oluşturma
FileStream fs= File.Create(@"C:\ExportReports\Report.txt");
//C'dekiExportReports klasörünün içine Report adında bir metin dosyası oluşturur.
fs.Close();
//Create ile bir dosya oluşturulduğunda Filestream nesnesi döner.

//FileStream kapatılmadan dosya kopyalama ve taşıma işlemleri yapılamaz. Çünkü dosya hala açıktır.

Dosya Kopyalama
File.Copy(@"C:\ExportReports\Report.txt", @"C:\Report.txt");
//İlk parametredeki dosya, ikinci parametredeki adrese kopyalanır.

Dosya Taşıma
File.Move(@"C:\ExportReports\Report.txt", @"C:\Report.txt");
//İlk parametredeki dosya, ikinci parametredeki adrese taşınır.

Dosya Silme
File.Delete(@"C:\ExportReports\Report.txt");
// Dosyayı siler.

Dosya Varlığı Kontrolü
if(File.Exists(@"C:\ExportReports\Report.txt"))
{
   MessageBox.Show ("Dosya Mevcut.");
   // Dosya Varsa Çalışır
}
else
{
   MessageBox.Show("Dosya Mevcut Değil.");
   // Dosya Yoksa Çalışır
}


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







0 Yorum:

C# Degişkenler (Veri Tipleri) Nedir?

Ağustos 11, 2016 Mustafa BÜKÜLMEZ 0 Yorum


Değişken (Veri Tipi) Nedir ?
Değişkenler, girdiğimiz değerleri alan veya programın çalışmasıyla bazı değerlerin atandığı veri tutuculardır. Değişken tanımlama ise girilecek ve ya programın getireceği verinin ne olduğuna bağlı olarak değişken türünün belirlenmesidir. Örneğin girilecek verinin bir tamsayı olması halinde o değişkeni de tamsayı olarak tanımlamak gerekir. Değişik türler için bu işlem farklı farklı tekrarlanmalıdır.

 Tanımlamada Dikkat Edilecek Durumlar 
 *  Bir değerleri olmalıdır veya mutlak suretle null olarak tanımlanmalıdır.
 *  Tanımlama yaparken büyük-küçük harf ayrımı vardır.
 *  Değişken adları rakamla başlayamaz.
 *  Class, namespace ve kontrol isimleri gibi program tarafından kullanılan isimler verilemez.
 *  Aynı kod bloğu içerisinde aynı isimden birden fazla değişken tanımlanamaz.
 *  Özel karakter içermez örneğin /,*,-,+.
 *  Boşluk kullanılamaz.
 *  Türkçe karakter kullanılmamalıdır. Ş, ğ,ü,ö,ç,ı gibi…
 *  Özel sözcükler (if, else, random,  vb.) kullanılmaz.
Değişken Tanımlama
Değişken tanımlamaları şu şekilde yapılmaktadır.
(Değişken Türü)   ( Değişen Adı)  =  (Değeri)
Değişken Türleri

Sayısal türler:



Metinsel Türler :



C#'ta hem metinsel hem de sayısal olmayan türler de vardır:
bool
Koşullu yapılarda kullanılır. Bool türünden değerlere true, false gibi ifadeler örnek verilebilir.
object
Bu değişken türüne her türden veri atanabilir.
Var
C# 3.0 da artık tür belirtmeksizin değişken tanımlamamıza olanak sağlayan yenilikler mevcut. Ancak bu değişkenlerin özelliği object değişkenler gibi referans tipli değişkenler değildir. Bunun yerine değeri atanırken tipinin belirkendiği değişkenlerdir.
Datetime
İçinde zaman barındıran değişken tipidir.
Tür = DateTime
Boyut = 8 byte
Açıklama = Tarih ve Zaman Tutar
Örnek = Datetime zaman = Datetime.now

Değişken Tanımlamaları ve Örnekler
Değişkenler nasıl tanımlanır ve değişkenlerde örnekler;
Sayısal Değişkenler
int Sayi = 5; Örneğinde olduğu gibi bir değer vererek tanımlama yapabiliyoruz bu şekilde yaptığımızda Sayi değişkeninin değeri 5 olur, ayrıca int Sayi = 5+7; gibi işlemde yapabiliyoruz bu örnekde ise 5+7 işeminin sonucu olan 12 değeri verilecektir.
Metinsel Değişkenler
Sayısal değişkenlerde olduğu gibi string Yazi = “Deneme Yazısı”; şeklinde tanımlama yapabilmekdeyiz, ama Sayısal değişkenlerde olduğunu gibi matematiksel işlemleri yapamıyoruz. Örnek olarak string Yazi = “5”+”7”; yaptığımızda Yazi değişkeninin değeri 12 yerine “57” olur.

Alıntı Yapılan Kaynak: Social.msdn.microsoft.com

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

0 Yorum:

C# MessageBox Kullanımı

Ağustos 11, 2016 Mustafa BÜKÜLMEZ 0 Yorum


Merhabalar Arkadaşlar

Bu makalemde MessageBox kullanımını bir kaç örnek ile anlatmaya çalışacağım.

Hemen konuya girelim.

MessageBox C# 'da adından da anlaşılacağı gibi isteğimiz doğrultusunda ekrana mesaj kutusu çıkarmaya yarar ve sıkça kullanırız.
Lakin çeşitli kullanım şekilleri vardır. Şimdi o şekilleri beraber inceleyelim.

1 - Sadece mesaj göstermek için
    MessageBox.Show("merhaba");
Bu en basit kullanım şeklidir. bir kutunun içerisinde sadece yazı var. Kutunun başlığı da yok. Varsayılan olarak Tamam butonu var sadece.
İlk alan her zaman mesajın kendisidir.


2 - Mesaj ve Başlık göstermek için
    MessageBox.Show("merhaba", "Selamlama");
İlk kısım mesajın kendisidir. İkinci Kısım mesaj kutusuna başlık olarak eklenir.
Gördüğünüz gibi Selamlama başlıklı bir mesaj kutusu açıldı.

3 - Mesaj Başlık ve Butonlar
    MessageBox.Show("merhaba", "Selamlama", MessageBoxButtons.AbortRetryIgnore);

 Eklenen son alanda her zaman mesaj kutusu butonları yer alır. Bunlar arasında da;
     AbortRetryIgnore - Durdur, Yeniden Dene, Yoksay
     OK - Tamam
     OKCancel - Tamam, İptal
     RetryCancel - Yeniden Dene, İptal
     YesNo - Evet, Hayır
     YesNoCancel -  Evet, Hayır, İptal
şeklinde 6 farklı şekilde buton gösterebilirsiniz. Mesaj kutusunu kullandığınız yere ve amaca göre siz seçersiniz. aşağı doğru göreceksiniz diğerlerini de :)

4 - Mesaj, Başlık, Butonlar ve Simge
    MessageBox.Show("merhaba", "Selamlama", MessageBoxButtons.AbortRetryIgnore,     MessageBoxIcon.Asterisk);

            MessageBox.Show("merhaba""Selamlama", MessageBoxButtons.OK,     MessageBoxIcon.Error);

            MessageBox.Show("merhaba""Selamlama", MessageBoxButtons.OKCancel,     MessageBoxIcon.Exclamation);

            MessageBox.Show("merhaba""Selamlama" MessageBoxButtons.RetryCancel,     MessageBoxIcon.Hand);

            MessageBox.Show("merhaba""Selamlama", MessageBoxButtons.YesNo,     MessageBoxIcon.Information);

            MessageBox.Show("merhaba""Selamlama", MessageBoxButtons.YesNoCancel,     MessageBoxIcon.None);

            MessageBox.Show("merhaba""Selamlama", MessageBoxButtons.YesNoCancel,     MessageBoxIcon.Question);

            MessageBox.Show("merhaba""Selamlama", MessageBoxButtons.YesNoCancel,     MessageBoxIcon.Stop);

            MessageBox.Show("merhaba""Selamlama", MessageBoxButtons.YesNoCancel,     MessageBoxIcon.Warning);


Bazılarının simgesi aynı nedenini bende tam olarak bilmiyorum ama yanlış hatırlamıyorsam uyarı sesleri farklıydı. Tabi simgesine göre ayrı sesler çıkarıyor :)

MessageBox kullanım şekilleri yukarıda gördüğünüz gibidir arkadaşlar. Kodları ve sonuçları...
Şimdi birkaç örnek yapalım. Bunları genelde if şartları içerisinde kullanırız. Ben çoğunlukla normal mesaj vermek için yada onay almak için kullanıyorum.

if (Messagebox.Show("Kaydı onaylıyormusunuz?", "Onay Verin", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
     //MessageBox butonları geriye DialogResult değeri döndürür.
     // kayıt işlemleri kod bloğu
}
Else
{
        MessageBox.Show("Kayıt işlemi tarafınızca iptal edilmiştir.""Kayıt İptal", MessageBoxButtons.Ok,     MessageBoxIcon.Information);
//Hayır dediğimiz için bu alana girdi ve bir bilgi mesajı gösterdik.
}

Örneğe bakacak olursak, Bunu genelde kaydetme, güncelleme gibi işlemlerde kullanırız Onay almak için. Eğer açılan mesaj kutusunda vatandaş "Evet" derse kayıt işlemi yapılır "Hayır" derse işlem yapılmaz. Eğer ki biz bunu if'in içerisinde bu şekilde yazmazsak mesaj kutusu yine görünür ama "Hayır" dese bile kayıt işlemi yapılır.


Şimdi aynı örnek üzerinde farklı bir senaryoya göz atalım.
Kayıt işlemleri blogu yazdığımız yerde bir geri değer döndüren metodumuz olsun adıda Kaydet() olsun.

Metodumuzu yazalım.
bool Kaydet()
{
    // neden bool kullandığımızı aşağıda anlatacağım.
    if (Textbox1.Text == "")
    {
         Textbox1.BackColor = Color.Yellow;
         MessageBox.Show("Renkli alanlar boş geçilemez""Boş Alan Hatası", MessageBoxButtons.Ok,     MessageBoxIcon.Stop);
    //burada bir şarta göre mesaj kutusu göstermemizin bir anlamı yok. 
    //Çünkü şart sağlandığı için bu alana giriyor.
    }
    else
    {
          try
         {
             //Kayıt İşlemleri Bloğu
         }
         catch  //hata mesajını görmek istemiyoruz o yüzden " ex " i yazmıyoruz.
         {
                return false;
                // işlem başarısız oldugu için false gönderdik.
                //işlem başarılı olsaydı bu alana hiç girmezdi.
         }
         return true;
    }
}

Kaydet metodumuz hazır. bu metodda if de kullandık try catch da, if ile boş/dolu kontrolü yaptık. Eğer alan boş ise bir Stop mesajı verecek değilse devam edip try catch e geçecek. Burada kayıt herhangi bir sebepten dolayı tamamlanamaz ise catch'a düşecek ve deger false(yanlış) dönecek. Kayıt tamamlanırsa değer true(doğru) dönecek.

Şimdi Kaydet butonumuzun click eventine bu kodları yazalım.

if (Messagebox.Show("Kaydı onaylıyormusunuz?""Onay Verin", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
// Evet dersek kayıt işlemini yapmaya çalışacak 
{
//Evet dedik ve içerideki if e girdikten sonra metodumuza girdi
//şimdi oradaki işlemleri yapıp bize bir değer döndürecek
//bizde o değeri kullanarak başarılı/başarısız kontrolü yaparak kullanıcıyı bilgilendireceğiz.
     if(Kaydet() == true)
     {
     // eğer kayıt işleminde hata çıkarsa false dönecek, 
     // kayıt işlemi tamamlanırsa true dönecek
     //ve bizde bu geri dönen değeri kullanacağız.
      MessageBox.Show("Kayıt Başarılı""Başarılı", MessageBoxButtons.OK,     MessageBoxIcon.Information);
     }
     else
     {
      //eğer değer false dönerse bu kısıma gelecek 
      //ve kullanıcıya işlemin tamamlanamadığını bildirecek.
           MessageBox.Show("Kayıt işlemi sırasında bir hata oluştu""Başarısız", MessageBoxButtons.Ok, MessageBoxIcon.Warning);
     } 
}
Else
{
        MessageBox.Show("Kayıt işlemi tarafınızca iptal edilmiştir.""Kayıt İptal", MessageBoxButtons.Ok,     MessageBoxIcon.Information);
//Hayır dediğimiz için bu alana girdi ve bir bilgi mesajı gösterdik.
}


Gördüğünüz gibi arkadaşlar. Bir kayıt işlemi için kaç adet MessageBox kullandık. Tabi her zaman bu kadar yapmamıza gerek olmuyor. Şahsen ben sadece onay istedikten sonra kayıt yapıldı ve yapılmadı şeklinde 2 farklı mesaj gösteriyorum. Aşırıya kaçmak kullanıcıları bıktırır.

Şimdi de neden bool kullandık onu anlatayım.

Burada int yada string de kullanabilirdik ama bize evet yada hayır lazımdı. Yani kayıt yapıldı mı?
diye sorduğumuzda programın bize vermesini istediğimiz yanıtlar. Evet mi? Hayır mı? sadece bunun kontrolünü yaptık.

Ya bize birden fazla değer döndürmesi gerekiyorsa? Ozaman arkadaşlar int yada string kullanabiliriz ama ben performans açısından int i tavsiye ederim.
Şimdi örnekler ile inceleyelim.

int Islemlerim() // Mutlaka bir return değeri olmalıdır.
{
    int deger = 0;
 // birden fazla değer alabileceği için bir int tanımladık.
 // her işlemin sonunda bu degiskene bir deger atayacağız.
 // ama yalnız bir deger döner çoklu deger için farklı yöntemler kullanırız.

  //işlem kod bloğu
    deger = IsleminSonucu;

    return değer;
}

İşlemlerimizi yaptık ve bir sonuç çıkarıp değişkene atadık ve o degişkeni geri dönüş değeri olarak kullandık. Şimdi esas kullanmamız gereken yerde nasıl kullanırız ona bakalım.

Kaydet butonunun click eventine şu kodları yazalım.

if(Islemlerim() == 0)
{
  //dönen  değer 0 ise yapılacak işlemler
}
else if(Islemlerim() == 1)
{
  //dönen  değer 1 ise yapılacak işlemler
}

Bu kullanım şekli bize performans kaybı yaşatır. Performans kaybının sebebi ise her seferinde metoda girip işlemleri tekrar tekrar yapacak ki bu ek olarak hata payını da çoğaltır.. Performans kaybını minimize edecek bir yolumuz var. Degişken kullanmak;

int i = Islemlerim();
if(i == 0)
{
  //dönen  değer 0 ise yapılacak işlemler
}
else if(i == 1)
{
  //dönen  değer 1 ise yapılacak işlemler
}

String kullanımıda aynıdır. Bunda da sadece string bir değişken tanımlamak gerekir.

Aynı anda birden fazla değer göndemek isterseniz de List<T> kullanmanız gerekir. 
List<T> kullanımı içinde C# List Kullanımı makalemden öğrenebilirsiniz..

 List<int> islemlerim()
        {
           List<int> l =  new List<int>();

           // 1. işlem
           l.Add(0); // işlem 1 in sonucu

           // 2. işlem
           l.Add(1); // işlem 2 nin sonucu

           return l;
        }
Liste içerisinde ekldiğimiz değerleri nasıl kullanırız?
Kaydet butonunun click eventine şu kodları yazalım.

List<int> Listem = islemlerim();
if(Listem[0] == 0)
{
  //Listedeki 1. değer  0 ise yapılacak işlemler
}
else if(Listem[1] == 1)
{
  //Listedeki 2. değer  1 ise yapılacak işlemler
}

Şeklinde tek metod ile birden fazla değer döndürebilirsiniz.

Saygılarımla
Mustafa BÜKÜLMEZ


0 Yorum: