2010-02-15 34 views
5

如何以編程方式設置ASP.NET ReportViewer控件的數據源?如何以編程方式爲ASP.NET ReportViewer控件設置數據源?

我有一個VS 2008 ReportViewer控件,並希望在幾個不同的報告之間切換。

我可以通過設置報表源和刷新控件來切換報表,但我看不到設置數據源的位置。

每個報表都有自己的數據源,如果我在構建控件時初始配置它們,那就沒問題,但我需要在它們之間切換。

+0

你在說關於ReportViewer控件或其他控件? – womp 2010-02-15 01:28:28

+0

是的,我很感謝。 – Maestro1024 2010-02-15 10:39:46

回答

4

我假設問題是關於ReportViewer控件。

reportViewer.LocalReport.DataSources.Clear(); 
reportViewer.LocalReport.DataSources.Add(new ReportDataSource("dsname", source)); 

"dsname"是數據源的名稱,你可以找到它.rdlc文件。 source是您想要在報告中顯示的數據的變量。

+0

當我這樣做,我得到 「#報告處理過程中發生錯誤 *數據源實例尚未提供給數據源....」 – Maestro1024 2010-02-15 12:58:55

+0

並提供數據源中列出的數據源我最初設置的默認報告。這就像新的數據源沒有被真正設置。 – Maestro1024 2010-02-15 13:22:44

+0

我仍在看這個。想知道我是否有錯誤的「源名」。如何查看報告中使用的來源? – Maestro1024 2010-02-16 00:44:07

1

1)基本標記:

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<rsweb:ReportViewer ID="rptView" Width="1000px" ProcessingMode="Local" 
     Font-Names="Verdana" Font-Size="8pt" InteractiveDeviceInfos="(Collection)" 
     WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" runat="server" > 
</rsweb:ReportViewer> 

2)編輯XML報告。設置您的數據集&字段名:

<DataSets> 
    <DataSet Name="dsSource"> 
    <Fields> 
     <Field Name="MyField1"> 
     <DataField>MyField1</DataField> 
     <rd:TypeName>System.String</rd:TypeName> 
     </Field> 
    <Query> 
     <DataSourceName>dsSource</DataSourceName> 
     <CommandText>/* Local Query */</CommandText> 
    </Query> 
    </DataSet> 
</DataSets> 

3)上都設置數據源報告&報表查看器(不知道爲什麼......無一不是必要的)

SqlConnection cn = new SqlConnection(_connectionString); 
SqlCommand cmd = new SqlCommand("dbo.MyProc", cn); 
cmd.CommandType = CommandType.StoredProcedure; 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
DataTable tbl = new DataTable(); 

cn.Open(); 
da.Fill(tbl); 
cn.Close(); 

rptView.Visible = true; 
rptView.LocalReport.DataSources.Clear(); 
ReportDataSource rptData = new ReportDataSource("dsSource", tbl); 

LocalReport r = new LocalReport(); 
r.ReportPath = Server.MapPath("~/Reports/MyReport.rdlc"); 
r.DataSources.Add(rptData); 

rptView.LocalReport.DataSources.Add(rptData); 
rptView.LocalReport.ReportPath = Server.MapPath("~/Reports/MyReport.rdlc"); 
rptView.LocalReport.Refresh(); 
0
GlobalReportViewer.AsyncRendering = True 
    If Session.Count > 0 Then 
     For i As Integer = 0 To Session.Count - 1 
      If Session(i).GetType().ToString() = "Microsoft.Reporting.WebForms.ReportHierarchy" Then 
       Session.RemoveAt(i) 
      End If 
     Next 
    End If 
    GlobalReportViewer.LocalReport.ReportPath = "" 
GlobalReportViewer.LocalReport.ReleaseSandboxAppDomain() 
GlobalReportViewer.LocalReport.DataSources.Add(New ReportDataSource("XXXDataSet_YYYTable", "ObjectDSZZZ")) 
GlobalReportViewer.LocalReport.ReportPath = "Reports\AAAReport.rdlc" 
GlobalReportViewer.LocalReport.Refresh() 
相關問題