web-dev-qa-db-ja.com

「DropDownList.SelectedIndex = -1」の問題

アイテムが選択されていないASP.NETDropDownListが必要です。 SelectedIndexを-1に設定しても、これまでのところ役に立ちません。 AJAXでFramework3.5を使用しています。つまり、この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");
    }

ドロップダウンに要素を追加すると、そのSelectedIndexが0に変わり、-1に設定できなくなります(アイテムを追加した後でSelectedIndexを呼び出してみました)...何が間違っていますか?アリの助けをいただければ幸いです!

8
Alex

MyDropDownList.Items.Addは、DataSource/DataBind呼び出しを実行した後に呼び出すと、下部に新しいListitem要素を追加するので、代わりに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", ""));

「選択してください」ドロップダウン項目を上部に追加します。

また、前述のように、ドロップダウンでは常に1つのアイテムが選択されます(リストボックスは異なると思います)。明示的に選択されていない場合、デフォルトで一番上のアイテムになります。

19

クライアント側のスクリプトを使用して、DropDownListのプロパティselectedIndexを-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>
5

私は以下を読んでいます: 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は、インデックスを設定するためではなく、取得するためだけに有効ですか?もしそうなら、私はあなたの「パッチ」を使用します。

4
Alex
  1. ドロップダウンリストを作成し、最初のListItemを指定します
  2. AppendDataBoundItemstrueに設定して、新しいアイテムが追加されるようにします。
<asp:DropDownList ID="YourID" DataSourceID="DSID" AppendDataBoundItems="true"> 
<asp:ListItem Text="All" Value="%"></asp:ListItem> 
</asp:DropDownList>
2
Lemaire Stewart

ドロップダウンでいくつかの項目を選択する必要があると確信しています。私は通常、空のリストアイテムを追加します

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

私の最初のリスト項目として、それに応じて進みます。

2
bryansh

SelectedIndexは、コントロールが最初に初期化され、コレクション内にアイテムがない場合にのみ-1にすることができます。

WinFormの場合のように、Webドロップダウンリストでアイテムを選択しないことはできません。

This.myDropDownList.Items.Add(new ListItem( "Please select ..."、 ""));を使用するのが最適だと思います。

このようにして、アイテムを選択する必要があることをユーザーに伝えます。SelectedIndex== 0をチェックして検証できます。

2
Aaron Powell

以下の構文を試してください。

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

0
Vimal Patel