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

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

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

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

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

Ответ 1

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

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

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

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

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

EDIT: также существует DropDownList.Items.FindByValue, который работает так же, как и FindByText, за исключением того, что он ищет на основе значений.

Ответ 2

Это вернет элемент. Просто измените на:

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

Ответ 3

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

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

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

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

Ответ 4

Как насчет этого:

ListItem match = ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString());
if (match == null)
    ddlCustomerNumber.SelectedIndex = 0;
//else
//    match.Selected = true; // you'll probably select that cookie value

Ответ 5

ListItem item = ddlComputedliat1.Items.FindByText("Amt D");
if (item == null) {
    ddlComputedliat1.Items.Insert(1, lblnewamountamt.Text);
}

Ответ 6

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

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

Ответ 7

В С# это работает:

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

Update:

Перевод кода выше на 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

Ответ 8

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

ddlCustomerNumber.SelectedValue = ddlType.Items.FindByValue(GetCustomerNumberCookie().ToString()) != null ? GetCustomerNumberCookie().ToString() : "0";

Ответ 9

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

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != Nothing)
{
...
}

Ответ 10

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

if(((DropDownList) myControl1).Items.Cast<ListItem>().Select(i => i.Value.Trim() == ctrl.value.Trim()).FirstOrDefault() != null){}