用各种方法写dropdownlist 绑定数据库值,都没问题。
如: public void ddlBind()
        {
            //绑定公司dropdownlist
            List<QiaModel> xzhrmodel = new List<QiaModel>();
            xzhrmodel = HrSQL.GetQia();
            DropDownList1.Items.Clear();
            DropDownList1.Items.Add(new ListItem("请选择", ""));
            foreach (QiaModel qia in xzhrmodel)
            {
                ListItem li = new ListItem();
                li.Value = qia.qia_mail;
                li.Text = qia.qia_name;
                DropDownList1.Items.Add(li);
            }
        } 
或是
  List<QiaModel> xzhrmodel = new List<QiaModel>();
                xzhrmodel = HrSQL.GetQia();
                ddl_pia.DataSource = xzhrmodel;
                ddl_pia.DataTextField = "qia_name";
                ddl_pia.DataValueField = "qia_mail";
                ddl_pia.DataBind();以上都没问题,正常。
但是,我还要,根据值绑定选定的值就有问题了。
this.ddl_pia.SelectedItem.Text = Bmodel.B_qia.ToString();
这样写没问题,但他的显示出来的效果是,值始终放在最上面,如 B ABCD 或 C ABCD... 会重复(不知有看懂没)
表面上是实现了效果,但    
Bmodel.B_qia = this.ddl_pia.SelectedItem.Text.ToString();
Bmodel.B_qiamail = this.ddl_pia.SelectedValue.Trim();
//取值时,selectvalue值是空值,除非我另外做选择,到是都有值的。
然后我又换另外几种写法
第一种:
 int index = ddl_pia.SelectedIndex;
                for (int i = 0; i < ddl_pia.Items.Count; i++)
                {
                    if (ddl_pia.Items[i].Value == Bmodel.B_qia.ToString())
                    {
                        ddl_pia.Items[index].Selected = false;
                        ddl_pia.Items[i].Selected = true;
                        break;
                    }
                }
结果没报错,但效果 没有选定我要的值。
第二种:
this.ddl_pia.SelectedValue = Bmodel.B_qiamail.ToString();
结果和第一种一样,没有选定我要的值。
第三种:
DropDownList1.Items.FindByValue(Bmodel.B_qia.ToString()).Selected = true; 
报错“未将对象引用设置到对象的实例。”
以上AutoPostPack true/false 都有试过。
 
这个问题困扰我好久了,谁能帮我解决?很奇怪,另外其他也有写类色的却是正常的
 //绑定酒店数据
 List<HotelModel> hotel = new List<HotelModel>();
 hotel = HotelSQL.GetHotleName();
 ddl_hotel.DataSource = hotel;
 ddl_hotel.DataTextField = "hotel_name";
 ddl_hotel.DataValueField = "hotel_name";
 ddl_hotel.DataBind();
 this.ddl_hotel.SelectedValue = Cmodel.C_hotel;

解决方案 »

  1.   

    dropdow.selectedIndex=drop.items.IndexOf();
      

  2.   

    if(!IsPostBack)
    value不能重复
    Bmodel.B_qiamail = this.ddl_pia.SelectedValue.Trim();
      

  3.   

    直接操作selectvalue不就搞定了
      

  4.   

    不能有重复的value是第一个条件 
    之后就是你应该先进行绑定,然后再选中你想要的值
      

  5.   

    用selectedIndex 或SelectedValue都可以
      

  6.   

    下拉框里面的value是不能重复的。
      

  7.   

    ListItem li = DropDownList1.SelectedItem;
    string value = li.value;
    string text = li.text;
    楼主试试..
      

  8.   

    你的意思是初始本来是 A 的时候是没有值的 而重新再选次 A 才是有值的是吧?
    最直接的问题很多人会忘记的是你的autoback开了吧?
    其次如果开了 你可以考虑先绑定后赋值
    或者一般是一个===请选择=== 为初始 就可以避免这样的问题了
      

  9.   

    这个以前遇到过  就是value千万不能重复。
      

  10.   

    DropDownList1.selectindex=DropDownList1.items.indexof(DropDownList1.findbyvalue[findbytext]());
    好象大概是这个,你得试下,反正能用.