none
Dropdownda hem id hem text gözükebilir mi? RRS feed

  • Soru

  • Merhaba.

    Dropdownda hem id hem text gözükebilir mi? Örnek ile daha iyi açıklayayım.

    Tablom böyle

    MeslekID MeslekIsmi

         1         Memur

         2         Doktor

    Dropdown da böyle gözükmesini istiyorum.

    1.Memur

    2.Doktor

    Bu mümkün mü?

    30 Ocak 2015 Cuma 13:05

Yanıtlar

  • Tabii, ama acikcasi, .Net listbox, combobox eskileri kadar yetenekli degil (eskiler derken .Net oncesi olanlar ve ornegin VFP listbox, combobox). Nerede kullanmak istedigini belirtmemissin, windows forms demek istedigini var sayiyorum. WPF, Silverlight ... olsaydi, o zaman degil N kolon gostermek, istedigin gibi N kolon, M satir son derece gosterisli listbox, combobox yapabilirdin.

    Windows forms ile de aklima gelen iki cozum var:

    1) Listbox, combobox yerine onlari grid ile taklit edebilirsin (bir textbox, button ve grid iceren bir user control). Eventlerini kontrol edip yapman gerekiyor, birileri mutlaka yapmistir, codeplex'e filan bir goz at.

    2) Istedigin sadece 1.Memur, 2.Doktor ... seklinde basit bir gosterim ise, typed data yuklersin ve classinda ToString() metodunu override edersin. Listbox, Combobox eger sen DisplayMember ile oynamadiysan, yukledigi itemlarin ToString() metodunu kullanir:

    void Main()
    {
        DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=Northwind");
    
        Table<Customer> Customers = db.GetTable<Customer>();
    
        var query =
            from cust in Customers
            select cust;
        
        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} );
        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,-8}] | {1, -30} | {2}",
           this.CustomerID, this.CompanyName, this.ContactName );
        }
    }

    30 Ocak 2015 Cuma 14:57

Tüm Yanıtlar

  • SELECT Convert(varchar(50),MeslekID)+'.'+MeslekIsmi from tablo ..
    Verileri bu şekilde çekersen neden olmasın.
    30 Ocak 2015 Cuma 13:35
  • Id yi niye görsünler ki?

    Mail Gönder Blog

    30 Ocak 2015 Cuma 14:07
  • Aslında öğrenmek istediğim dropdownda iki sütündan veri çekip gösterebilmek.
    30 Ocak 2015 Cuma 14:37
  • Tabii, ama acikcasi, .Net listbox, combobox eskileri kadar yetenekli degil (eskiler derken .Net oncesi olanlar ve ornegin VFP listbox, combobox). Nerede kullanmak istedigini belirtmemissin, windows forms demek istedigini var sayiyorum. WPF, Silverlight ... olsaydi, o zaman degil N kolon gostermek, istedigin gibi N kolon, M satir son derece gosterisli listbox, combobox yapabilirdin.

    Windows forms ile de aklima gelen iki cozum var:

    1) Listbox, combobox yerine onlari grid ile taklit edebilirsin (bir textbox, button ve grid iceren bir user control). Eventlerini kontrol edip yapman gerekiyor, birileri mutlaka yapmistir, codeplex'e filan bir goz at.

    2) Istedigin sadece 1.Memur, 2.Doktor ... seklinde basit bir gosterim ise, typed data yuklersin ve classinda ToString() metodunu override edersin. Listbox, Combobox eger sen DisplayMember ile oynamadiysan, yukledigi itemlarin ToString() metodunu kullanir:

    void Main()
    {
        DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=Northwind");
    
        Table<Customer> Customers = db.GetTable<Customer>();
    
        var query =
            from cust in Customers
            select cust;
        
        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} );
        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,-8}] | {1, -30} | {2}",
           this.CustomerID, this.CompanyName, this.ContactName );
        }
    }

    30 Ocak 2015 Cuma 14:57