J'ai créé un rapport .rdlc sous VS 2012 à l'aide de l'assistant de création de rapport et ajouté une source de données et un jeu de données . Lorsque j'essaie de générer le rapport à l'aide du code ci-dessous, le message d'erreur suivant s'affiche:
"Impossible de créer un lecteur de données pour l'ensemble de données 'DataSet1'."
bytes = localReport.Render("PDF", sdeviceinfo, out smimetype, out sencoding, out sfilenameextension, out streamids, out myWarnings);
Merci d'avance pour toute suggestion!
J'ai le même problème que "Impossible de créer un lecteur de données pour l'ensemble de données 'zzz'"
La réponse est ReportDataSource (string xxx, DataTable yyy)
Vous devriez utiliser le bon nom. xxx devrait être zzz
Mon "gotcha" était la découverte que DataSet n'était pas la même chose que Dataset.
(Oui, je me rends compte que je suis en train de l'admettre devant un forum public, car j'espère que quelqu'un d'autre pourra éviter cette erreur idiote)
Vous ne parvenez pas à créer ReportViewer et à fournir un véritable jeu de données.Il est possible que vous obteniez une erreur en raison de la technique fournissant des paramètres . Vous pouvez essayer comme ceci.J'ai résolu en utilisant cette méthode.
protected void btnPdf_Click(object sender, EventArgs e)
{
ReportViewer viwer = new ReportViewer();
ObjectDataSource ob = new ObjectDataSource("dataset.YourTableAdapter", "GetData");
dataset.YourTableAdapter ds = new dataset.YourTableAdapter();
string PDF = "PDF";
string ReportType = "ReportType";
Warning[] warnings = null;
string[] streamIds = null;
string mimeType = string.Empty;
string encoding = string.Empty;
string extension = string.Empty;
string filetype = string.Empty;
viwer.SizeToReportContent = true;
viwer.LocalReport.ReportPath = "reports/report/report.rdlc";
viwer.ProcessingMode = ProcessingMode.Local;
ob.SelectParameters.Clear();
ob.SelectParameters.Add(QueryStringEnum.CompanyID, CurrentCompanyID.ToString());
ReportDataSource rds = new ReportDataSource("datasetname", (object) ds.GetData((long?)CurrentCompanyID.ToInt64());
viwer.LocalReport.DataSources.Add(rds);
viwer.LocalReport.Refresh();
byte[] bytes = viwer.LocalReport.Render("PDF", null,
out mimeType, out encoding, out extension, out streamIds, out warnings);
}
1) Assurez-vous que vous utilisez le mode administrateur et que vous avez accès au serveur SSRS.
2) Vérifiez si vous avez défini le nom de jeu de données correct ou si vous le chargez et l'attribuez correctement.
Veuillez vérifier this sample sur MSDN.
Bonne chance!
J'ai résolu le problème - mon erreur de codage - j'avais omis les valeurs de paramètre "appropriées" du code aspx pour le SqlServerDataSource comme suit ...
Notez qu'il n'y a PAS de valeur par défaut pour nom-paramètre = "p_CSV_VEHICLES"
AND (il s'est avéré) que les deux paramètres (= "p_CSV_VGROUPS" et = "p_CSV_VEHICLES") ne pouvaient pas transmettre une chaîne vide "" comme valeur par défaut - chaîne vide n'est pas valide dans le contexte de sélection de ces deux paramètres.
Après avoir ajouté la valeur par défaut et défini les valeurs de chaîne valides pour chaque paramètre à la valeur par défaut, le rapport s'affichait parfaitement dans le contrôle ReportViewer de ma page Web.
Voici le code aspx original (ne fonctionne pas).
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:FCI_WebMainConnectionString %>"
SelectCommand="uspRPT_CostDetailFleet" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:Parameter DefaultValue="5" Name="p_UID_DIVISION" Type="Int32" />
<asp:Parameter DefaultValue="85" Name="p_UID_CUSTOMER" Type="Int32" />
<asp:Parameter DefaultValue="FCIFLEETGRP" Name="p_SORT_ORDER" Type="String" />
<asp:Parameter DefaultValue="" Name="p_CSV_VGROUPS" Type="String" />
<asp:Parameter Name="p_CSV_VEHICLES" Type="String" />
<asp:Parameter DbType="Date" DefaultValue="#01/01/2013#" Name="p_dtStart0" />
<asp:Parameter DbType="Date" DefaultValue="#12/31/2013#" Name="p_dtEnd0" />
</SelectParameters>
</asp:SqlDataSource>
L'affichage d'erreur ne permet pas de créer un lecteur de données pour l'ensemble de données de l'ensemble de données1:
private void frm_report_Load(object sender, EventArgs e)
{
this.reportViewer1.RefreshReport();
reportViewer1.LocalReport.Refresh();
reportViewer1.LocalReport.DataSources.Clear();
reportViewer1.LocalReport.ReportEmbeddedResource = "cruds_reports.Report1.rdlc";
SqlCommand cmd = new SqlCommand("select * from tbl_info",con);
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = new DataTable();
dt = ds.Tables[0];
if (dt.Rows.Count>0)
{
rds = new ReportDataSource("DataSet1", dt);
reportViewer1.LocalReport.DataSources.Add(rds);
rds.Value = dt;
reportViewer1.LocalReport.Refresh();
reportViewer1.RefreshReport();
}
else
{
return;
}
}
J'ai aussi eu le même problème. Après avoir observé mes observations, les rapports RDLC ont besoin du jeu de données, il doit contenir des enregistrements ou un objet vide (un objet vide contiendra les métadonnées).
La meilleure pratique consiste donc à toujours renvoyer un jeu de données avec un objet vide (pas Null
ou nothing
) ou avec certains enregistrements qu'il contient.
reportviewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", ObjectDataSource1))
il est préférable de poster votre code de la manière dont vous définissez votre source de données dans le rapport.