2013-04-03 91 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 
} 
} 
} 
相關問題