none
For in For RRS feed

  • Soru

  • Merhaba arkadaşlar bir listboxım var page load'da databasedeki tabloyu buraya bi dolduruorum daha sonra yine page loadda bi if koşulum var buraya girdiğinde databasede seçili olan kayıtları bu dolu olan listboxla eşleştirip selected yapmak istiyorum ama yapamadım bu konuda yardımcı olabilirmisiniz.
     if (!Page.IsPostBack)
                {
                    lstUlke.DataSource = DataProvider.Instance().ExecuteReadQuery("select * from tblCountry order by CountryName asc ");
                    lstUlke.DataValueField = "pkID";
                    lstUlke.DataTextField = "CountryName";
                    lstUlke.DataBind();
    
                    if (pkID > 0)
                    {
                        //lstUlke.Items.Clear();
                        pnlFiyat.Visible = true;
                        btnKaydet.Visible = false;
                        btnKaydet1.Visible = false;
                        btnKaydet2.Visible = true;
    
                        Thumbnail.ImageUrl = "~/images/MarkaLogo/" + pkID.ToString() + ".jpg";
                        IDataReader dr = DataProvider.Instance().GetMarkaAll(pkID);
                        if (dr.Read())
                        {
                           
    
                            string[] strYDTS = dr["YurtDisiTescilliOlduguSiniflar"].ToString().Split(',');
    
                            for (int i = 0; i < strYDTS.Length; i++)
                            {
                                ListItem li = new ListItem();
                                li.Text = strYDTS[i].ToString();
                                li.Value = strYDTS[i].ToString();
                                li.Selected = true;
                                lstUlke.Items.Add(li);
                                rblYurtDisi.SelectedValue = "Var";
                                lstUlke.Visible = true;
                            }
    
                            rblManset.SelectedValue = dr["MansetteGoster"].ToString();
                            rblListedeYerAlma.SelectedValue = dr["ListedeGoster"].ToString();
                            rblAltManset.SelectedValue = dr["AltMansetteGoster"].ToString();
                        }
                        dr.Close();


    Xnax

    30 Mart 2012 Cuma 11:04

Yanıtlar

  • Böyle yapmak gerekiyormuş:)

     foreach (ListItem li2 in lstUlke.Items)
                            {
                                for (int i = 0; i < strYDTS.Length; i++)
                                {
                                    if (li2.Text == strYDTS[i])
                                    {
                                        rblYurtDisi.SelectedValue = "Var";
                                        li2.Selected = true;
                                    }
                                }
                            }


    Xnax

    2 Nisan 2012 Pazartesi 07:13

Tüm Yanıtlar

  • Kodu biraz daha sade (buradaki sorun ile alakalı olmayan kısımları silip) ve anlaşılır (control lerin tiplerini ilk kullanımlarının yanına yazarak) halde tekrar gönderirsen biz daha rahat anlamış, dolayısı ile sana daha rahat cevap vermiş oluruz.

    Eğer sayfayı çalıştırdığın zaman "Cannot have multiple items selected when the SelectionMode is Single" hatasını alıyorsan lstUlke nin SelectionMode özelliğini Multiple olarak belirtirsen sorunun hallolur.  Ama sorun bu değil ise "ama yapamadım" ın tam olarak ne olduğunu açıklarsan "yani sen neyi denedin sistem sana ne gibi bir hata yada uyarı verdi" sorununu çözmende yardımcı olabiliriz...

    30 Mart 2012 Cuma 14:26
  • Sorun tam olarak şu ki lstUlke listboxını page load da doldurduktan sonra if bloğuna girdiğinde databaseden çektiğim seçmiş olduğum ülkeleri o listboxt da selected yapabilmek.
     if (!Page.IsPostBack)
                {
                    lstUlke.DataSource = DataProvider.Instance().ExecuteReadQuery("select * from tblCountry order by CountryName asc ");
                    lstUlke.DataValueField = "pkID";
                    lstUlke.DataTextField = "CountryName";
                    lstUlke.DataBind();
    
                    if (pkID > 0)
                    {
                        IDataReader dr = DataProvider.Instance().GetMarkaAll(pkID);
                        if (dr.Read())
                        {
    
                            string[] strYDTS = dr["YurtDisiTescilliOlduguSiniflar"].ToString().Split(',');
    
                            for (int i = 0; i < strYDTS.Length; i++)
                            {
                                ListItem li = new ListItem();
                                li.Text = strYDTS[i].ToString();
                                li.Value = strYDTS[i].ToString();
                                li.Selected = true;
                                lstUlke.Items.Add(li);
                                rblYurtDisi.SelectedValue = "Var";
                                lstUlke.Visible = true;
                            }
                        }
                        dr.Close();


    Xnax

    30 Mart 2012 Cuma 14:41
  • Öncelik probleminin nedeni listede güncelleme yapmak yerine yeni item ekliyor olman. DataBound durumlarda listede dolaşmayı hiç denemediğim için kendi yolum ile sana çözüm sunayım.

            void ListBoxDoldur(ListBox lbox, IDataReader reader, string textField, string valueField)
            {
                while (reader.Read())
                {
                    ListItem item = new ListItem(reader[textField].ToString(), reader[valueField].ToString());
                    lbox.Items.Add(item);
                }
            }

    Öncelikle

    lstUlke.DataSource = DataProvider.Instance().ExecuteReadQuery("select * from tblCountry order by CountryName asc "); lstUlke.DataValueField = "pkID"; lstUlke.DataTextField = "CountryName"; lstUlke.DataBind();

    Bu kısmı kaldırıp yerine

    ListBoxDoldur(lstUlke, DataProvider.Instance().ExecuteReadQuery("select * from tblCountry order by CountryName asc "), "CountryName", "pkID");

    Kullan.

    Son Olarak da

    for (int i = 0; i < strYDTS.Length; i++)
                            {
                                ListItem li = new ListItem();
                                li.Text = strYDTS[i].ToString();
                                li.Value = strYDTS[i].ToString();
                                li.Selected = true;
                                lstUlke.Items.Add(li);
                                rblYurtDisi.SelectedValue = "Var";
                                lstUlke.Visible = true;
                            }

    Kısmını aşağıda ki şekilde değiştir.

    for (int i = 0; i < strYDTS.Length; i++)
    {
      ListBox1.Items.FindByValue(strYDTS[i].ToString()).Selected = true;
      rblYurtDisi.SelectedValue = "Var";
    }

    Bu adımları uyguladığında sorunun çözülecektir diye düşünmekteyim...


    30 Mart 2012 Cuma 15:06
  • Böyle yapmak gerekiyormuş:)

     foreach (ListItem li2 in lstUlke.Items)
                            {
                                for (int i = 0; i < strYDTS.Length; i++)
                                {
                                    if (li2.Text == strYDTS[i])
                                    {
                                        rblYurtDisi.SelectedValue = "Var";
                                        li2.Selected = true;
                                    }
                                }
                            }


    Xnax

    2 Nisan 2012 Pazartesi 07:13