【问题标题】:Filtering SqlDataSource based on user根据用户过滤 SqlDataSource
【发布时间】:2012-03-21 22:41:22
【问题描述】:

我正在从我的数据库中检索数据,这很容易通过将查询分配给 SelectCommand 来完成。但是,我想根据登录的用户类型显示某些记录。我使用的是 ASP.Net 和 C#。

<asp:SqlDataSource ID="SqlDataSourceInbox" runat="server"
    ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:DBConnectionString.ProviderName %>" 

    SelectCommand="SELECT MESSAGE_ID, FACILITY_ID, TYPE, DEPARTMENT, STATUS, REMARKS
                   FROM INBOX ORDER BY DATE_RECIEVED"
</asp:SqlDataSource>

我尝试通过其 ID 访问属性来使用代码隐藏,但这似乎不起作用。有任何想法吗?还是在没有代码隐藏的情况下处理它会更好?

【问题讨论】:

  • 你是如何确定用户类型的?
  • 我正在根据他们的设施 ID 确定用户类型。

标签: c# asp.net sqldatasource


【解决方案1】:

如果您使用的是 Sql Server 和 SqlClient Provider,您可以按如下方式构造您的查询:

<asp:SqlDataSource ID="SqlDataSourceInbox" 
     SelectCommand="SELECT MESSAGE_ID, FACILITY_ID, TYPE, DEPARTMENT, STATUS, REMARKS
                    FROM INBOX ORDER BY DATE_RECIEVED
                    WHERE USER_NAME=@UserName"
     runat="server">
</asp:SqlDataSource>

看到我正在添加一个 WHERE 子句过滤假设字段“USER_NAME”(或您想要的其他字段)和参数 @UserName。

因此,在后面的代码中,您获取登录的用户名并添加 select 参数及其值:

    protected void Page_Load(object sender, EventArgs e)
    {
        string user = User.Identity.Name;
        SqlDataSourceInbox.SelectParameters.Clear();
        SqlDataSourceInbox.SelectParameters.Add("@UserName", user);
    }

希望对你有帮助。

【讨论】:

  • 这看起来不错,符合我的想法,但奇怪的是在我的代码隐藏文件中它无法识别 ID="SqlDataSourceInbox"。一般来说,我应该可以在代码隐藏中访问它吗?我可能需要看看为什么不知道看到。我非常感谢您的帮助。
  • SqlDataSource 的 id 必须可以在后面的代码中作为实例变量访问。在这种情况下,如果您定义 应该可以访问此实例变量。尝试将其他控件添加到页面并在代码隐藏中访问其属性。
猜你喜欢
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 2014-07-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
相关资源
最近更新 更多