Проблема "DropDownList.SelectedIndex = -1" - PullRequest
8 голосов
/ 17 сентября 2008

Я просто хочу 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 также после добавления элементов) ... Что я делаю неправильно? Помощь муравья приветствуется!

Ответы [ 7 ]

18 голосов
/ 17 сентября 2008

Не забывайте, что 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-ы отличаются), и по умолчанию это верхний элемент, если явно не выбрано ни одного.

5 голосов
/ 14 октября 2008

Можно установить 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>
4 голосов
/ 17 сентября 2008

Я читаю следующее: 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 действительно только для получения, а не для установки индекса? Если это так, я буду использовать ваш «патч».

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

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

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

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

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

2 голосов
/ 17 сентября 2008

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

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

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

0 голосов
/ 26 июля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...