我有一个来自sqldatasource的下拉列表,该列表按字母顺序显示。因此,列表索引号与SQL表中的主键完全不对齐。我需要能够根据我拥有的主键信息在页面加载时设置下拉列表的选择。
<asp:DropDownList ID="catagoryDropDown" runat="server" DataSourceID="SqlDataSource3"
DataTextField="Catagory" DataValueField="PK_SupportCatagory" CssClass="dropDownList">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$
ConnectionStrings:ApplicationServices %>"
SelectCommand="SELECT [PK_SupportCatagory], [Catagory] FROM [SupportCatagory] ORDER BY CASE
WHEN [PK_SupportCatagory] = 1 THEN 1 ELSE 2 END, [Catagory]">
</asp:SqlDataSource>
我的想法是通过查询数据库来获取字符串,以便适当地设置下拉列表。
catagoryDropDown.SelectedValue = "Sick Leave";
以上不起作用。我怎么做到这一点?有更好的方法吗?
答案 0 :(得分:1)
var selectedIndex = -1;
for(int i = 0; i < catagoryDropDown.Items.Count; i++)
{
if(catagoryDropDown.Items[i].Text.ToLower() == "sick leave")
{
selectedIndex = i;
break;
}
}
if(selectedIndex > -1)
{
catagoryDropDown.SelectedIndex = selectedIndex;
}
添加了.ToLower(),因为当字符串没有案例担心时,它会让事情变得更容易。
答案 1 :(得分:1)
Garrison Neely的回答并没有奏效,但它让我走上正轨。这最终有效:
int i = 0;
foreach (var item in catagoryDropDown.Items)
{
if (item.ToString().Equals("Sick Leave"))
{
catagoryDropDown.SelectedIndex = i;
break;
}
i++;
}
答案 2 :(得分:0)
试试这个:
catagoryDropDown.SelectedValue = catagoryDropDown.Items.FindByText("Sick Leave").Value;
答案 3 :(得分:0)
尝试这个,我很确定它会起作用:
ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByText(Convert.ToString(Any Value)));
确保数据源(ddl绑定到的数据源)中存在该值。