0

ドロップダウンメニューがあります。私の目標は、現在ログインしている人がリストの最初にあり、その後にアルファベット順のリストが続く場所にすることです。

<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

4

1 に答える 1

1

私は問題を理解しました:

[LoginName] = '@userLoggedIn'

引用符を付けないでください。次のように修正します。

[LoginName] = @userLoggedIn
于 2013-07-05T20:44:42.780 に答える