将DropDownList绑定到ListItemCollection,并将值添加到DDL

时间:2010-01-29 09:34:03

标签: c# html drop-down-menu

我在商务舱中使用此代码。

    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);
}

它工作正常。

2 个答案:

答案 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可以确定它应该使用TextValue属性。

答案 1 :(得分:6)

如果agentList是ListItemCollection,则以下代码适用于我,而不调用this.ddlAgent.DataBind();

this.ddlAgent.Items.AddRange( agentList.Cast<ListItem>().ToArray() ) ;