数据绑定后手动将项目插入DDL

时间:2010-01-04 02:25:01

标签: asp.net drop-down-menu

我有一个下拉列表,它动态填充SQL Server中的数据,我想在数据绑定后手动在DDL上插入两个项目。所以,DDL会有类似这样的数据:

选择分支(手动插入)
  ALL(手动插入)
  AIR
  AMP
  ABG
  ......

我尝试使用以下代码实现它:

ddlBranch.Items.Insert(0, "Select Branch")
ddlBranch.Items(0).Value = CMM.sExcVal1

ddlBranch.Items.Insert(1, "ALL")
ddlBranch.Items(1).Value = "ALL" 

但它给出了这样的数据:

选择分支(手动插入)
  ALL(手动插入)
  ('AIR'分支应该在这里,但它已经消失了)
  AMP
  ABG
  ...

手动将'ALL'项目插入DDL后,'AIR'消失,已被'ALL'取代。如何从服务器保留所有数据,同时我可以手动插入两个项目?

3 个答案:

答案 0 :(得分:6)

这比你想象的要简单得多。您需要做的就是更改html代码,如下所示:

<asp:DropDownList ID="dropdownlist1" runat="server" AppendDataBoundItems="true">
        <asp:ListItem>Select Branch</asp:ListItem>
        <asp:ListItem>ALL</asp:ListItem>
        </asp:DropDownList>

重要的是 AppendDataBoundItems =“true”位,它会在两个条目之后追加将从SQL Server返回的其余项目(不管你做了)手动键入。

希望有所帮助。

Ash(英国)。

答案 1 :(得分:0)

跳过自动数据绑定。

  if (!IsPostBack)
  {
    list.Items.Clear();

    list.Items.Add(new ListItem("Select branch", ""));
    list.Items.Add(new ListItem("ALL", "*");

    // ----- Just bind your items here from the DB.
    foreach (var item in yourCollection)
    {
      ListItem li = new ListItem(item.Text, item.Value);
      list.Items.Add(li);
    }

  }

答案 2 :(得分:0)

或者,如果您在应用程序的许多位置都需要此占位符项,则可能需要创建一个继承自DropDownList的Component。然后,覆盖DataBind方法 -

public override void DataBind()
{
    base.DataBind();

    ListItem li = new ListItem { Value = String.Empty, Text = "[Select an item ...]" };

    this.Items.Insert(0, li);

}