none
ComboBox Id atama, Veritabanından Id ye göre çekilen verileri başka comboBoxlara doldurma RRS feed

  • Soru

  • 

    Merhaba arkadaşlar;

    ComboBox'a ad+soy bilgisinin listelenmesini istiyorum. ve bunu aşağıdaki metotla yaptım. 

    Daha sonra 

    private void DersProgrami_Load(object sender, EventArgs e)
            {
                Listele.ComboDoldur(Komut, TabloAd,TabloAd1, cmbPersonelAdi);
    
                
    
            }

    kodlarıyla comboBox'ı dolduruyorum. Şimdi ise yapmak istediğim, comboBox tan bir isim seçildiğinde aynı form üzerindeki comboBoxlara değer ataması. Mantığını anlamak için hepsini aynı tabloda tutuyorum, tablom ise şu şekilde:

    Sıkıntım şu;

    comboboxtan Mahmut hakan ı seçtiğimde cmbpazartesine 21 yazacak. Id ye göre getirme işlemi yapıcam. dataTable tabloyu doldursam sadece pazartesi karşığındaki hücreyi nasıl çekebileceği mi de bilmiyorum. Arka planda Id yi saklamayı başaramadım. Forumda bir arkadaş tag ile yapılacağını söylemiş 2013 de ama ben beceremedim. 

    1 Mart 2019 Cuma 06:48

Yanıtlar

  • SELECT *, Ad + ' ' + Soyad AS AdSoyad FROM TabloAdi

    SQL ifadenizi yukarıdaki gibi düzenleyip,

    private static void ComboDoldur(string Komut, string Kolon,  ComboBox combox)
    {
        DataTable dTable = new DataTable();
        using (SqLiteConnection con = new SqLiteConnection(Baglanti.bag.ConnectionString))
        {
            using (SqLiteDataAdapter dAdapter = new SqLiteDataAdapter(Komut, con))
            {
                dAdapter.Fill(dTable);
            }
        }
        combox.DisplayMember = $"{Kolon}";
        combox.ValueMember = "Id";
        combox.DataSource = dTable;
    }
    kullanabilirsiniz. 


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen İYİLİK52 7 Mart 2019 Perşembe 13:32
    6 Mart 2019 Çarşamba 15:38
  • Select komutunda iki kolonun adinin birleşimi bir kolon adi oldugunu sanmıyorum. Ornegin select komutun:

    select ad, soyad, ...,  ad+' '+soyad as ad_soyad from ...

    olsa:

    DisplayMember = "adsoyad";

    olmaz, ama:

    DisplayMember = "ad_soyad";

    istediğin sey olur.

    Ben MS SQL ornek database'i Northwind ile daha esnek bir ornek vereyim sen istediğini kullan:

    void Main()
    {
        DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=Northwind");
    
        Form f = new Form { Text="ComboBox ornek", Height=200, Width=500 };
        ComboBox cb = new ComboBox{ Left=10, Top=10, Width=450, Font=new Font("Courier New",8) };
        TextBox txtCustomerId = new TextBox{ Left=10, Top=40 };
        TextBox txtCompanyName = new TextBox{ Left=10, Top=70 };
        TextBox txtContactName = new TextBox{ Left=10, Top=100 };
        TextBox txtCity = new TextBox{ Left=10, Top=130 };
        
        f.Controls.AddRange( new Control[] {cb, txtCustomerId, txtCompanyName, txtContactName, txtCity} );
        
        Table<Customer> Customers = db.GetTable<Customer>();
    
        var query =
            from cust in Customers
            where cust.ContactName.StartsWith("A")
            select cust;
    
        cb.DataSource = query.ToList();
        
        cb.SelectedIndexChanged += (sender, args) => { 
        var secilenMusteri = (Customer)cb.SelectedValue;
        txtCustomerId.Text = secilenMusteri.CustomerID;
        txtCompanyName.Text = secilenMusteri.CompanyName;
        txtContactName.Text = secilenMusteri.ContactName;
        txtCity.Text = secilenMusteri.City;
        };
        f.Show();
    }
    
    [Table(Name = "Customers")]
    public class Customer
    {
        [Column]
        public string ContactName { get; set; }
        [Column]
        public string CustomerID { get; set; }
        [Column]
        public string CompanyName { get; set; }
        [Column]
        public string City { get; set; }
        
    // Otomatik DisplayMember
        public override string ToString()
        {
        return string.Format("[{0,-15}] | {1, -30} | {2}", this.City, this.CompanyName, this.ContactName );
        }
    }


    6 Mart 2019 Çarşamba 15:19
    Yanıtlayıcı
  • SQLite kullanıyorum. Onunla ilgili olamaz değil mi? tüm alternatifleri denedim çalışmıyor.

    string Komut1 = "SELECT  (Adi || ' ' || Soyadi) as AdSoyad from Ogretmen";

    Bu komutla sorunu çözdüm arkadaşlar, Teşekkür ederim ilgilendiğiniz için.
    • Yanıt Olarak İşaretleyen İYİLİK52 7 Mart 2019 Perşembe 13:32
    7 Mart 2019 Perşembe 13:32

