web-dev-qa-db-ja.com

ドロップダウンリストに値が含まれているかどうかを確認する最良の方法は?

ユーザーが新しいページに移動すると、このddlの選択したインデックスはcookieによって決定されますが、ddlにそのcookieの値が含まれていない場合は、0を設定します。どのメソッドを使用しますかddl?ループが最良の方法ですか、または実行できる単純なifステートメントがありますか?

これは私が試みたものですが、ブール値を返しません。

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

思い浮かぶ2つの方法があります。

Containsは次のように使用できます。

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

または現在の戦略を変更します。

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

編集:FindByTextと同じように機能するDropDownList.Items.FindByValueもありますが、代わりに値に基づいて検索します。

121
Scott Anderson

それはアイテムを返します。次のように変更するだけです:

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

0がデフォルト値の場合、単純な割り当てを使用できます。

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

これにより、DDLにCookieの値が含まれている場合、適切なリストアイテムが自動的に選択されます。含まれていない場合、この呼び出しは選択を変更しないため、デフォルトの選択のままになります。後者が値0と同じ場合、それはあなたにとって完璧なソリューションです。

私はこのメカニズムを頻繁に使用し、非常に便利です。

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

これはどうですか:

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

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
1
Nathan

場合によっては、値の空白を削除する必要があるか、一致しないことがあります。そのような場合、この追加手順を使用できます( source ):

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

関数がNothingを返す場合、以下でこれを試すことができます

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

このメソッドがnullを返すかどうかを確認してみてください:

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

//?を使用できますifの代わりの演算子

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