none
İlişkilendirilmiş ComboBox - YARDIM. RRS feed

  • Soru

  • Herkese merhaba,
    Size bir konu ile ilgili danışmak istiyorum.

    Bir tablom var,
    STOK_KODU / STOK_ADI / BOLGE /  FIYAT
      STOK1              TUGLA         1              0.50
      STOK2              PALET          1              0.75
    Boyle bir tabloda combobox lar ile çalışıyorum isteğim, stok 1 i seçtiğimde diğer comboboxlar da bana sadece stok1 ile ilgili olan değerleri göstersin. Bunu nasıl yapabilirim ?

    10 Ocak 2018 Çarşamba 09:43

Yanıtlar

  • Merhaba, İstediğin şey için ilişkilendirilmiş tablo gereklidir. Yani Stok 1 seçince ilgili alt başlıklar için veritabanında stok2 tablonda ForeignKey olarak Stok 1 tablondaki ilgili ürünün id 'si olmalıdır. Mesela ArabaMarkalari diye tablon var ve Ford marka arabanın stok 1 'deki id numarası 2 olsun. combobox 1 'den Ford seçince combobox 2 'de Fiesta, Focus gelmesi için Modeller tablosunda Fiesta ve Focusun karşısında Ford'un Markalar tablosundaki id numarası ForeignKey(Yabancı anahtar) olarak tanımlı olması gerekir. Yanlış anlamadıysam , sanırım istediğin şey şu şekilde.

    Combobox1(Stok1) için.. private void Form1_Load(object sender, EventArgs e)

    { baglanti = new SqlConnection(Buraya baglanti cümlesi) DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDbDataAdapter("select * from stok1 ORDER BY Stok1_ID ASC ", baglanti); da.Fill(dt); comboBox1.ValueMember = "Stok1_ID"; comboBox1.DisplayMember = "Stok_Adi"; comboBox1.DataSource = dt; }

    //comboBox1 'in SelectedIndexChanged event'ına bu kodları yazacaksın private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedIndex != -1) { DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter("select * from Stok2 where stok1_id= " + comboBox1.SelectedValue, baglanti); da.Fill(dt); comboBox2.ValueMember = "stok1_id"; comboBox2.DisplayMember = "Stok2_Adi"; comboBox2.DataSource = dt; } }




    • Düzenleyen Murat Erdemir 10 Ocak 2018 Çarşamba 20:09
    • Yanıt Olarak Öneren A.M. Sabuncu 10 Ocak 2018 Çarşamba 20:37
    • Yanıt Önerisini Geri Alan A.M. Sabuncu 10 Ocak 2018 Çarşamba 20:40
    • Yanıt Olarak İşaretleyen dogaaloglu 10 Ocak 2018 Çarşamba 23:25
    10 Ocak 2018 Çarşamba 20:04
  • Daha önce de belirttiğim gibi, ilk combobox'da kullanıcı tarafından STOK1 seçildiğinde, diğer combobox'ları dinamik olarak doldurmanız gerekli.  Tüm kodunuzu görmeden bunu nasıl yapacağınızı söyleyemem.  İsterseniz projenizi OneDrive ya da Google Drive'dan sıkıştırılmış olarak paylaşabilirsiniz.

    Ayrıca Murat Erdemir'in yanıtını inceleyip, kendi veritabanı tasarımınızın ona uyup uymadığını kontrol edin.

    • Düzenleyen A.M. Sabuncu 10 Ocak 2018 Çarşamba 20:47
    • Yanıt Olarak İşaretleyen dogaaloglu 10 Ocak 2018 Çarşamba 23:25
    10 Ocak 2018 Çarşamba 20:43

