2011-06-01 26 views
1

我有一個下拉列表,其數據源來自SQL服務器。asp.net 4 dropdownlist findByText不適用於動態列表

<asp:DropDownList ID="State" runat="server" DataSourceID="SqlDataSource1" DataTextField="STATE_NAME" DataValueField="STATE_FIPS"> 
</asp:DropDownList> 
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
             SelectCommand="SELECT DISTINCT [STATE_NAME], [STATE_FIPS] FROM [county] order by [STATE_NAME]"> 
            </asp:SqlDataSource> 

我想預先填充列表中的值。我使用DropDownList.SelectedIndex = DropDownList.Items.IndexOf(DropDownList.Items.FindByValue(YourValueHere))。但它不起作用。它從DropDownList.Items.FindByValue(YourValueHere)給我一個空。

相同的代碼工作正常,如果我使用靜態列表項,如:

<asp:DropDownList ID="ddl" runat="server"> 
       <asp:ListItem>item1</asp:ListItem> 
       <asp:ListItem>item2</asp:ListItem> 
       <asp:ListItem>item3</asp:ListItem> 
       <asp:ListItem>item4</asp:ListItem> 
</asp:DropDownList> 

任何想法?謝謝!

回答

1

直接使用下拉菜單的SelectedValue屬性怎麼樣:DropDownList.SelectedValue = YourValueHere;

編輯:我得到了你的問題,你必須選擇DropDownList Class而不是id of your dropdownlist control。代碼下面的代碼正在工作,我測試了它。

ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue("item3")); 
+0

嗨,哥們這個工程.. THX很多! – sbs 2011-06-01 14:55:54

+0

是的。代碼'ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue(「item3」));'適用於靜態列表項目,但不適用於動態列表項目。 – sbs 2011-06-01 14:59:17

+0

它也適用於動態listitems。 – 2011-06-01 15:01:55

0

我有同樣的問題。但在我的情況下,下拉列表是兩次數據綁定。 1個由我自己和1個通過父母控制。第二個數據綁定後,所選索引被重置。

所以檢查控件是否是數據綁定兩次。

你也可以實現在你的dropdrop_DataBound(object sender,EventArgs e)方法中的項目選擇。 如果斷點這個方法,你會注意到數據綁定已經完成了兩次。

0

您可以使用下面的代碼,其中工程靜態和動態值:

ddl.FindItemByText("YourText").Selected = true;