DropDownList没有显示数据绑定值

时间:2013-07-08 03:01:48

标签: c# asp.net sql-server

我想知道这段代码有什么问题。我正在使用SQLReportDataSource.SelectParameters.Add("@profileName", User.Identity.Name);将参数添加到ASPX页面中的SQL Data Source。它使用User.Identity.Name来获取当前登录用户并将该值传递给ASPX SQL数据源,但DropDownList未显示任何值且未显示任何错误。这甚至是从基于ASPX的数据源指定参数的正确方法吗?

即使我修改SQLReportDataSource.SelectParameters以将值硬编码为我知道存在的事物并且确实产生我通过将SELECT查询输入SSMS而测试的结果,它也不返回任何内容。例如:

string name = "name";
SQLReportDataSource.SelectParameters.Add("@profileName", name);

我也尝试从SqlDataReader获取值,但同样的事情。我哪里错了?

ASPX

<asp:SqlDataSource ID="SQLReportDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:SFGSConnectionString1 %>" SelectCommand="SELECT [profileID], [profileName] FROM [vw_profile] WHERE profileName=@profileName">
    <SelectParameters>
        <asp:Parameter Name="@profileName" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>
<asp:DropDownList ID="chooseProfile" runat="server" DataSourceID="SQLReportDataSource" DataTextField="profileName" DataValueField="profileID" />

代码背后

SQLReportDataSource.SelectParameters.Add("@profileName", User.Identity.Name);

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM vw_reports WHERE profileName=@currentUser", conn);
cmd.Parameters.AddWithValue("@currentUser", User.Identity.Name);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
    string memberID = reader["memberID"].ToString();
    int reportNum = Convert.ToInt32(reader["reportNumber"]);
    reportNum++;
    reportNumber.Text = reportNum.ToString();
}
reader.Close();
conn.Close();

2 个答案:

答案 0 :(得分:1)

指定参数

时,不需要

@前缀

<asp:Parameter Name="profileName" Type="String" />

您可以在DataSource Selecting事件中指定参数值,如下所示

protected void SQLReportDataSource_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
    e.Command.Parameters["profileName"].Value = User.Identity.Name;
}

答案 1 :(得分:0)

除了使用damith设置这样的默认值 SQLReportDataSource.SelectParameters [“profileName”]。DefaultValue = User.Identity.Name;