TataTable和Table能相互转换吗? 查询的结果集在DataTable里,现在要把DataTable集合把换成Table,可以实现吗? 

解决方案 »

  1.   

    水晶报表的Table
    CrystalDecisions.CrystalReports.Engine.Table
      

  2.   

    如果你打算转成HTML的Table可以遍历DataTable dt = new DataTable();//假设dt已包含数据
    string tab = "<table>";
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        tab += "<tr>";
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            tab += "<td>" + dt.Rows[i][j].ToString() + "</td>";
        }
        tab += "</tr>";
    }
    tab += "</table>";tab中就包含了一个Table的HTML代码
      

  3.   

    hdhai9451的用意,应该是把自己的通过某些方法获得的datatable,传递给水晶报表,在水晶报表上展现的吧
    那么可以参考这个方法:PUSH的标准操作CrystalDecisions.CrystalReports.Engine.Table 与 Datatable 不能直接转换
    虽然也有SetDataSource可以绑定dataset(或datatable) ,但是我吃不准你的模板制作方法
    按照前面的连接操作,是比较简单有效的 :)
      

  4.   

    谢谢阿泰,现在我直接传递一个dataset过来,然后绑定到SetDataSource就可以了
      

  5.   

    private void Page_Load(object sender, EventArgs e)
    {
        string report_name = Request["rpt"].ToString();
        Pull_CrystalReports2(report_name);
    }
    private void Pull_CrystalReports2(string report_name)
    {
        myReport = new ReportDocument();
        string reportPath = Server.MapPath("..\\Report\\" + report_name);
        myReport.FileName = report_name;
        myReport.Load(reportPath);    //定义水晶报表的数据库连接信息
        ConnectionInfo connectionInfo = new ConnectionInfo();
        connectionInfo.ServerName = System.Configuration.ConfigurationManager.AppSettings["DBserver"];
        connectionInfo.DatabaseName = System.Configuration.ConfigurationManager.AppSettings["DBname"];
        connectionInfo.UserID = System.Configuration.ConfigurationManager.AppSettings["userID"];
        connectionInfo.Password = System.Configuration.ConfigurationManager.AppSettings["pwd"];    //将数据库信息传递给报表
        Tables dt = myReport.Database.Tables;
        foreach (CrystalDecisions.CrystalReports.Engine.Table table in dt)
        {
            TableLogOnInfo tableLogonInfo = table.LogOnInfo;
            tableLogonInfo.ConnectionInfo = connectionInfo;
            table.ApplyLogOnInfo(tableLogonInfo);
        }    ParameterFields paramFields = new ParameterFields();
        ParameterField paramField = new ParameterField();
        ParameterDiscreteValue discreteVal = new ParameterDiscreteValue();
        paramField.ParameterFieldName = "type_no";
        discreteVal.Value = "color";
        paramField.CurrentValues.Add(discreteVal);
        paramFields.Add(paramField);    CrystalReportViewer1.ParameterFieldInfo = paramFields;
        CrystalReportViewer1.DisplayGroupTree = false;
        CrystalReportViewer1.DisplayToolbar = false;
        CrystalReportViewer1.DataBind();
        CrystalReportViewer1.ReportSource = myReport;
    }上面的代码的过滤条件type_no='color',但是现在全部结果都出来,达不到想要的结果;
    上面参数什么设置呢?
    在水晶报表里我已经设置一个参数名为type_no,类型为字符串;请各位大侠指教,谢谢!
      

  6.   

    我现在是用pull模式,模板制作方法是通过连接操作
      

  7.   

    你的模板里用了“记录选择专家”了吗?这个是关键代码稍微复杂了点,但是没问题。CrystalReportViewer1.DataBind();  这个不需要。