2013-07-05 59 views
0

我有一個下拉菜單。我的目標是讓它在當前登錄的人是第一個列表中,隨後按字母順序排列:硬編碼字符串時查詢不起作用的SQLDataSourceParameter參數

<asp:DropDownList ID="userNameDropDown" runat="server" DataSourceID="SqlDataSource1" 
    DataTextField="Name" DataValueField="PK_User" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true"> 
</asp:DropDownList> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ApplicationServices %>" 
    SelectCommand="SELECT [PK_User], [Name] FROM [User] ORDER BY CASE WHEN [LoginName] = '@userLoggedIn' THEN 1 ELSE 2 END, [Name]"> 
<SelectParameters> 
    <asp:QueryStringParameter Name="userLoggedIn" Type="String" /> 
</SelectParameters> 
</asp:SqlDataSource> 

這裏是我的C#應該設置參數:

protected void Page_Load(object sender, EventArgs e) 
{ 
    SqlDataSource1.SelectParameters["userLoggedIn"].DefaultValue = User.Identity.Name; 
} 

結果是列表按字母順序顯示,忽略登錄的人。如果我改變SelectCommand並使其硬編碼,它工作正常:

SelectCommand="SELECT [PK_User], [Name] FROM [User] ORDER BY CASE WHEN [LoginName] = 'tunnelld' THEN 1 ELSE 2 END, [Name] 

在這種情況下,它正是我想要的。

System.Diagnostics.Debug.Write(User.Identity.Name); 

結果的輸出:tunnelld

+0

是否包裹你的在「if(!IsPostBack)」條件中的Page_Load代碼有什麼區別? –

回答

1

我想通了這個問題:

[LoginName] = '@userLoggedIn' 

不應有引號,則以下修復它:

[LoginName] = @userLoggedIn 
相關問題