我的代码如下:  for(int i=0;i<dt.Rows.Count;i++)
                {
                    cr.SetParameterValue("ftime", Convert.ToDateTime(this.dateTimePicker3.Text).ToString("yyyy-MM-dd"));
                    cr.SetParameterValue("etime", Convert.ToDateTime(this.dateTimePicker4.Text).ToString("yyyy-MM-dd"));
                    cr.SetParameterValue("car_h",dt.Rows[i]["car_h"].ToString());
                    cr.SetParameterValue("cpxh", dt.Rows[i]["cpxh"].ToString());
                    string str = dt.Rows[i]["zxingcheng"].ToString();
                    cr.SetParameterValue("zxingcheng",shujuzhuanhuan(dt.Rows[i]["zxingcheng"].ToString()));
                    cr.SetParameterValue("yingcheng", shujuzhuanhuan(dt.Rows[i]["yingcheng"].ToString()));
                    cr.SetParameterValue("xingcheng", shujuzhuanhuan(dt.Rows[i]["xingcheng"].ToString()));
                    cr.SetParameterValue("jine", shujuzhuanhuan(dt.Rows[i]["jine"].ToString()));
                    cr.SetParameterValue("dengh", shujuzhuanhuan(dt.Rows[i]["dengh"].ToString()));
                    cr.SetParameterValue("zkc", dt.Rows[i]["zkc"].ToString());
                    if (dt.Columns.Count > 8)
                    {
                        cr.SetParameterValue("riqi", dt.Rows[i]["riqi"].ToString());
                    }
                    else
                    {
                        cr.SetParameterValue("riqi", "");
                    }
                    
                }
                //}
                this.crystalReportViewer3.ReportSource = cr;
问题是,循环完之后为什么报表只显示一行数据,而我想显示多行数据。改怎么解决。在报表的参数字段中已经设置允许多个值。
能给出代码或者步骤的多给分

解决方案 »

  1.   

    你的cr 在for循环到最后,只是最后一行的所获得的值,
      

  2.   

    报表上的字段显示多行数据是指数据可以以多行的形式显示出来,即一个字段可以被显示为多行,而不会被遮断。不是像你写的那样可以多次绑定。
    解决办法就是先将多个相同字段的值拼接为一个字符串,再绑定上去。string sFtime = null; for(int i=0;i <dt.Rows.Count;i++) 
                    { 
                        sFtime += Convert.ToDateTime(this.dateTimePicker3.Text).ToString("yyyy-MM-dd") + '\r' +'\n';                     
                    } 
     cr.SetParameterValue("ftime", sFtime );
    仅供参考
      

  3.   

    如果这样的话的,就只能处理字符串格式的了。如果我是数字的话,怎么办啊,比如这句:cr.SetParameterValue("zxingcheng",shujuzhuanhuan(dt.Rows[i]["zxingcheng"].ToString())); 就是添加的数字格式的数。
      

  4.   

    离散多值,不是这么传的,你这样传,每次循环都会把上一轮次的值替换掉,所以只会得到最后一次的值。
    给你一个参考。             
    //定义水晶报表参数离散值变量             
    ParameterDiscreteValue PV; 
    //定义水晶报表参数集合变量
    ParameterValues PVS = new ParameterValues(); 
    //这里是把一个字串切成一个数组,跟你的记录集循环一个道理
    string[] arrayDDH = Request.QueryString["DDH"].Split(Convert.ToChar(0x2)); 
    //循环把值给PV
    //然后把PV加大PVS
    //PVS容纳多个值
                foreach (string sDDH in arrayDDH) 
                { 
                    if ((sDDH == "") || (sDDH == null)) continue; 
                    PV = new ParameterDiscreteValue(); 
                    PV.Value = sDDH; 
                    PVS.Add(PV); 
                } 
    //获取报表参数
    ParameterFieldDefinition PFD = Rpt.DataDefinition.ParameterFields["pDDH"]; 
    //把PVS传给报表参数
    PFD.ApplyCurrentValues(PVS);