无法在运行时将.aspx中的querystring中的多个值传递给报表
本文关键字:值传 报表 querystring 运行时 中的 aspx | 更新日期: 2023-09-27 18:27:40
这应该是一个简单的过程,但现在它变成了一个烦人的问题。
我正试图在VS2012中的ASP.Net web报表中的查询字符串中传递多个值。页面必须将多个值作为参数传递给报表。当我发送单个值(例如:abc)时,数据被正确提取,但当我传递用逗号分隔的多个值(例如abc,xyz)时,它不会显示结果这些用逗号分隔的多个值作为查询字符串传递到页面,然后我们读取它们并将其传递到报表。
请注意:
对于报告中的参数,我设置了默认的值列表,还定义了可用的值集。现在,当我试图将值从c#代码传递给这个参数时,它仍然不接受我提供的值,而是从可用列表中获取所有值。我认为问题是,当选中"允许多个值"复选框时,SSRS不接受用逗号分隔的值。请告知
这就是我目前正在尝试的:
ReportParameter pb1 = new ReportParameter();
if (!string.IsNullOrEmpty(Request.QueryString["pm1"])) {
pb1.Name = "PurchaseMaterial1";
string[] strPb1 = Server.UrlDecode(Request.QueryString["pm1"]).Split(',');
string value = Server.UrlDecode(Request.QueryString["pm1"]);
if (strPb1.Length > 0)
{
int i = 0;
value = "";
while (i < strPb1.Length)
{
if (value == string.Empty)
{
value = "'" + strPb1[i] + "'";
}
else
{
value += ",'" + strPb1[i] + "'";
}
i += 1;
}
}
pb1.Values.Clear();
pb1.Values.Add(value);
请帮忙,提前感谢:)
strPb1.Length在代码中始终大于0。如果没有逗号,Split(',')仍将返回一个包含原始字符串的数组。因此,您的初始值设置是不必要的。
QueryString和split()本身似乎很好。也许问题出在代码或正在使用的查询字符串的其他地方。如果要将逗号重新添加到字符串中,为什么要删除它们?
此外,使用逗号分隔参数的另一种选择是重用相同的参数。www.test.com/?pm1=test1&pm1=test2&pm1=test3
string[] strPb1 = Request.QueryString.GetValues("pm1");
if(strPb1 != null && strPb1.Length > 0)
{
for(int i = 0; i != strPb1.Length; i++)
{
//Code here
}
}
感谢您的时间和宝贵的投入。我尝试了不同的方法,但不接受我们从代码中传递的值。
由于报告不接受代码中的多值参数值,我在报告中添加了另一个默认设置为null的参数。通过代码,我将这些值传递给这个参数。如果该值存在,那么我们将忽略多下拉参数"pb1"中的值。使用这种方法,我们可以通过Pb1和/或Pb2的查询字符串传递多个值,但唯一的缺点是现在我们在报告中有了一个新参数
我不赞成这种新的伪参数方法,但在过去的2-3天里,我尽最大努力通过代码将多个值传递给下拉列表中的参数,但不知何故没有成功。这应该是一个简单的过程。这很令人费解,但我会追根究底的。同时,我可以使用当前的方法。
再次感谢您的所有努力:)