在 class 中使用报告名称作为参数
Using Report Name as parameter in class
我是 C# 的新手,但我正在尝试创建 class 来加载所有报告并为其传递报告名称
public void ReportQuery(string DTTable,string query, ReportClass RPTT )
{
using (IDbConnection db = new SqlConnection(constring))
{
db.Open();
da = new SqlDataAdapter(query, con);
da.Fill(ds, DTTable);
RPTT rpt= new RPTT();
rpt.Load("~/RPTSales.rpt");
rpt.SetDataSource(ds.Tables[DTTable]);
this.crystalReportViewer1.ReportSource = rpt;
}
}
我在 RPTT rpt= new RPTT()
上遇到错误;
'RPTT' is a variable but is used like a type
如何将报告名称作为参数传递?
编辑:
这是我尝试为其创建 class 的原始代码,因为我正在使用它加载大量报告:
using (IDbConnection db = new SqlConnection(constring))
{
if (ds.Tables["RPTSales"] != null)
{ds.Tables["RPTSales"].Clear();}
db.Open();
da = new SqlDataAdapter("select * from sales", con);
da.Fill(ds, "RPTSales");
Reports.RPTSales rpt = new Reports.RPTSales();
rpt.Load("~/RPTSales.rpt");
rpt.SetDataSource(ds.Tables["RPTSales"]);
SetDBLogonForReport(cn, rpt);
this.crystalReportViewer1.ReportSource = rpt;
}
编辑 class 代码后,当我尝试调用它时:
ReportQuery("RPTSales", "select * from sales",Reports.RPTSales );
我得到关于 Reports.RPTSales
的错误
Error 'RPTSales' is a type, which is not valid in the given context
您的 RPTT
已经是 class 的实例。您正在尝试使用 class 的实例,就好像它是 class 本身一样。而不是尝试做
RPTT rpt= new RPTT();
只需使用 RPTT 参数即可。
public void ReportQuery(string DTTable,string query, ReportClass RPTT )
{
using (IDbConnection db = new SqlConnection(constring))
{
db.Open();
da = new SqlDataAdapter(query, con);
da.Fill(ds, DTTable);
RPTT.Load("~/RPTSales.rpt");
RPTT.SetDataSource(ds.Tables[DTTable]);
this.crystalReportViewer1.ReportSource = RPTT;
}
你原来的 post 几乎没有关于它的用法的上下文,你说 RRPT 是报告 "name",但我假设你的意思是它是子类?
在那种情况下,使用模板:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/generic-methods
像这样(未经测试):
public void ReportQuery<T>(string DTTable,string query) where T : ReportClass
{
using (IDbConnection db = new SqlConnection(constring))
{
db.Open();
da = new SqlDataAdapter(query, con);
da.Fill(ds, DTTable);
T rpt= new T(); // Or just `T rpt = T()` if error here
rpt.Load("~/RPTSales.rpt");
rpt.SetDataSource(ds.Tables[DTTable]);
this.crystalReportViewer1.ReportSource = rpt;
}
原文中的上下文很少 post,但这似乎能回答您的实际问题吗?
在原始代码中 Reports.RPTSales
是一个类型,因此您可以创建一个实例作为方法的参数。
ReportQuery("RPTSales", "select * from sales",new Reports.RPTSales());
在ReportQuery
方法中你可以使用rpt
对象来做数据绑定。
public void ReportQuery(string DTTable,string query, Reports.RPTSales rpt)
{
using (IDbConnection db = new SqlConnection(constring))
{
db.Open();
da = new SqlDataAdapter(query, con);
da.Fill(ds, DTTable);
rpt.Load("~/RPTSales.rpt");
rpt.SetDataSource(ds.Tables[DTTable]);
this.crystalReportViewer1.ReportSource = rpt;
}
}
我是 C# 的新手,但我正在尝试创建 class 来加载所有报告并为其传递报告名称
public void ReportQuery(string DTTable,string query, ReportClass RPTT )
{
using (IDbConnection db = new SqlConnection(constring))
{
db.Open();
da = new SqlDataAdapter(query, con);
da.Fill(ds, DTTable);
RPTT rpt= new RPTT();
rpt.Load("~/RPTSales.rpt");
rpt.SetDataSource(ds.Tables[DTTable]);
this.crystalReportViewer1.ReportSource = rpt;
}
}
我在 RPTT rpt= new RPTT()
上遇到错误;
'RPTT' is a variable but is used like a type
如何将报告名称作为参数传递?
编辑: 这是我尝试为其创建 class 的原始代码,因为我正在使用它加载大量报告:
using (IDbConnection db = new SqlConnection(constring))
{
if (ds.Tables["RPTSales"] != null)
{ds.Tables["RPTSales"].Clear();}
db.Open();
da = new SqlDataAdapter("select * from sales", con);
da.Fill(ds, "RPTSales");
Reports.RPTSales rpt = new Reports.RPTSales();
rpt.Load("~/RPTSales.rpt");
rpt.SetDataSource(ds.Tables["RPTSales"]);
SetDBLogonForReport(cn, rpt);
this.crystalReportViewer1.ReportSource = rpt;
}
编辑 class 代码后,当我尝试调用它时:
ReportQuery("RPTSales", "select * from sales",Reports.RPTSales );
我得到关于 Reports.RPTSales
的错误Error 'RPTSales' is a type, which is not valid in the given context
您的 RPTT
已经是 class 的实例。您正在尝试使用 class 的实例,就好像它是 class 本身一样。而不是尝试做
RPTT rpt= new RPTT();
只需使用 RPTT 参数即可。
public void ReportQuery(string DTTable,string query, ReportClass RPTT )
{
using (IDbConnection db = new SqlConnection(constring))
{
db.Open();
da = new SqlDataAdapter(query, con);
da.Fill(ds, DTTable);
RPTT.Load("~/RPTSales.rpt");
RPTT.SetDataSource(ds.Tables[DTTable]);
this.crystalReportViewer1.ReportSource = RPTT;
}
你原来的 post 几乎没有关于它的用法的上下文,你说 RRPT 是报告 "name",但我假设你的意思是它是子类?
在那种情况下,使用模板:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/generic-methods
像这样(未经测试):
public void ReportQuery<T>(string DTTable,string query) where T : ReportClass
{
using (IDbConnection db = new SqlConnection(constring))
{
db.Open();
da = new SqlDataAdapter(query, con);
da.Fill(ds, DTTable);
T rpt= new T(); // Or just `T rpt = T()` if error here
rpt.Load("~/RPTSales.rpt");
rpt.SetDataSource(ds.Tables[DTTable]);
this.crystalReportViewer1.ReportSource = rpt;
}
原文中的上下文很少 post,但这似乎能回答您的实际问题吗?
在原始代码中 Reports.RPTSales
是一个类型,因此您可以创建一个实例作为方法的参数。
ReportQuery("RPTSales", "select * from sales",new Reports.RPTSales());
在ReportQuery
方法中你可以使用rpt
对象来做数据绑定。
public void ReportQuery(string DTTable,string query, Reports.RPTSales rpt)
{
using (IDbConnection db = new SqlConnection(constring))
{
db.Open();
da = new SqlDataAdapter(query, con);
da.Fill(ds, DTTable);
rpt.Load("~/RPTSales.rpt");
rpt.SetDataSource(ds.Tables[DTTable]);
this.crystalReportViewer1.ReportSource = rpt;
}
}