2016-04-25 4 views
0

Ich brauche einen ReportViewer im lokalen Verarbeitungsmodus mit zwei Datenquellen exceed, aber ich habe ein Problem mit dem zweiten.ReportViewer mit mehreren Dataset im lokalen Bericht ausgeführt

Ich desing den Bericht mit Report Builder 3 und es läuft gut dort (beide Datensätze füllen ihre jeweiligen Tabellen).

Aber als ich den Bericht in C# machen, der zweiten Datensatz ist leer, das ist der Code:

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = con; 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = nodoDataSet[0].FirstChild.InnerText.ToString().Replace("@Id", id.ToString()); 
System.Data.DataTable dt = new DataTable(); 
dt.Load(cmd.ExecuteReader()); 

SqlCommand cmd2 = new SqlCommand(); 
cmd2.Connection = con; 
cmd2.CommandType = CommandType.Text; 
cmd2.CommandText = nodoDataSet[1].FirstChild.InnerText.ToString().Replace("@Id", id.ToString()); 
System.Data.DataTable dt2 = new DataTable(); 
dt2.Load(cmd2.ExecuteReader()); 

con.Close(); 

ReportViewer viewer = new ReportViewer(); 
viewer.ProcessingMode = ProcessingMode.Local; 
viewer.LocalReport.ReportPath = urlReporte; 
viewer.LocalReport.DataSources.Add(new ReportDataSource() { Name = "Consulta", Value = dt }); 
viewer.LocalReport.DataSources.Add(new ReportDataSource() { Name = "Consulta2", Value = dt2 }); 
viewer.LocalReport.EnableExternalImages = true; 

List<ReportParameter>() parametros = new List<ReportParameter>(){ 
    new ReportParameter("Id",id.ToString()), 
}; 
viewer.LocalReport.SetParameters(parametros); 
pdf.Add(viewer.LocalReport.Render("PDF")); 

ich die xml öffnen Sie die SQL-Abfrage zu lesen und die Parameter zu ersetzen, führen Sie die Abfrage in der Server und laden Sie eine DataTable, ich mache dies für jede Abfrage, beide Befehle erhalten Daten.

Fügen Sie dann einfach die beiden Datenquellen zum Bericht hinzu und rendern Sie sie als PDF.

Das Problem ist, dass in dem Code, der zweite Tisch bleibt leer:

Gut: http://i.imgur.com/6wWpVMA.png

Bad: http://i.imgur.com/JJz3K33.png

Also, die Frage ist, warum?

Danke!

+0

Setzen Sie einen Haltepunkt nach 'dt2.Load'. Hat dt2 Daten? – Pikoh

+0

Hallo Pikoh, ja, dt2 bekommt 3 Datensätze aus der Datenbank. –

Antwort

0

Ich habe endlich die Lösung gefunden!

Ich nur die Option "Benutzer einzige Transaktion bei der Verarbeitung der Abfragen" im Dialogfeld Datenquelle Eigenschaften und es funktioniert!