2013-07-15 94 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的索引是其最簡單的方式。 –

相關問題