ユーザーが新しいページに移動すると、このddlの選択したインデックスはcookieによって決定されますが、ddlにそのcookieの値が含まれていない場合は、0を設定します。どのメソッドを使用しますかddl?ループが最良の方法ですか、または実行できる単純なifステートメントがありますか?
これは私が試みたものですが、ブール値を返しません。
if ( !ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString() ) )
ddlCustomerNumber.SelectedIndex = 0;
思い浮かぶ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
もありますが、代わりに値に基づいて検索します。
それはアイテムを返します。次のように変更するだけです:
if (ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString()) != null)
ddlCustomerNumber.SelectedIndex = 0;
0がデフォルト値の場合、単純な割り当てを使用できます。
ddlCustomerNumber.SelectedValue = GetCustomerNumberCookie().ToString();
これにより、DDLにCookieの値が含まれている場合、適切なリストアイテムが自動的に選択されます。含まれていない場合、この呼び出しは選択を変更しないため、デフォルトの選択のままになります。後者が値0と同じ場合、それはあなたにとって完璧なソリューションです。
私はこのメカニズムを頻繁に使用し、非常に便利です。
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
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
場合によっては、値の空白を削除する必要があるか、一致しないことがあります。そのような場合、この追加手順を使用できます( source ):
if(((DropDownList) myControl1).Items.Cast<ListItem>().Select(i => i.Value.Trim() == ctrl.value.Trim()).FirstOrDefault() != null){}
関数がNothingを返す場合、以下でこれを試すことができます
if (ddlCustomerNumber.Items.FindByText(
GetCustomerNumberCookie().ToString()) != Nothing)
{
...
}
このメソッドがnullを返すかどうかを確認してみてください:
if (ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString()) != null)
ddlCustomerNumber.SelectedIndex = 0;
//?を使用できますifの代わりの演算子
ddlCustomerNumber.SelectedValue = ddlType.Items.FindByValue(GetCustomerNumberCookie().ToString()) != null ? GetCustomerNumberCookie().ToString() : "0";