显示Gridview中的特定值

时间:2014-04-25 22:34:02

标签: asp.net sql gridview

我想在gridview中为特定用户显示值。在“测试查询”中它工作正常,但没有在页面上显示值。怎么了?

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" Width="698px" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" DataKeyNames="Idoferty">
            <Columns>
                <asp:BoundField DataField="Idoferty" HeaderText="Idoferty" SortExpression="Idoferty" />
            </Columns>
        </asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ofety_stopowiczeV1ConnectionString %>" SelectCommand="SELECT [Idoferty] FROM [rezerwacje] WHERE ([user] = @user)">
                <SelectParameters>
                    <asp:SessionParameter Name="user" SessionField="User.Identity.Name" Type="String" />
                </SelectParameters>
            </asp:SqlDataSource>

SELECT语句

SELECT [Idoferty] FROM [rezerwacje] WHERE ([user] = @user)

1 个答案:

答案 0 :(得分:1)

此处的问题不是您的查询失败或GridView行为不当,原因是User.Identity.Name不是Session对象的属性。

User.Identity.NameHttpContext类的属性,通常从HttpContext.Current检索,当前正在执行的HTTP请求上下文。

如果要使用Session对象中的此属性,则必须明确设置它,例如:

protected void Page_Init(object sender, EventArgs e)
{
    Session["UserName"] = HttpContext.Current.User.Identity.Name;
}

然后在你的标记中:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ofety_stopowiczeV1ConnectionString %>" SelectCommand="SELECT [Idoferty] FROM [rezerwacje] WHERE ([user] = @user)">
    <SelectParameters>
        <asp:SessionParameter Name="user" SessionField="UserName" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>

或者,也可以直接在控件上设置一个带默认值的基本参数,如下所示:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ofety_stopowiczeV1ConnectionString %>" SelectCommand="SELECT [Idoferty] FROM [rezerwacje] WHERE ([user] = @user)">
    <SelectParameters>
        <asp:Parameter Name="UserName" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>

然后在代码隐藏中:

protected void Page_Init(object sender, EventArgs e)
{
    SqlDataSource1.SelectParameters["UserName"].DefaultValue = HttpContext.Current.User.Identity.Name;
}

注意:HttpContext.Current.UserUser对ASP.Net Page对象有效,因为User类上的Page对象是快捷方式至HttpContext.Current.User,根据文档:

  

此属性使用HttpContext对象的User属性来确定   请求来自何处。

http://msdn.microsoft.com/en-us/library/system.web.ui.page.user.aspx

HttpContext的文档:http://msdn.microsoft.com/en-us/library/System.Web.HttpContext(v=vs.110).aspx