none
水晶报表加载不了数据 RRS feed

  • 问题

  • 现在要自定义报表显示字段。可是我运行就弹出框提示输入参数框。取消之后我配置字段了可是没有数据,代码如下不知道原因是啥呀
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using CrystalDecisions.Shared;
    using CrystalDecisions.CrystalReports.Engine;
    using CrystalDecisions.Windows.Forms;
    using System.Collections;
    using System.Data.SqlClient;
    
    namespace Test
    {
      public partial class Form1 : Form
      {
        CrystalReport1 crReportDocument = new CrystalReport1();
        public Form1()
        {
          InitializeComponent();
          string strSql = "select  name  from  syscolumns  where  id=object_id('dbo.WaybillInfor')  ";
          DataSet ds = DataHelp.GetData(strSql);
          this.checkedListBox1.DataSource = ds.Tables[0];
          this.checkedListBox1.DisplayMember = "name";
          this.checkedListBox1.ValueMember = "name";
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          //保持字段的字符串 
          String fldstr = "";
          //保持字段名称的数组 
          string[] fldArr;
          int i = 0;
          int j = 0;
          // '参数字段集合
          ParameterFields ParamFields=new ParameterFields();
          // '参数字段
          ParameterField ParamField;
          //'离散值
          ParameterDiscreteValue DiscreteVal;
    
    
          for (int x = 0; x < checkedListBox1.Items.Count; x++)
          {
            if (checkedListBox1.GetItemChecked(x))
            {
    
              fldstr = fldstr + "," + (string)((System.Data.DataRowView)(checkedListBox1.Items[x])).Row.ItemArray[0];
    
            }
          }
          if (fldstr == "")
          {
            MessageBox.Show("请选择要显示的字段");
            return;
          }
    
          if (fldstr.Substring(0, 1) == ",")
          {
            fldstr = fldstr.Substring(1, fldstr.Length - 1);
          }
    
          fldArr = fldstr.Split(',');
    
          DataSet dataSet = DataHelp.GetData("select  " + fldstr + " from WaybillInfor");
          CrystalReport1 crReportDocument = new CrystalReport1();
          //开始以数组为依据依次顺序设置表头和公式字段
          for (i = 0; i < fldArr.Length; i++)
          {  //设置第一个离散值并将其传递给该参数
            //传递参数做为表头      
            // 参数设置部分
            ParamField = new ParameterField();
            ParamField.ParameterFieldName = "myParaField" + (i + 1).ToString();
            // 离散值
            DiscreteVal = new ParameterDiscreteValue();
            DiscreteVal.Value = fldArr[i];
            // 赋值
            ParamField.CurrentValues.Add(DiscreteVal);
            // 将该字段加如到字段集合中
            ParamFields.Add(ParamField);
            // 不允许该字段弹出提示
            ParamField.AllowCustomValues = false;
    
            // 将公式绑定到具体字段
            crReportDocument.DataDefinition.FormulaFields["file" + (i + 1).ToString()].Text = "{WaybillInfor." + fldArr[i] + "}";
          }
     
          //设置剩余的未使用到的参数,防止出现提示,具体操作同上,只是给一个空值 
          for ( j = i+1; j <= 6; j++)
    			{
    		
          ParamField = new ParameterField();
          ParamField.ParameterFieldName = "myParaField" + (j).ToString();
          ParamFields.Add(ParamField);
          DiscreteVal = new ParameterDiscreteValue();
          DiscreteVal.Value = "";
          ParamField.CurrentValues.Add(DiscreteVal);
          ParamFields.Add(ParamField);
          ParamField.AllowCustomValues = false;
    			}
          
     
        this.crystalReportViewer1.ParameterFieldInfo = ParamFields; 
        // crReportDocument.SetDataSource(dataSet);  
          crReportDocument.Database.Tables[0].SetDataSource(dataSet);
        crystalReportViewer1.ReportSource = crReportDocument;
        }
      }
    
    }
    
    • 已更改类型 水碎了 2010年11月12日 11:05
    2010年11月12日 11:04

答案

  •  

    ParameterFields ParamFields=new ParameterFields();
    ParameterField ParamField;
    ParameterDiscreteValue DiscreteVal;
    CrystalReport1 crReportDocument = new CrystalReport1();

    for ( j = 1; j <= 6; j++)
    {

    ParamField = new ParameterField();
    ParamField.ParameterFieldName = "myParaField" + (j).ToString();
    ParamFields.Add(ParamField);
    DiscreteVal = new ParameterDiscreteValue();
    DiscreteVal.Value = "" ;
    ParamField.CurrentValues.Add(DiscreteVal);
    ParamFields.Add(ParamField);
    ParamField.AllowCustomValues = false ;
    }


    this .crystalReportViewer1.ParameterFieldInfo = ParamFields;

    初始化的时候呀给参数字段值,加上这个就不弹了

    • 已标记为答案 水碎了 2010年11月12日 15:58
    2010年11月12日 15:58