6

我正在尝试获取用户名的参数并将其值替换为会话的用户名,以便我可以传递给 DRL 内的存储过程以使用该用户名生成表时间戳。参数“用户名”是 RDL 的参数之一,它带有默认值,我正在尝试使用以下代码更改它。

替换 ReportParameters 之一:

var userParameter = GetUserParameter();
if (userParameter != null)
{
    newParameters.Remove(newParameters.FirstOrDefault(param => param.Name.Contains(CurrentUserParameterName)));
    newParameters.Add(userParameter);
}

查找用户名 ReportParameters:

var paremeters = ReportViewer.ServerReport.GetEditableHiddenParameters();

//finds parameter by its name, pelase view const value in CurrentUserParameterName
var userParameter = paremeters.FirstOrDefault(param => param.Name.Contains(CurrentUserParameterName));
if (userParameter != null)
{
    userParameter.Values.Clear();
    userParameter.Values.Add(Utils.GetUserName());
}
return userParameter;

将参数设置为 ServerReport:

ReportViewer.ServerReport.SetParameters(parameters);

运行报告后,我收到消息“‘用户名’参数缺少值”

当我调试并查看时,ServerReport.GetParameters()我可以看到我确实有 ReportParameter“用户名”,我确实有值(新值),但它的状态是“MissingValidValue”。

我究竟做错了什么?在此先感谢,埃迪

4

1 回答 1

6

由于这篇文章,我终于设法解决了这个问题:http ://technet.microsoft.com/en-us/library/dd220464.aspx

如果您为参数指定了可用值,则有效值始终显示为下拉列表。例如,如果您为 DateTime 参数提供可用值,则日期下拉列表将显示在参数窗格中,而不是日历控件中。为确保报表和子报表之间的值列表保持一致,您可以在数据源上设置一个选项,以对与数据源关联的数据集中的所有查询使用单个事务。

由于除了将其放入“默认值”之外,我还在“可用值”选项中输入了默认值,因此报告试图验证新的会话用户名,该用户名未列为“可用值”。一旦我删除了“可用值”中的值,我在代码隐藏中提供的新 ReportParameter 就不必验证,并且报告成功呈现。

于 2011-09-14T11:39:04.603 回答