Лучший способ проверить, содержит ли выпадающий список значение? - PullRequest
56 голосов
/ 05 января 2010

Когда пользователь переходит на новую страницу, выбранный индекс этого ddl определяется cookie-файлом, но если ddl не содержит значения этого cookie-файла, я бы хотел, чтобы ему было установлено значение 0. Какой метод я использовать для ddl? Является ли цикл лучшим способом или есть просто оператор if, который я могу выполнить?

Это то, что я пытался, но это не возвращает бул.

if ( !ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString() ) )
    ddlCustomerNumber.SelectedIndex = 0;

Ответы [ 10 ]

121 голосов
/ 05 января 2010

На ум приходят два метода:

Вы можете использовать Содержит вот так:

if (ddlCustomerNumber.Items.Contains(new 
    ListItem(GetCustomerNumberCookie().ToString())))
{
    // ... code here
}

или изменение вашей текущей стратегии:

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != null)
{
    // ... code here
}

РЕДАКТИРОВАТЬ: Существует также DropDownList.Items.FindByValue, который работает так же, как FindByText, за исключением того, что вместо этого поиск на основе значений.

9 голосов
/ 05 января 2010

Это вернет предмет. Просто измените на:

if (ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString()) != null)
    ddlCustomerNumber.SelectedIndex = 0;
5 голосов
/ 18 марта 2013

Если 0 - ваше значение по умолчанию, вы можете просто использовать простое назначение:

ddlCustomerNumber.SelectedValue = GetCustomerNumberCookie().ToString();

Это автоматически выбирает правильный элемент списка, если DDL содержит значение cookie. Если он не содержит его, этот вызов не изменит выбор, поэтому он останется выбранным по умолчанию. Если последнее равно значению 0, тогда это идеальное решение для вас.

Я довольно часто использую этот механизм и нахожу его очень удобным.

1 голос
/ 02 июня 2016
ListItem item = ddlComputedliat1.Items.FindByText("Amt D");
if (item == null) {
    ddlComputedliat1.Items.Insert(1, lblnewamountamt.Text);
}
1 голос
/ 05 января 2010

Что по этому поводу:

ListItem match = ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString());
if (match == null)
    ddlCustomerNumber.SelectedIndex = 0;
//else
//    match.Selected = true; // you'll probably select that cookie value
0 голосов
/ 23 мая 2019

Иногда значение необходимо урезать из пробела, иначе оно не будет совпадать, в этом случае можно использовать этот дополнительный шаг ( source ):

if(((DropDownList) myControl1).Items.Cast<ListItem>().Select(i => i.Value.Trim() == ctrl.value.Trim()).FirstOrDefault() != null){}
0 голосов
/ 22 января 2018

Если функция не возвращает ничего, попробуйте это ниже

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != Nothing)
{
...
}
0 голосов
/ 18 января 2016

// Вы можете использовать? оператор вместо if

ddlCustomerNumber.SelectedValue = ddlType.Items.FindByValue(GetCustomerNumberCookie().ToString()) != null ? GetCustomerNumberCookie().ToString() : "0";
0 голосов
/ 26 мая 2012

На C # это работает:

        if (DDLAlmacen.Items.Count > 0)
        {
            if (DDLAlmacen.Items.FindByValue("AlmacenDefectoAndes").Value == "AlmacenDefectoAndes")
            {
                DDLAlmacen.SelectedValue = "AlmacenDefectoAndes";
            }
        }

Обновление:

Перевод приведенного выше кода в Visual Basic не работает. Выдает «System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта ..»

Итак. чтобы это работало на Visual Basic, мне пришлось изменить код следующим образом:

        If DDLAlmacen.Items.Count > 0 Then
            If DDLAlmacen.Items.Contains(New ListItem("AlmacenDefectoAndes")) Then
                DDLAlmacen.SelectedValue = "AlmacenDefectoAndes"
            End If
        End If
0 голосов
/ 05 января 2010

Вы можете попробовать проверить, возвращает ли этот метод нуль:

if (ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString()) != null)
    ddlCustomerNumber.SelectedIndex = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...