我是C#的新手,但我正在尝试创建类来加载所有报告并为其传递报告名称
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'是一个变量,但用作类型
如何将报告名称作为参数传递?
编辑: 这是我尝试为它创建类的原始代码,因为我正在使用它加载大量报告:
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;
}
编辑类代码后,我尝试调用它:
ReportQuery("RPTSales", "select * from sales",Reports.RPTSales );
我收到有关Reports.RPTSales
的错误消息Error 'RPTSales' is a type, which is not valid in the given context
答案 0 :(得分:2)
您的RPTT
已经是该课程的一个实例。您正在尝试使用该类的实例,就好像它本身就是一个类。而不是试图做
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;
}
答案 1 :(得分:1)
您的原始帖子几乎没有关于其用法的上下文,您说RRPT是报告“名称”,但我认为您的意思是它是子类?
在这种情况下,请使用模板: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;
}
原始帖子中的上下文很少,但这似乎可以回答您的实际问题吗?
答案 2 :(得分:1)
原始代码START TRANSACTION;
// Your truncate statements;
COMMIT;
是一个Type,因此您可以创建一个实例作为方法的参数。
Reports.RPTSales
在ReportQuery("RPTSales", "select * from sales",new Reports.RPTSales());
方法中,您可以使用ReportQuery
对象进行数据数据绑定。
rpt