2013-07-15 76 views
0

我有一个下拉列表来自按字母顺序呈现的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"; 

上述不起作用。我怎么做到这一点?有一个更好的方法吗?

回答

1

Garrison Neely的回答并不完美,但它让我走上了正轨。这ultimatly工作:

  int i = 0; 
      foreach (var item in catagoryDropDown.Items) 
      { 
       if (item.ToString().Equals("Sick Leave")) 
       { 
        catagoryDropDown.SelectedIndex = i; 
        break; 
       } 
       i++; 
      } 
+1

永远真棒回答你自己的问题! –

0

试试这个:

catagoryDropDown.SelectedValue = catagoryDropDown.Items.FindByText("Sick Leave").Value; 
+0

获取NullReferenceException –

+0

哪一部分是'null'? –

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

在这种情况下,“item”是什么? –

+0

呵呵,忘了改变我的初始实现的那部分。接得好。 –

0

试试这个,我敢肯定它会工作:

ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByText(Convert.ToString(Any Value))); 

之前,确保值存在于数据源(这是该DDL绑定)。

+1

请解释您为什么认为自己的代码可以解决问题。 – rgettman

+0

用于相对于来自数据源(ddl被绑定到的)的任何列表项值动态地设置ddl的索引是其最简单的方式。 –

相关问题