C# Listview'e Veri Basma?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Abizittin
    Abizittin's avatar
    Kayıt Tarihi: 19/Haziran/2008
    Erkek

    Hocalar merhaba

    C#'ta listview'e veri basarken kullanacağım ideal yöntemi işi bilen insanlara sormak istedim.

    Siparis adında bir sınıfım var ve içeriği şu şekilde:

    public class Siparis
        {
    
            public int siparisID { get; set; }
            public string siparisNo { get; set; }
            public int tedarikciID { get; set; }
            public DateTime siparisVerilmeTarihi { get; set; }
            public DateTime siparisTeslimTarihi { get; set; }
            public bool siparisDurumu { get; set; }
            public string siparisAciklama { get; set; }
            public string siparisIcerik { get; set; }
    
        }

    Ana formun yapılandırıcı metodunun içeriği de şu şekilde:

    public SiparisTakip()
            {
                InitializeComponent();
    
                Database.dbConnect();
    
                // Veritabanından siparişleri çeken komutum ve altında o verileri listeleyen komutum.
                MySqlCommand komut = new MySqlCommand("Select * from siparisler", Database.baglan);
                MySqlDataReader listele = komut.ExecuteReader();
    
                // Döngüye sokup sipariş kayıtlarını alıyorum.
                while (listele.Read())
                {
    
                    // Her yeni sipariş için bir obje oluşturuyorum ve nesnenin içindeki özelliklere verileri aktarıyorum.
                    Siparis siparis = new Siparis();
                    siparis.siparisNo = listele["siparisNo"].ToString();
                    siparis.siparisAciklama = listele["siparisAciklama"].ToString();
    
                    // Listview itemlerini burda doldurucam.
                    ListViewItem siparisSatirlari = new ListViewItem("1");
                    siparisSatirlari.SubItems.Add(siparis.siparisNo);
                    siparisSatirlari.SubItems.Add(siparis.siparisAciklama);
    
                    // Ardından oluşturduğum her bir sipariş nesnesini listenin içine ekliyorum.
                    lvSiparisListesi.Items.Add(siparisSatirlari);
    
                }
    
            }

    Sormak istediğim soru şu: Her yeni kayıt için döngü içerisinde yeni bi obje oluşturmak programa ek yük olarak döner mi? Bu kullanıma gerek var mıdır?
    Sadece veriyi çekip döngü içinde ListViewItem ile Siparis sınıfını kullanmadan ListView içine atmak bana ne kaybettirir? Üstteki kullanımın bana sağladığı en önemli şey OOP mantığına uyması mıdır?

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    merhaba,

     

    1-Her yeni kayıt için döngü içerisinde yeni bi obje oluşturmak programa ek yük olarak döner mi? 

    # Bilgisayarlarin bellekleri artik 128 mb degil hocam, sikinti yaratmaz. Ancak sorgundan milyonlarca kayit dönüyorsa böyle yapmak bastan beri mantiksizlik olur. Paging yapmani öneririm

     

    2- Bu kullanıma gerek var mıdır?

    # Bir datatable i datasource olarak kullanabilirsin. Ya da surrogate class yazarak istenilen propertyleri alabilirsin ve varsa eklemeler yapabilirsin

     

    3- Sadece veriyi çekip döngü içinde ListViewItem ile Siparis sınıfını kullanmadan ListView içine atmak bana ne kaybettirir?

    # Kodunda siparis sinifi gereksiz durmus zaten hocam. Onun yerine direk text olarak ekleyebilirdin. 

     

    4- Üstteki kullanımın bana sağladığı en önemli şey OOP mantığına uyması mıdır? 

    # OOP mantigini zaten hic kuramamissin. Sana tavsiyem her metodun yapmasi gereken bir is oldugunu düsün. Ancak bu constructor birden fazla is yapiyor ve gördügüm kadariyla bir winform un kurucu methodu. N-tier sekilde calismaya bak. Projenin büyüklügünü bilmiyorum ancak db deki verileri handle etmek icin icin Data Access Layer (DAL),  bu verileri cagirip, düzenleyen ve GUI ye gönderen yani bir köprü vazifesi gören Business Logic Layer (BLL) ve de view lerini barindirdigin GUI projesini ayirabilirsin. Aslinda daha farkli seyler de yapabilirsin ama basitce bu mantik üzerinden baslamani tavsiye ederim. Böylece verileri cekme olayini DAL'a, bu verileri isteyip-isleyecen-gönderen isini BLL ye, kullaniciya gösterme isini de GUI (Views) e verebilirsin. Burada dikkat etmen gereken GUI nin hic bir sekilde DAL ile isinin olmamasi. Kapsamina göre bir de Model projesi olusturabilirsin ya da Entity Framework kullaniyorsan DB first ile otomatik olarak classlarini yaratabilirsin.

     

    unbalanced tarafından 26/Tem/17 00:40 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    Sipariş diye bir arraysınıfı yaparsın ve static olarak tanımlarsın X , Y , Z Ekranlarında seçilen siparişin Unique id göre bir ararsın array sınıfı içerisinde . Aranan objeyi bulursun birdaha bahsettiğim X,Y,Z ekranlarında bu objenin verilerini kullanırsın.

    Bu programa hız katar ama bellekden refakat edersin. Yani şöyle ki. Bahsettiğim ekranlarda Tıklanılan sipariş unique id (veya başka bir key) çekip bunu tekrar sorgulayıp veritabanından dataları çekmek ekstra zaman demektir.

    Başka aklıma birşey gelmedi. Birde elindeki dataları ne kadar nesneye dökersen yönetimi o kadar kolaylaşır. Yani yarın öbürgün X Bir kişisine sen şu ekranı yap sana bu şekilde bir Sınıf göndereceği parametreler şunlar değişkenler şunlar dediğinde kişi veritabanından bağımsız senin vermiş olduğun sınıfa göre sana bir method veya  ekran artık her ne ise yazar..

    Obje yaparsan UML/USE-CASE diyagramlarının yönetimini daha basit hale getirirsin zaten sınıfla yapmazsan biraz karmaşık olacaktır (Benim görüşüm).

    OOP iyidir iyi olmasa Entitiy framework olmazdı hacı abi :D :D

    EDİT ; @unbalanced benden önce davranmış zaten dediklerimi okumayıp es geçebilirsin :D

    EDİT 2: Aman ha tüm databaseyi bi oje içerisine atıp da ordan arama yapma dediklerimden böyle birşey çıkarma lütfen . Bazı programlarda bu yapılıyor. Adam tüm tabloyu bi sınıf içerisine alıyor. Sen gerekli olan datayı çek en az düzeyde sakla. Tüm datayı çekme. asla..... 

    MhmdAlmz tarafından 26/Tem/17 00:43 tarihinde düzenlenmiştir

    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    dhmm
    dhmm's avatar
    Kayıt Tarihi: 15/Eylül/2011
    Erkek

    Hocam bende nacizane fikrimi soyliyim sana

    1 ) Entity framework kullan.

    2) Bir mimari kullan - Senin durumunda 3 layer architecture isni gorebilir

    3 layer

    3) Data binding kullan

    4) Generic Types kullan

    Su konuya bir goz at @unbalanced cok iyi anlatmisti

    https://www.tahribat.com/forum/c-entityframework6-datagridviewcomboboxcolumn-ile-229756

     

     


    Ozgurluk aslinda her istedigini yapabilmek degildir, istemedigini yapmamaktir. // Verdigin degeri gormeyince, gordugun degeri ver !!! // Hayatin herkes icin bir bavulu vardir !!! // Dusmek gerekir bazen hayatta; kalkmayi ogrenebilmek icin
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Abizittin
    Abizittin's avatar
    Kayıt Tarihi: 19/Haziran/2008
    Erkek

    hocalar cevaplarınız için çok teşekkür ederim.
    yazdığım kodun amatörce olduğunun farkındaydım. verdiğiniz cevaplar zaten düşünmem gereken şeylerin adlandırılmış bi biçimde somut dışavurumu gibi olmuş.
    ufkumu biraz daha açtığınız, kendimi geliştirmem gereken doğrultuyu gösterdiğiniz için tekrar teşekkürler.

Toplam Hit: 1625 Toplam Mesaj: 5
csharp