gpt4 book ai didi

c# - 如何使用 SQL 填充 Crystal Reports

转载 作者:行者123 更新时间:2023-11-30 12:36:31 25 4
gpt4 key购买 nike

由于似乎没有任何方法可以在 .Net 中加载旧的 VB6 (ActiveReports) 报告,我需要在 .Net 中重新创建几十个报告。我想以尽可能不痛苦的方式做到这一点。

在 VB6 中,原作者只需为每个报告做这样的事情:

adoConn.ConnectionString = globalConnectionObject.ConnectionString
adoConn.Source = ReportFunctions.GetAllUsers()

GetAllUsers() 返回一个选择了一堆字段的 SQL 字符串;然后在报告中使用这些字段。

现在:
我如何在 .Net 中做类似的事情(使用内置的 Crystal Reports 或内置的 “Microsoft Reporting Technology”)?

我无法让“数据库专家”识别globalConnectionObject(ADODB.Connection 对象);如果我填写数据集并执行

report.SetDataSource(dataSet)

它告诉我“报告没有表格。”

如何填充 Crystal Reports 报表!? (编译时不知道连接字符串/数据位置)

最佳答案

创建连接:

/// <summary>
/// Sets the connection.
/// </summary>
public void SetConnection()
{
_connection = new SqlConnection(Settings.Default.connectionString);
if (_connection.State == System.Data.ConnectionState.Open)
{
_connection.Close();
}
_connection.Open();
}

/// <summary>
/// Closes the connection.
/// </summary>
public void CloseConnection()
{
if (_connection.State == System.Data.ConnectionState.Open)
{
_connection.Close();
_connection.Dispose();
}
}

使用上面的连接手动填充数据集或将数据集添加到您的解决方案以获取数据而无需编写连接代码。假设您添加了 Employee.XSD。在 XSD 中添加一个表适配器,这将通过自动生成查询和数据表来帮助您从数据库中提取数据。做了这一切之后。在项目的某处创建一个方法,

Public DataTable GetAllEmployees()
{
Employee.EmployeeTableAdapter adapt = New Employee.EmployeeTableAdapter();
DataTable dt = New DataTable();
dt = adapt.GetData(); // you can also use fill based on your criteria.
return dt; //your datatable with data
}

现在在您的表单上添加一个报表查看器控件。

ReportViewer1 rpt = New ReportViewer();
ReportDocument rptDoc = new ReportDocument();
rptDoc.Load("path of rpt file");
rptDoc.SetDataSource(GetAllEmployees());
rpt.Document = rptDoc;
rpt.Refresh();

在此之前,从 Crystal Report 中,根据您的要求在报表上添加表格的字段。

另一种实现方式

Crystal 报表可用于各种对象。如果您有动态绑定(bind)它的方案,请参阅下面的答案然后您可以做一件事,即向解决方案添加一个新数据集。创建数据表并添加具有适当数据类型的所需列。不要添加查询或表适配器。现在从您的代码中添加一个类文件并创建与数据表列完全相似的属性。现在将数据表设置为要报告的源并将其列添加到报告中。

For example , if you have columns
ID - integer
EmpName - string
Salary - double
Department - string

创建一个类

public class Employee
{
private SqlConnection _connection;
public int ID {get;set;}
public string EmpName {get;set;}
public double Salary {get;set;}
public string Department {get;set;}



/// <summary>
/// Sets the connection.
/// </summary>
public void SetConnection()
{
//assuming connection string is placed in settings file from Project Properties.
_connection = new SqlConnection(Settings.Default.connectionString);
if (_connection.State == System.Data.ConnectionState.Open)
{
_connection.Close();
}
_connection.Open();
}

/// <summary>
/// Closes the connection.
/// </summary>
public void CloseConnection()
{
if (_connection.State == System.Data.ConnectionState.Open)
{
_connection.Close();
_connection.Dispose();
}
}


public DataTable GetEmployees()
{
DataTable dt = new DataTable("Employee");
// using above connection
SetConnection();
using(SqlCommand command = new SqlCOmmand("commandText",_connection))
{
using(SqlDataReader reader = command.ExecuteReader())
{
dt.Load(reader);
}
}
return dt;
}
}

现在创建另一个函数来填充在数据集内创建的数据表。

public void PopulateDataTable()
{
DataTable dt = GetEmployee();
Employee dsEmployee = New DataSet();
dsEmployee.EmployeeDataTable dtEmp = new dsEmployee.EmployeeDataTable();
dtEmp = dt;
}

关于c# - 如何使用 SQL 填充 Crystal Reports,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3152782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com