Tüm Yanıtlar

  • Diğer combobox'ları dolduran kodunuzu paylaşmamışsınız?

    Combobox'ları doldururken, "SELECT ... WHERE STOK_KODU = `STOK1`" (ya da benzer) bir ifade kullanmanız gerekir.

    10 Ocak 2018 Çarşamba 15:37
  • Diğer bilgileri neden combobox'lar içerisinde görüntülemek istediğinizi açıklar mısınız.?.

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

    10 Ocak 2018 Çarşamba 19:34
  • Merhaba, İstediğin şey için ilişkilendirilmiş tablo gereklidir. Yani Stok 1 seçince ilgili alt başlıklar için veritabanında stok2 tablonda ForeignKey olarak Stok 1 tablondaki ilgili ürünün id 'si olmalıdır. Mesela ArabaMarkalari diye tablon var ve Ford marka arabanın stok 1 'deki id numarası 2 olsun. combobox 1 'den Ford seçince combobox 2 'de Fiesta, Focus gelmesi için Modeller tablosunda Fiesta ve Focusun karşısında Ford'un Markalar tablosundaki id numarası ForeignKey(Yabancı anahtar) olarak tanımlı olması gerekir. Yanlış anlamadıysam , sanırım istediğin şey şu şekilde.

    Combobox1(Stok1) için.. private void Form1_Load(object sender, EventArgs e)

    { baglanti = new SqlConnection(Buraya baglanti cümlesi) DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDbDataAdapter("select * from stok1 ORDER BY Stok1_ID ASC ", baglanti); da.Fill(dt); comboBox1.ValueMember = "Stok1_ID"; comboBox1.DisplayMember = "Stok_Adi"; comboBox1.DataSource = dt; }

    //comboBox1 'in SelectedIndexChanged event'ına bu kodları yazacaksın private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedIndex != -1) { DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter("select * from Stok2 where stok1_id= " + comboBox1.SelectedValue, baglanti); da.Fill(dt); comboBox2.ValueMember = "stok1_id"; comboBox2.DisplayMember = "Stok2_Adi"; comboBox2.DataSource = dt; } }




    • Düzenleyen Murat Erdemir 10 Ocak 2018 Çarşamba 20:09
    • Yanıt Olarak Öneren A.M. Sabuncu 10 Ocak 2018 Çarşamba 20:37
    • Yanıt Önerisini Geri Alan A.M. Sabuncu 10 Ocak 2018 Çarşamba 20:40
    • Yanıt Olarak İşaretleyen dogaaloglu 10 Ocak 2018 Çarşamba 23:25
    10 Ocak 2018 Çarşamba 20:04
  • Mesela 

    stok_kodu = stok1
    stok_adı = tugla
    bölge = 3
    fiyat= 0.5

    guncelleme formunda ilgili combobox dan stok1 i seçtiğinde otomatik olarak tugla gelmesini istiyorum ve bölgeyi seçtiğinde ise ilgili combobox a o bölgeye ait fiyat gelsin ve ordan güncelleme yapabilsin.

    10 Ocak 2018 Çarşamba 20:05
  • Diğer combobox'ları dolduran kodunuzu paylaşmamışsınız?

    for (int i = 0; i < dataGridView1.RowCount; i++)  
                {

                    if (!comboStokKodu.Items.Contains(dataGridView1.Rows[i].Cells[0].Value)) 
                    {
                        comboStokKodu.Items.Add(dataGridView1.Rows[i].Cells[0].Value.ToString());
                    }

                }

    Cümlem bu

                                                
    10 Ocak 2018 Çarşamba 20:07
  • Lütfen veritabanı tablo yapınızı paylaşın.
    10 Ocak 2018 Çarşamba 20:18
  • CREATE TABLE [dbo].[Stok](
    [STOK_KODU] [varchar](50) NOT NULL,
    [STOK_ADI] [varchar](50) NOT NULL,
    [BOLGE] [int] NOT NULL,
    [BANT_FIYATI] [money] NOT NULL,
     CONSTRAINT [PK_STOK] PRIMARY KEY CLUSTERED 
    (
    [STOK_KODU] ASC,
    [BOLGE] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    10 Ocak 2018 Çarşamba 20:28
  • Daha önce de belirttiğim gibi, ilk combobox'da kullanıcı tarafından STOK1 seçildiğinde, diğer combobox'ları dinamik olarak doldurmanız gerekli.  Tüm kodunuzu görmeden bunu nasıl yapacağınızı söyleyemem.  İsterseniz projenizi OneDrive ya da Google Drive'dan sıkıştırılmış olarak paylaşabilirsiniz.

    Ayrıca Murat Erdemir'in yanıtını inceleyip, kendi veritabanı tasarımınızın ona uyup uymadığını kontrol edin.

    • Düzenleyen A.M. Sabuncu 10 Ocak 2018 Çarşamba 20:47
    • Yanıt Olarak İşaretleyen dogaaloglu 10 Ocak 2018 Çarşamba 23:25
    10 Ocak 2018 Çarşamba 20:43
  • Önce yanıt olarak önerdim fakat sonra geri aldım, çünkü kullanıcının henüz "ilişkilendirilmiş tablo"yu kavrayacak seviyede olduğuna emin değilim.  Ama örnek güzel ve olması gereken bu.
    10 Ocak 2018 Çarşamba 20:46
  • Merhaba, İstediğin şey için ilişkilendirilmiş tablo gereklidir. Yani Stok 1 seçince ilgili alt başlıklar için veritabanında stok2 tablonda ForeignKey olarak Stok 1 tablondaki ilgili ürünün id 'si olmalıdır. Mesela ArabaMarkalari diye tablon var ve Ford marka arabanın stok 1 'deki id numarası 2 olsun. combobox 1 'den Ford seçince combobox 2 'de Fiesta, Focus gelmesi için Modeller tablosunda Fiesta ve Focusun karşısında Ford'un Markalar tablosundaki id numarası ForeignKey(Yabancı anahtar) olarak tanımlı olması gerekir. Yanlış anlamadıysam , sanırım istediğin şey şu şekilde.

    Combobox1(Stok1) için.. private void Form1_Load(object sender, EventArgs e)

    { baglanti = new SqlConnection(Buraya baglanti cümlesi) DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDbDataAdapter("select * from stok1 ORDER BY Stok1_ID ASC ", baglanti); da.Fill(dt); comboBox1.ValueMember = "Stok1_ID"; comboBox1.DisplayMember = "Stok_Adi"; comboBox1.DataSource = dt; }

    //comboBox1 'in SelectedIndexChanged event'ına bu kodları yazacaksın private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedIndex != -1) { DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter("select * from Stok2 where stok1_id= " + comboBox1.SelectedValue, baglanti); da.Fill(dt); comboBox2.ValueMember = "stok1_id"; comboBox2.DisplayMember = "Stok2_Adi"; comboBox2.DataSource = dt; } }




    Öncelikle cevabınız için çok teşekkür ederim murat bey, database de tek bir tablo var ben durumu biraz daha açayım,aşağıdaki kod ile bir datagrid dolduruyorum ve daha sonra KAYDET,SİL,GÜNCELLE gibi butonlar ile bu datagrid de değişiklikler yapıyorum. Tabloda STOK KODU, FİYAT, BÖLGE adlarında değişkenler tanımlı veri işlendikçe comboboxlara tablodan ilgili değerleri çekiyorum. Amacım Stok kodunu seçtiğinde otomatik olarak bana STOK_ADI nı getirsin kullanıcıya bunu seçtirtmiyim. Kullanıcı sadece bölge ve değiştirmek istediği fiyatı seçip güncelleme yapabilsin.

    public  List<Stok> GetAllItems()
                {
                    SqlCommand cmd = dbConnection.GetSqlCommand();
                    cmd.CommandText = "SELECT * FROM STOK";                

                    List<Stok> stoklar = new List<Stok>();

                    SqlDataReader rdr = cmd.ExecuteReader();

                    while (rdr.Read()) //Stok List'ini dolduruyoruz.
                    {
                        Stok stok = new Stok();   //Stok nesnesi için bir property oluşturuyoruz. Her kolonun property'sini listedeki o kolon ile ilgili yere atıyoruz.                

                        stok.STOK_KODU = rdr["STOK_KODU"].ToString();             
                        stok.STOK_ADI = rdr["STOK_ADI"].ToString();
                        stok.BOLGE = rdr["BOLGE"].ToString();
                        stok.BANT_FIYATI = Convert.ToDecimal(rdr["BANT_FIYATI"]);

                        stoklar.Add(stok); // GİRİLEN PROPERTYLERI STOK NESNESINE ATAR.
                    }           

                return stoklar;
            }

                
    11 Ocak 2018 Perşembe 08:33
  • Kullanıcının bu değerleri neden seçmesi gerekiyor?  Seçmekten başka yapabileceği birşey var mı?
    11 Ocak 2018 Perşembe 11:39