我在商务舱中使用此代码。
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源代码,看起来像这个
<select name="ctl00$ContentPlaceHolder1$ddlAgent" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$ddlAgent\',\'\')', 0)" id="ctl00_ContentPlaceHolder1_ddlAgent">
<option selected="selected" value=""></option>
<option value="agent1_name">agent1_name</option>
<option value="agent2_name">agent2_name</option>
这种模式继续为所有代理商。我希望我只是做一些骨头的事情,你可以在解决我的问题时窃笑:)
谢谢你们。
编辑:如果我这样做
ListItemCollection agentList = helper.GetAllAgents();
agentList.Insert(0,"");
foreach (ListItem agent in agentList)
{
this.ddlAgent.Items.Add(agent);
}
它工作正常。
答案 0 :(得分:17)
尝试做:
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
属性。
答案 1 :(得分:6)
如果agentList是ListItemCollection,则以下代码适用于我,而不调用this.ddlAgent.DataBind();
this.ddlAgent.Items.AddRange( agentList.Cast<ListItem>().ToArray() ) ;