Как добавить параметр "Select" по умолчанию к этому ASP.NET элемент управления DropDownList?

Я новый ASP.NET разработчик и я пытаемся изучить Linq-to-Entities. Я пытаюсь связать DropDownList с оператором Linq для получения списка состояния в сущности Status. Все работает нормально. Тем не менее, я пытаюсь добавить опцию "выбрать" в раскрывающийся список, но она не работает со мной. не могли бы вы сказать мне, как это исправить?

ASP.NET Код:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
                OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">

Код:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DropDownList1.Items.Add(new ListItem("Select", "0", true));
            bindStatusDropDownList();
        }
    }

private void bindStatusDropDownList()
    {
        Status status = new Status();
        DropDownList1.DataSource = status.getData();
        DropDownList1.DataValueField = "ID";
        DropDownList1.DataTextField = "Description";
        DropDownList1.DataBind();
    }

обновление:

Я также попытался сделать в наборе разметки DropDownList, но это не сработало со мной

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
                OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
                    <asp:ListItem Selected="True" Value="0" Text="Select"></asp:ListItem>
            </asp:DropDownList>

6 ответов


причина, по которой он не работает, заключается в том, что вы добавляете элемент в список, а затем переопределяете весь список новым DataSource который очистит и повторно заполнит ваш список, потеряв первый добавленный вручную элемент.

Итак, вам нужно сделать это в обратном порядке:

Status status = new Status();
DropDownList1.DataSource = status.getData();
DropDownList1.DataValueField = "ID";
DropDownList1.DataTextField = "Description";
DropDownList1.DataBind();

// Then add your first item
DropDownList1.Items.Insert(0, "Select");

хотя это довольно старый вопрос, другой подход-изменить AppendDataBoundItems собственность. Таким образом, код будет:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
                  OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
                  AppendDataBoundItems="True">
     <asp:ListItem Selected="True" Value="0" Text="Select"></asp:ListItem>
</asp:DropDownList>

Я попытался со следующим кодом. это работает для меня отлично

ManageOrder Order = new ManageOrder();
Organization.DataSource = Order.getAllOrganization(Session["userID"].ToString());
Organization.DataValueField = "OrganisationID";
Organization.DataTextField = "OrganisationName";                
Organization.DataBind();                
Organization.Items.Insert(0, new ListItem("Select Organisation", "0"));

Переместить DropDownList1.Предметы.Добавить (new ListItem ("Select"," 0", true)); После bindStatusDropDownList();

так:

    if (!IsPostBack)
    {
        bindStatusDropDownList(); //first create structure
        DropDownList1.Items.Add(new ListItem("Select", "0", true)); // after add item
    }

Если вы сделаете "добавить", он добавит его в нижнюю часть списка. Вам нужно сделать "вставить", если вы хотите, чтобы элемент был добавлен в верхнюю часть списка.


Private Sub YourWebPage_PreRenderComplete(sender As Object, e As EventArgs) Handles Me.PreRenderComplete

     If Not IsPostBack Then
     DropDownList1.Items.Insert(0, "Select")
     End If

End Sub