Ker*_*eks 3 c# datatable reportviewer datasource rdlc
我在我的reportviewer上收到错误,我不知道如何纠正这个错误....我得到的错误是:"没有为数据源'Request'提供数据源实例." 我试过寻找这个,但找不到任何我能看到的错误,有人可以指点我正确的方向吗?这就是我的reportvierer的样子:
<rsweb:ReportViewer ID="rptViewer" runat="server" Height="654px"
Width="924px" Font-Names="Verdana" Font-Size="8pt"
InteractiveDeviceInfos="(Collection)" WaitMessageFont-Names="Verdana"
WaitMessageFont-Size="14pt">
<LocalReport ReportPath="Report.rdlc">
</LocalReport>
Run Code Online (Sandbox Code Playgroud)
这是我用于reportviewer的代码:
SqlConnection conn;
protected void Page_Load(object sender, EventArgs e)
{
conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
conn.Open();
if (!Page.IsPostBack)
{
runRptViewer();
}
}
private DataTable getData()
{
DataSet dss = new DataSet();
string sql = "";
sql = "SELECT CC_Request.Company, CC_Request.Attention, CC_Request.Telephone, CC_Request.Email, CC_Items.Model, CC_Items.SerialNo, CC_ItemsRequested.Item, CC_ItemsRequested.Quantity, CC_ItemsRequested.Price, CC_ItemsRequested.ModelID, CC_Items.RequestID FROM CC_Request INNER JOIN CC_Items ON CC_Request.RequestID = CC_Items.RequestID INNER JOIN CC_ItemsRequested ON CC_Items.ModelID = CC_ItemsRequested.ModelID WHERE (CC_Request.Company = 'Alpha') AND (CC_ItemsRequested.ModelID = 20) AND (CC_Items.RequestID = 1)";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(dss);
DataTable dt = dss.Tables[0];
return dt;
}
private void runRptViewer()
{
this.rptViewer.Reset();
this.rptViewer.LocalReport.ReportPath = Server.MapPath("Reports\\Report.rdlc");
ReportDataSource rds = new ReportDataSource("dsNewDataSet_Table", getData());
this.rptViewer.LocalReport.DataSources.Clear();
this.rptViewer.LocalReport.DataSources.Add(rds);
this.rptViewer.DataBind();
this.rptViewer.LocalReport.Refresh();
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
编辑 - - - - - - - - - - - -
这也不起作用:
private DataTable getData()
{
DataTable dtable = new DataTable();
dtable.TableName = "dtNewDataSet_Table";
string sql = "";
sql = "SELECT CC_Request.Company, CC_Request.Attention, CC_Request.Telephone, CC_Request.Email, CC_Items.Model, CC_Items.SerialNo, CC_ItemsRequested.Item, CC_ItemsRequested.Quantity, CC_ItemsRequested.Price, CC_ItemsRequested.ModelID, CC_Items.RequestID FROM CC_Request INNER JOIN CC_Items ON CC_Request.RequestID = CC_Items.RequestID INNER JOIN CC_ItemsRequested ON CC_Items.ModelID = CC_ItemsRequested.ModelID WHERE (CC_Request.Company = 'Alpha') AND (CC_ItemsRequested.ModelID = 20) AND (CC_Items.RequestID = 1)";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(dtable);
DataTable dt = dtable;
return dt;
}
Run Code Online (Sandbox Code Playgroud)
我也遇到了这个问题,这就是我来这里的原因.
我找出了问题,我在这里发帖,以帮助一些人遇到这类问题.
我在后面的代码中添加了数据源,如:
ReportViewer1.LocalReport.DataSources.Clear();
ReportDataSource rd = new ReportDataSource("dsData1", DAL.MyDBModel.snData().Tables[0]);
ReportViewer1.LocalReport.DataSources.Add(rd);
Run Code Online (Sandbox Code Playgroud)并且它抛出同样的错误.
解:
在我的代码后面,我将ReportDataSource的参数从" dsData1 "更改为" dsClientPayList "(与RDLC中相同).
ReportDataSource rd = new ReportDataSource("dsClientPayList", DAL.MyDBModel.snData().Tables[0]);
Run Code Online (Sandbox Code Playgroud)
它有效
结论:RDLC和ReportViewer中的DataSource名称必须相同.
谢谢快乐编码:)