我在商务舱中有这个代码.
internal ListItemCollection GetAllAgents() { DataTable table = dao.GetAllAgents(); ListItemCollection list = new ListItemCollection(); foreach (DataRow row in table.Rows) { list.Add(new ListItem(row["agent_name"].ToString(), row["id"].ToString())); } return list; }
我毫无问题地从桌子上取回了桌子.我观察文本和值属性是否正确填充(+1表示一些非常棒的文字?)并返回到演示文稿中我像这样绑定
Helper helper = new Helper(); ListItemCollection agentList = helper.GetAllAgents(); agentList.Insert(0,""); this.ddlAgent.DataSource = agentList; this.ddlAgent.DataBind();
当我得到所选的值
this.ddlAgent.SelectedValue
我希望看到代理ID,但我得到的是文本(代理名称),所以我尝试了这个
this.ddlAgent.SelectedItem.Value
但我得到了同样的结果.然后我看了一下生成的html源代码,它看起来像这样
所有代理商都在继续这种模式.我希望我只是做一些骨头的事情,你可以在解决我的问题时嗤之以鼻:)
多谢你们.
编辑:如果我这样做
ListItemCollection agentList = helper.GetAllAgents(); agentList.Insert(0,""); foreach (ListItem agent in agentList) { this.ddlAgent.Items.Add(agent); }
它工作正常.
尝试做:
this.ddlAgent.DataTextField = "Text"; this.ddlAgent.DataValueField = "Value"; this.ddlAgent.DataSource = agentList; this.ddlAgent.DataBind();
也应该工作,它可能比没有理由循环列表更好.
更新发现另一种(更短)的方式:
this.ddlAgent.Items.AddRange(agentList.ToArray()); this.ddlAgent.DataBind();
通过使用Items.AddRange()
而不是设置源DataSource
,ASP能够确定它应该使用Text
和Value
属性.
如果agentList是ListItemCollection,则以下代码适用于我,而不调用this.ddlAgent.DataBind();
this.ddlAgent.Items.AddRange( agentList.Cast().ToArray() ) ;