it-swarm-ru.tech

Проблема "DropDownList.SelectedIndex = -1"

Я просто хочу ASP.NET DropDownList без выбранного элемента. Установка SelectedIndex в -1 пока безрезультатна. Я использую Framework 3.5 с AJAX, то есть этот DropDownList находится внутри UpdatePanel. Вот что я делаю:

    protected void Page_Load (object sender, EventArgs e)
    {
        this.myDropDownList.SelectedIndex = -1;
        this.myDropDownList.ClearSelection();

        this.myDropDownList.Items.Add("Item1");
        this.myDropDownList.Items.Add("Item2");
    }

В тот момент, когда я добавляю элемент в DropDown, его SelectedIndex изменяется на 0 и больше не может быть установлен на -1 (я пытался вызвать SelectedIndex также после добавления элементов) ... Что я делаю неправильно? Помощь муравья будет оценена!

8
Alex

Не забывайте, что myDropDownList.Items.Add добавит новый элемент Listitem внизу, если вы вызовете его после выполнения вызова DataSource/DataBind, поэтому используйте метод myDropDownList.Items.Insert, например, например ...

myDropDownList.DataSource = DataAccess.GetDropDownItems(); // Psuedo Code
myDropDownList.DataTextField = "Value";
myDropDownList.DataValueField = "Id";
myDropDownList.DataBind();

myDropDownList.Items.Insert(0, new ListItem("Please select", ""));

Добавит выпадающий элемент "Пожалуйста, выберите" вверху.

И, как уже упоминалось, в выпадающем меню всегда будет выбран ровно один элемент (я думаю, что ListBox-ы отличаются), и по умолчанию это верхний элемент, если ни один явно не выбран.

18
Dominic Pettifer

Можно установить selectedIndex свойство DropDownList в -1 (т.е. отменить выбор), используя скрипт на стороне клиента:

<form id="form1" runat="server">
    <asp:DropDownList ID="DropDownList1" runat="server">
        <asp:ListItem Value="A"></asp:ListItem>
        <asp:ListItem Value="B"></asp:ListItem>
        <asp:ListItem Value="C"></asp:ListItem>
    </asp:DropDownList>
    <button id="СlearButton">Clear</button>
</form>

<script src="jquery-1.2.6.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function()
    {
        $("#СlearButton").click(function()
        {
            $("#DropDownList1").attr("selectedIndex", -1); // pay attention to property casing
        })

        $("#ClearButton").click();
    })
</script>
5
Alexander Prokofyev

Я читаю следующее: http://msdn.Microsoft.com/en-us/library/a5kfekd2.aspx

В нем говорится: Чтобы получить значение индекса выбранного элемента, прочитайте значение свойства SelectedIndex. Индекс начинается с нуля. Если ничего не было выбрано, значение свойства равно -1.

В то же время по адресу http://msdn.Microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist.selectedindex (VS.80) .aspx мы видим:

Используйте свойство SelectedIndex для программного указания или определения индекса выбранного элемента из элемента управления DropDownList. Элемент всегда выбирается в элементе управления DropDownList. Вы не можете отменить выбор для каждого элемента в списке одновременно.

Возможно -1 действительно только для получения, а не для установки индекса? Если это так, я буду использовать ваш "патч".

4
Alex
  1. Создайте свой список DropDown и укажите начальный ListItem
  2. Установите AppendDataBoundItems в true, чтобы новые элементы добавлялись.
<asp:DropDownList ID="YourID" DataSourceID="DSID" AppendDataBoundItems="true"> 
<asp:ListItem Text="All" Value="%"></asp:ListItem> 
</asp:DropDownList>
2
Lemaire Stewart

Я почти уверен, что в выпадающем меню должен быть выбран какой-то элемент; Я обычно добавляю пустой элемент списка

this.myDropDownList.Items.Add ( "");

Как мой первый пункт списка, и действуйте соответственно.

2
bryansh

SelectedIndex может иметь значение -1, только когда элемент управления инициализирован впервые и в коллекции нет элементов.

Невозможно выбрать ни один элемент в раскрывающемся списке веб-страниц, как в WinForm.

Я считаю, что лучше всего иметь: this.myDropDownList.Items.Add (new ListItem ("Пожалуйста, выберите ...", ""));

Таким образом, я сообщаю пользователю, что ему нужно выбрать элемент, и вы можете проверить SelectedIndex == 0, чтобы подтвердить

2
Aaron Powell

Пожалуйста, попробуйте ниже синтаксис:

DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("Select"))

или же

DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText("SelectText"))

или же

DropDownList1.Items.FindByText("Select").selected =true

Для получения дополнительной информации: http://vimalpatelsai.blogspot.in/2012/07/dropdownlistselectedindex-1-problem.html

0
Vimal Patel