Manually insert items into DDL after data binding

2020-06-30 04:18发布

问题:

I have a dropdownlist, which dynamically populate data from SQL Server and i wanna manually insert two items on top of the DDL after data binding. So, the DDL would has data something like this:

Select Branch (manually insert)
ALL (manually insert)
AIR
AMP
ABG
...

I tried to achieve it by using code below:

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

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

but it comes out giving me the data like this:

Select Branch (manually insert)
ALL (manually insert)
('AIR' branch should be here but it's gone)
AMP
ABG
...

After manually insert the 'ALL' item into the DDL, the 'AIR' is gone which is already replaced by the 'ALL'. How can i remain all the data from server and at the same time i can manually insert two items?

回答1:

It is much simpler than you think. All you need to do is change the html code as below:

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

The important thing is the AppendDataBoundItems="true" bit, which will append the remaining items that will be brought back from the SQL Server as normal (however you did it) after the two entries you manually typed in.

Hope that helps.

Ash (UK).



回答2:

Just skip the automatic databinding.

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

  }


回答3:

Alternatively, if you need this placeholder item in a lot of places in your app - you might want to create a Component that inherits from DropDownList. Then, override the DataBind method -

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

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

    this.Items.Insert(0, li);

}