无法在.aspx中的querystring中传递多个值以在运行时报告

时间:2014-10-24 16:50:27

标签: c# asp.net sql-server-2012 query-string sql-server-data-tools

这应该是一个简单的过程,但现在它变成了烦人的问题。

我试图在VS2012中的ASP.Net网络报告中传递查询字符串中的多个值。页面必须将多个值作为参数传递给报表。 当我发送单个值(例如: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);

请提前帮助,谢谢。)

2 个答案:

答案 0 :(得分:0)

strPb1.Length在代码中始终大于0。如果没有逗号,则Split(&#39;,&#39;)仍会返回包含原始字符串的数组。因此,您的初始值设置是不必要的。

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
    }
}

答案 1 :(得分:0)

感谢您抽出宝贵的时间和宝贵的意见。我尝试了不同的方法,但不接受我们从代码中传递的值。

由于报告不通过代码接受多值参数值,我在报告中添加了另一个参数,默认情况下设置为null。通过代码,我将值传递给此参数。如果该值存在,那么我们忽略多下拉参数&#34; pb1&#34;中的值。 通过这种方法,我们可以通过查询字符串为Pb1和/或Pb2传递多个值,但唯一的缺点是现在我们在报告中有一个新参数。

我不赞成这种新的虚拟参数方法,但在过去的2-3天里,我尽力通过代码将多个值传递给下拉列表中的参数,但不知何故不起作用。这应该是一个简单的过程。这非常令人费解,但我会深究这一点。同时我可以使用当前的方法。

再次感谢您的所有努力:)