Tüm Yanıtlar

  • private static void ComboDoldur(string Komut, string Kolon1, string Kolon2, ComboBox combox)
    {
        DataTable dTable = new DataTable();
    using (SqLiteConnection con = new SqLiteConnection(Baglanti.bag.ConnectionString))
        {
            using (SqLiteDataAdapter dAdapter = new SqLiteDataAdapter(Komut, con))
            {
                dAdapter.Fill(dTable);
            }
        }
        combox.DisplayMember = $"{Kolon1} {Kolon2}";
        combox.ValueMember = "Id";
        combox.DataSource = dTable;
    }


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    1 Mart 2019 Cuma 07:09
  • Seçilen ada ait Id değerini almak için,

    cmbPersonelAdi.SelectedValue

    değişkeninin değerini kullanabilirsiniz.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    1 Mart 2019 Cuma 07:34
  • combobox.Tag bir tane. Bu sekilde doldurmanın amaci ne?
    1 Mart 2019 Cuma 11:56
    Yanıtlayıcı
  • private static void ComboDoldur(string Komut, string Kolon1, string Kolon2, ComboBox combox)
    {
        DataTable dTable = new DataTable();
    using (SqLiteConnection con = new SqLiteConnection(Baglanti.bag.ConnectionString))
        {
            using (SqLiteDataAdapter dAdapter = new SqLiteDataAdapter(Komut, con))
            {
                dAdapter.Fill(dTable);
            }
        }
        combox.DisplayMember = $"{Kolon1} {Kolon2}";
        combox.ValueMember = "Id";
        combox.DataSource = dTable;
    }


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    combox.DisplayMember = $"{Kolon1}{Kolon2}";

    DisplayMember bölümüne tek kolon ismi verdiğimde değişkenli veya değişkensiz problemsiz bir şekilde comboboxta ad gösteriliyor. ancak iki kolon ismi verirsem "System.Data.DataRowView" olarak çıktı veriyor.  
    6 Mart 2019 Çarşamba 09:20
  • Select komutunda iki kolonun adinin birleşimi bir kolon adi oldugunu sanmıyorum. Ornegin select komutun:

    select ad, soyad, ...,  ad+' '+soyad as ad_soyad from ...

    olsa:

    DisplayMember = "adsoyad";

    olmaz, ama:

    DisplayMember = "ad_soyad";

    istediğin sey olur.

    Ben MS SQL ornek database'i Northwind ile daha esnek bir ornek vereyim sen istediğini kullan:

    void Main()
    {
        DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=Northwind");
    
        Form f = new Form { Text="ComboBox ornek", Height=200, Width=500 };
        ComboBox cb = new ComboBox{ Left=10, Top=10, Width=450, Font=new Font("Courier New",8) };
        TextBox txtCustomerId = new TextBox{ Left=10, Top=40 };
        TextBox txtCompanyName = new TextBox{ Left=10, Top=70 };
        TextBox txtContactName = new TextBox{ Left=10, Top=100 };
        TextBox txtCity = new TextBox{ Left=10, Top=130 };
        
        f.Controls.AddRange( new Control[] {cb, txtCustomerId, txtCompanyName, txtContactName, txtCity} );
        
        Table<Customer> Customers = db.GetTable<Customer>();
    
        var query =
            from cust in Customers
            where cust.ContactName.StartsWith("A")
            select cust;
    
        cb.DataSource = query.ToList();
        
        cb.SelectedIndexChanged += (sender, args) => { 
        var secilenMusteri = (Customer)cb.SelectedValue;
        txtCustomerId.Text = secilenMusteri.CustomerID;
        txtCompanyName.Text = secilenMusteri.CompanyName;
        txtContactName.Text = secilenMusteri.ContactName;
        txtCity.Text = secilenMusteri.City;
        };
        f.Show();
    }
    
    [Table(Name = "Customers")]
    public class Customer
    {
        [Column]
        public string ContactName { get; set; }
        [Column]
        public string CustomerID { get; set; }
        [Column]
        public string CompanyName { get; set; }
        [Column]
        public string City { get; set; }
        
    // Otomatik DisplayMember
        public override string ToString()
        {
        return string.Format("[{0,-15}] | {1, -30} | {2}", this.City, this.CompanyName, this.ContactName );
        }
    }


    6 Mart 2019 Çarşamba 15:19
    Yanıtlayıcı
  • SELECT *, Ad + ' ' + Soyad AS AdSoyad FROM TabloAdi

    SQL ifadenizi yukarıdaki gibi düzenleyip,

    private static void ComboDoldur(string Komut, string Kolon,  ComboBox combox)
    {
        DataTable dTable = new DataTable();
        using (SqLiteConnection con = new SqLiteConnection(Baglanti.bag.ConnectionString))
        {
            using (SqLiteDataAdapter dAdapter = new SqLiteDataAdapter(Komut, con))
            {
                dAdapter.Fill(dTable);
            }
        }
        combox.DisplayMember = $"{Kolon}";
        combox.ValueMember = "Id";
        combox.DataSource = dTable;
    }
    kullanabilirsiniz. 


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen İYİLİK52 7 Mart 2019 Perşembe 13:32
    6 Mart 2019 Çarşamba 15:38
  • SELECT *, Ad + ' ' + Soyad AS AdSoyad FROM TabloAdi

    SQL ifadenizi yukarıdaki gibi düzenleyip,

    private static void ComboDoldur(string Komut, string Kolon,  ComboBox combox)
    {
        DataTable dTable = new DataTable();
        using (SqLiteConnection con = new SqLiteConnection(Baglanti.bag.ConnectionString))
        {
            using (SqLiteDataAdapter dAdapter = new SqLiteDataAdapter(Komut, con))
            {
                dAdapter.Fill(dTable);
            }
        }
        combox.DisplayMember = $"{Kolon}";
        combox.ValueMember = "Id";
        combox.DataSource = dTable;
    }
    kullanabilirsiniz. 


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    Bu kodun benzer bir şeklini denemiştim, bunu da denedim ancak bu seferde coboboxlarda 0 yazıyor. Ad soyadı birleştirmeyi beceremedim.
    7 Mart 2019 Perşembe 05:35
  • SELECT *, Ad + ' ' + Soyad AS AdSoyad FROM TabloAdi

    SQL ifadenizi yukarıdaki gibi düzenleyip,

    private static void ComboDoldur(string Komut, string Kolon,  ComboBox combox)
    {
        DataTable dTable = new DataTable();
        using (SqLiteConnection con = new SqLiteConnection(Baglanti.bag.ConnectionString))
        {
            using (SqLiteDataAdapter dAdapter = new SqLiteDataAdapter(Komut, con))
            {
                dAdapter.Fill(dTable);
            }
        }
        combox.DisplayMember = $"{Kolon}";
        combox.ValueMember = "Id";
        combox.DataSource = dTable;
    }
    kullanabilirsiniz. 


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    Bu kodun benzer bir şeklini denemiştim, bunu da denedim ancak bu seferde coboboxlarda 0 yazıyor. Ad soyadı birleştirmeyi beceremedim.

    Sıkıntı kodlardan kaynaklanmıyor veritabanı tarafından sıfır sorgusu çıkıyo. integer kolonlarda birleştirme yapabiliyor ve birleşmiş halini comboboxta gösteriyor ancak string ifadeleri integer olarak görüntülüyor. o yüzden 0(Sıfır) olarak görünüyor. 

    SELECT *, Ad + ' ' + Soyad AS "AdSoyad" FROM TabloAdi

    Yeni tablo adını ""(tırnak) içine almamaktan mı kaynaklanıyor dedim öyle yaptum yine olmadı. Tablolorda bir hata oluştu sanırım. Tabloları silip tekrar deneyeceğim. TEşekkür ederim.

    7 Mart 2019 Perşembe 05:53
  • SELECT *, Ad + ' ' + Soyad AS AdSoyad FROM TabloAdi

    SQL ifadenizi yukarıdaki gibi düzenleyip,

    private static void ComboDoldur(string Komut, string Kolon,  ComboBox combox)
    {
        DataTable dTable = new DataTable();
        using (SqLiteConnection con = new SqLiteConnection(Baglanti.bag.ConnectionString))
        {
            using (SqLiteDataAdapter dAdapter = new SqLiteDataAdapter(Komut, con))
            {
                dAdapter.Fill(dTable);
            }
        }
        combox.DisplayMember = $"{Kolon}";
        combox.ValueMember = "Id";
        combox.DataSource = dTable;
    }
    kullanabilirsiniz. 


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    Bu kodun benzer bir şeklini denemiştim, bunu da denedim ancak bu seferde coboboxlarda 0 yazıyor. Ad soyadı birleştirmeyi beceremedim.

    Sıkıntı kodlardan kaynaklanmıyor veritabanı tarafından sıfır sorgusu çıkıyo. integer kolonlarda birleştirme yapabiliyor ve birleşmiş halini comboboxta gösteriyor ancak string ifadeleri integer olarak görüntülüyor. o yüzden 0(Sıfır) olarak görünüyor. 

    SELECT *, Ad + ' ' + Soyad AS "AdSoyad" FROM TabloAdi

    Yeni tablo adını ""(tırnak) içine almamaktan mı kaynaklanıyor dedim öyle yaptum yine olmadı. Tablolorda bir hata oluştu sanırım. Tabloları silip tekrar deneyeceğim. TEşekkür ederim.

     SELECT*, Adi + ' ' + Soyadi AS "AdSoyad" FROM Ogretmen

    Neden 0.0 olarak dönüt alıyorum. Halledemedim. İnteger ifadelerini topluyor. sıkıntı nedir acaba son bir yardım talep ediyorum.
    7 Mart 2019 Perşembe 11:25
  • SELECT *, CONCAT(Adi, ' ', Soyadi) AS "AdSoyad" FROM Ogretmen
    kullanın.

    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    7 Mart 2019 Perşembe 11:39
  • SQLite kullanıyorum. Onunla ilgili olamaz değil mi? tüm alternatifleri denedim çalışmıyor.

    7 Mart 2019 Perşembe 13:05
  • SQLite kullanıyorum. Onunla ilgili olamaz değil mi? tüm alternatifleri denedim çalışmıyor.

    string Komut1 = "SELECT  (Adi || ' ' || Soyadi) as AdSoyad from Ogretmen";

    Bu komutla sorunu çözdüm arkadaşlar, Teşekkür ederim ilgilendiğiniz için.
    • Yanıt Olarak İşaretleyen İYİLİK52 7 Mart 2019 Perşembe 13:32
    7 Mart 2019 Perşembe 13:32
  • SQLite kullanıyorum. Onunla ilgili olamaz değil mi? tüm alternatifleri denedim çalışmıyor.

    Ornek verdigim halde kasmasaydın keske, o zaman sorun olmazdi.

    Madem Sqlite kullanıyorsun, onun data tiplerini, fonksiyonlarını, operatörlerini ... öğrenmen gerekmez mi? SQLite'da Concat() diye bir fonksiyon yok, ya da string birleştirmek icin + kullanılmıyor:

    select Ad, ... , 
       Ad || ' ' || Soyad as AdSoyad 
       from ...

    seklinde yazmalısın.

    Ama daha kolayi, yukarıda gösterdiğim gibi bir class oluşturup onun ToString'ini override etmek.


    7 Mart 2019 Perşembe 13:45
    Yanıtlayıcı