• 29-12-2013, 14:44:21
    #1
    Merhabalar arkadaşlar..



    Elimizde 2 combobox var diyelim.

    1. combobox'ta kategoriler var.
    2. Combobox'ta ise ürünler var.

    ÖRNEK :

    1.combobox'ta---> BİLGİSAYAR ve TELEFON kategorileri var diyelim.

    Ben Bilgisayar kategorisini seçtiğim zaman 2. combobox'ta hemen;
    -Lenovo
    -Asus
    -Acer
    -Dell

    sıralansın istiyorum.



    1. Combobox'ta telefonu seçtiğim an;

    2. combobox'ta;

    -iPhone
    -Samsung
    -Nokia

    ürünleri sıralansın istiyorum.

    Bunu nasıl yapabilirim? Yardımcı olabilecek olan var mıdır acaba?
  • 29-12-2013, 15:10:19
    #2
    Merhaba,

    Combobox'ların Edit Items alanlarını doldurduğunuzu varsayarsak şu şekilde bir işlem yapabilirsiniz;

    public Form1()
            {
                
                InitializeComponent();
                comboBox1.SelectedValueChanged += new EventHandler(comboBox1_SelectedValueChanged);
            }
    
            void comboBox1_SelectedValueChanged(object sender, EventArgs e)
            {
                if (comboBox1.SelectedItem.ToString() == "Bilgisayar")
                {
                    comboBox2.Items.Clear();
                    object[] pcs = {"Lenova", "Asus", "Acer", "Dell" };
                    comboBox2.Items.AddRange(pcs);
                }
    
                if (comboBox1.SelectedItem.ToString() == "Telefon")
                {
                    comboBox2.Items.Clear();
                    object[] phones = {"iPhone", "Samsung", "Nokia" };
                    comboBox2.Items.AddRange(phones);
    
                }
            }
    Teşekkürler.
  • 29-12-2013, 16:07:00
    #3
    Çok teşekkür ederim.

    Peki bir de şöyle bir soru sorayım. Ayrıca yeni konu açmayayım şimdi.

    Elimde şöyle iki tane form var.



    Form2'de kategorisi ve hemen karşısında ürün adı ve onunda karşısında fiyatları olacak şekilde ürünler listelenmiş.

    Şuanda soracağım soruda fiyatlar ve bizi ilgilendirmiyor tabi.
    Form2deki kategoriler kısmında görünen "bilgisayar, telefon, fotoğraf makinesi" kategorilerini ben form1deki combobox'a elimle ekledim zaten.

    Sorum şu : Form2de de gördüğünüz gibi kategoriler ve kategoriye ait ürünler karmaşık olarak aynı listede sıralanmışlar. Ben form1'deki Combobox'ta bilgisayarı seçtiğim zaman, form2'deki Lenovo ve Apple markalarını, form1'deki combobox2'de göstersin.

    benzer şekilde, Ben form1'deki Combobox1'de " fotoğraf makinesi"ni seçtiğim zaman, form2'deki "Canon" markasını form1'deki combobox2'de göstersin. istiyorum.

    Form2'den Form1'e verileri sorunsuz bir şekilde çekebiliyorum ben zaten. Orada bir sıkıntım yok. Tek sıkıntım çektiğim yer verileri, kategori seçimi yaparken sınırlayamamak. Şuanda mesela ben form1deki "combobox1"de "fotoğraf makinesi" seçtiğim zaman, form1deki combobox2'de bilgisayar urunleri de listeleniyor. Yani form2deki listboxtan hepsini alıyor. ürünleri kategorize edemedim yani.

    Umarım sorunumu anlatabilmişimdir.
  • 30-12-2013, 10:20:39
    #4
    Merhaba,
    Belirttiğiniz şekilde ComboBox nasıl kullanılır öğrenmeniz için örnek bir proje hazırladım. Projeyi buradan indirebilirsiniz. Anlamadığınız yer olursa sorarsanız yardımcı olurum. Projede örnek olarak NORTHWIND veritabanı kullanılmıştır.

    Direkt kodları da yazayım incelemek isteyenler için.
    Öncelikle Database.cs içerisindeki Database kodları;
    namespace ComboboxSample
    {
        using System;
        using System.Data;
        using System.Data.SqlClient;
        public class Database
        {
            public string Error { get; set; }
            private SqlConnection connection;
    
            private SqlConnection OpenConnection()
            {
                try
                {
                    this.connection = new SqlConnection("Data Source=BYOGUZ; Initial Catalog=NORTHWND; User Id=sa; Password=123456;");
                    this.connection.Open();
                    return this.connection;
                }
                catch (Exception)
                {
                    throw;
                }
            }
            private void CloseConnection()
            {
                if (this.connection != null && this.connection.State == System.Data.ConnectionState.Open)
                {
                    this.connection.Close();
                    this.connection.Dispose();
                    this.connection = null;
                }
    
            }
    
            public DataTable GetDataTable(string sql)
            {
                try
                {
                    using (var command = new SqlCommand(sql, OpenConnection()))
                    {
                        using (var adap = new SqlDataAdapter(command))
                        {
                            using (var table = new DataTable())
                            {
                                adap.Fill(table);
                                return table;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    this.Error = ex.ToString();
                    return null;
                }
                finally
                {
                    CloseConnection();
                }
            }
            public DataTable GetDataTable(SqlCommand command)
            {
                try
                {
                    command.Connection = OpenConnection();
                    using (var adap = new SqlDataAdapter(command))
                    {
                        using (var table = new DataTable())
                        {
                            adap.Fill(table);
                            return table;
                        }
                    }
    
                }
                catch (Exception ex)
                {
                    this.Error = ex.ToString();
                    return null;
                }
                finally
                {
                    command.Dispose();
                    CloseConnection();
                }
            }
        }
    }

    Buda formumuzun kod tarafı.
    namespace ComboboxSample
    {
        using System;
        using System.Data.SqlClient;
        using System.Windows.Forms;
    
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.Db = new Database();
            }
    
            private Database Db;
            private void SetComboBox(ComboBox combo, object dataSource, string valueMember, string displayMember)
            {
                lock (combo)
                {
                    combo.DataSource = dataSource;
                    combo.DisplayMember = displayMember;
                    combo.ValueMember = valueMember;
                }
    
            }
    
            private void btnKategoriYukle_Click(object sender, EventArgs e)
            {
                var source = Db.GetDataTable("SELECT CategoryID, CategoryName FROM Categories");
                if (source == null)
                {
                    MessageBox.Show(Db.Error);
                }
                else
                {
                    SetComboBox(cmbKategori, source, "CategoryID", "CategoryName");
                }
            }
    
            private void cmbKategori_SelectedValueChanged(object sender, EventArgs e)
            {
                try
                {
                    int categoryId = Convert.ToInt32(cmbKategori.SelectedValue);
                    var command = new SqlCommand("SELECT ProductID,ProductName FROM Products WHERE CategoryID=@CategoryId");
                    command.Parameters.AddWithValue("@CategoryId", categoryId);
                    var source = Db.GetDataTable(command);
                    if (source == null)
                    {
                        MessageBox.Show(Db.Error);
                    }
                    else
                    {
                        SetComboBox(cmbUrun, source, "ProductID", "ProductName");
                    }
                }
                catch (Exception)
                {
    
                }
            }
    
            private void cmbUrun_SelectedValueChanged(object sender, EventArgs e)
            {
                try
                {
                    int productId = Convert.ToInt32(cmbUrun.SelectedValue);
                    var command = new SqlCommand("SELECT OrderID,UnitPrice FROM OrderDetails WHERE ProductID=@ProductId");
                    command.Parameters.AddWithValue("@ProductId", productId);
                    var source = Db.GetDataTable(command);
                    if (source == null)
                    {
                        MessageBox.Show(Db.Error);
                    }
                    else
                    {
                        SetComboBox(cmbBirimFiyat, source, "OrderID", "UnitPrice");
                    }
                }
                catch (Exception)
                {
    
                }
            }
        }
    }