Add empty item to dropdownlist of custom objects in C#

前端 未结 4 2017
生来不讨喜
生来不讨喜 2021-01-05 12:09

We are binding a list of custom objects to an ASP.NET DropDownList in C# but we want to allow for the DropDownList to not have anything selected initially. One way of doing

相关标签:
4条回答
  • 2021-01-05 12:15

    You could add to the databound event:

    protected void DropDownList1_DataBound(object sender, EventArgs e)
            {
                DropDownList1.Items.Insert(0,new ListItem("",""));
            }
    
    0 讨论(0)
  • 2021-01-05 12:23

    First:

    DropDownList1.Items.Clear();

    Then add listItems to the dropDownList.

    This prevents the dropDownList from acquiring an ever increasing list of items every time it is rendered in a postback or asynchronous postback.

    0 讨论(0)
  • 2021-01-05 12:26

    Yes, create your list like so:

    <asp:DropDownList ID="Whatever" runat="server" AppendDataBoundItems="True">
        <asp:ListItem Value="" Text="Select one..." />
    </asp:DropDownList>
    

    (Note the use of AppendDataBoundItems="True")

    And then when you bind, the bound items are put after the empty item rather than replacing it.

    0 讨论(0)
  • 2021-01-05 12:37

    Just working on this actually, here's what I got so far (along with a couple databinding goodies)

    public interface ICanBindToObjectsKeyValuePair {
        void BindToProperties<TYPE_TO_BIND_TO>(IEnumerable<TYPE_TO_BIND_TO> bindableEnumerable, Expression<Func<TYPE_TO_BIND_TO, object>> textProperty, Expression<Func<TYPE_TO_BIND_TO, object>> valueProperty);
    }
    
    public class EasyBinderDropDown : DropDownList, ICanBindToObjectsKeyValuePair {
        public EasyBinderDropDown() {
            base.AppendDataBoundItems = true;
        }
        public void BindToProperties<TYPE_TO_BIND_TO>(IEnumerable<TYPE_TO_BIND_TO> bindableEnumerable,
            Expression<Func<TYPE_TO_BIND_TO, object>> textProperty, Expression<Func<TYPE_TO_BIND_TO, object>> valueProperty) {
            if (ShowSelectionPrompt)
                Items.Add(new ListItem(SelectionPromptText, SelectionPromptValue));
            base.DataTextField = textProperty.MemberName();
            base.DataValueField = valueProperty.MemberName();
            base.DataSource = bindableEnumerable;
            base.DataBind();
        }
        public bool ShowSelectionPrompt { get; set; }
        public string SelectionPromptText { get; set; }
        public string SelectionPromptValue { get; set; }
        public virtual IEnumerable<ListItem> ListItems {
            get { return Items.Cast<ListItem>(); }
        }
    }
    

    Notice one thing that you can do is

    dropDown.BindToProperties(myCustomers, c=>c.CustomerName, c=>c.Id);
    
    0 讨论(0)
提交回复
热议问题