2013-04-03 94 views
3

我在我的reportviewer上得到一个错误,我不知道如何解决此问题.... 我得到的错误是:“尚未为数据源“请求”提供数据源实例。“ 我试过寻找这个,但找不到任何我能看到的是错误的,有人可以请我指出正确的方向吗?这是我的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> 

这是我使用中的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(); 
} 

任何帮助将不胜感激。

编辑-----------------------

这不起作用或者:

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; 
} 
+0

侧面说明:为什么你创建和填充一个'DataSet'时,你只返回它的第一个表呢?创建一个'DataTable'并填充它。 –

+0

@Tim Schmelter,即不工作..... – Kerieks

回答

8

我还面临这个问题,这就是为什么我来到这里。

我弄清楚了这个问题,我发布这里是为了帮助那些遇到这种问题的人。 RDLC的

  1. 我的数据源是“dsClientPayList”
  2. 我添加数据源在我后面的代码,如:

    ReportViewer1.LocalReport.DataSources.Clear(); 
    ReportDataSource rd = new ReportDataSource("dsData1", DAL.MyDBModel.snData().Tables[0]); 
    ReportViewer1.LocalReport.DataSources.Add(rd); 
    

,它被扔同样的错误。

解决方案:

在我背后说我的代码从 “dsData1” 到 “dsClientPayList”(同RDLC)改变ReportDataSource的参数。

ReportDataSource rd = new ReportDataSource("dsClientPayList", DAL.MyDBModel.snData().Tables[0]); 

和它的作品

结论:数据源名称必须在两个RDLC和的ReportViewer一样。

感谢 编码快乐:)

+0

也适合我! :) –

3

你要设置的所有在报告中使用的数据源。

在这种情况下,如果只有一个数据源,应该是这样的

ReportDataSource rds = new ReportDataSource("Request", getData()); 
+1

它有多个(我有3)我必须添加3个ReportDataSources,然后将它们添加3次到本地报告数据源?我已经这样做了,但是它使报告查看器不显示(像完全不可见)? – Kerieks

+1

是的,添加报表中使用的所有数据源,确保数据源名称正确。 –

0

我宁愿做它与“使用”为正确的对象处理和错误的语句处理

using (SqlConnection conn = new SqlConnection(connStr)) { 
using(SqlCommand comm = new SqlCommand()) { 
comm.Connection = conn; 
comm.CommandText = sql; 

。 ..

try { 
conn.Open(); 
comm.ExecuteNonQuery(); 
} 
catch(SqlException e) { 
// in case something is wrong 
} 
} 
} 
相关问题