Comment lier dynamiquement source de données à reportviewer sur les windows forms c#
J'ai créé un formulaire windows qui agit en tant que rapport du chargeur. J'ai créé également deux RDLC rapports par l'assistant de création de rapport et il a créé automatiquement des données de ces deux rapports. Maintenant, j'ai deux jeux de données: sparcsn4DataSet.xsd et sparcsn4DataSet1.xsd qui sont à l'aide de la procédure stockée et passe deux paramètres (dateFrom/dateTo). J'ai un problème avec la liaison dataset en fonction du statut:
if (idRep.Equals("extraMove"))
Il est assez facile de lier l'ensemble de données reportview, si vous en avez un rapport.
mais que faire si vous avez plus d'un? Je peux toujours créer un autre formulaire avec un autre reportviewer mais ce n'est pas une option (que faire si vous avez 10 rapports/ensembles de données), ce qui est définitivement hors de question?
Il devrait y avoir un moyen de lier l'ensemble de données reportviewer... quelqu'un a une idée, comment je peux résoudre problème de liaison en fonction de l'état?
if (idRep.Equals("extraMove"))
{
this.AGCT_ServiceEventReportTableAdapter.Fill(this.sparcsn4DataSet.AGCT_ServiceEventReport, d1,d2);
}
else if (idRep.Equals("stripStuff"))
{
this.AGCT_StripStuffReportTableAdapter.Fill(this.sparcsn4DataSet1.AGCT_StripStuffReport, d1, d2);
}
else
{
MessageBox.Show("Ooops, something went wrong...!");
}
C'est ReportForm.cs qui ont reportviewer sur elle:
namespace NavisReportLoader
{
public partial class ReportForm : Form
{
public DateTime d1;
public DateTime d2;
public string dat1;
public string dat2;
public string idRep;
public ReportForm()
{
InitializeComponent();
}
public void passParam(string dateFrom, string dateTo, string date1, string date2)
{
//ispravi ovo
d1 = Convert.ToDateTime(dateFrom);
d2 = Convert.ToDateTime(dateTo);
dat1 = date1;
dat2 = date2;
}
public void report(string id)
{
idRep = id;
}
private void ReportForm_Load(object sender, EventArgs e)
{
ReportParameter[] param = new ReportParameter[2];
param[0] = new ReportParameter("date1", dat1);
param[1] = new ReportParameter("date2", dat2);
this.reportViewer1.LocalReport.SetParameters(param);
if (idRep.Equals("extraMove"))
{
this.AGCT_ServiceEventReportTableAdapter.Fill(this.sparcsn4DataSet.AGCT_ServiceEventReport, d1,d2);
}
else if (idRep.Equals("stripStuff"))
{
this.AGCT_StripStuffReportTableAdapter.Fill(this.sparcsn4DataSet1.AGCT_StripStuffReport, d1, d2);
}
else
{
MessageBox.Show("Ooops, something went wrong...!");
}
this.reportViewer1.RefreshReport();
}
}
}
Vous devez vous connecter pour publier un commentaire.
OK, essayer de le comprendre, hier, j'ai trouvé une solution qui soit acceptable pour moi, donc je voulais la partager avec les autres:
1.st vous avez besoin pour créer un modèle de classe avec des propriétés de sorte qu'il sera ajouté dans le dataset:
exemple:
après que vous avez besoin pour créer de la plaine de classe simple pour la connexion à la base de données et d'appeler la procédure stockée, passer les paramètres et de les lire à l'aide des données de sortie du lecteur. Dans mon exemple, j'ai ajouté ceci dans une liste et de les énumérer mon modèle:
exemple:
enfin, vous pouvez l'ajouter à la reportViewer1
J'espère que cela aidera d'autres à accélérer les choses.
cheers!
J'ai passé un certain temps sur le même problème. Je suis l'aide de VS 2013 où le jeu de données est connecté par l'intermédiaire d'un automatiquement créé BindingSource dans le formulaire de rapport. Si vous créez le rapport et ajoutez tous les éléments requis, tout fonctionne bien. Si vous (dire) ajouter une table plus tard, le BindingSources sortir-de-l'étape, ou ne sont pas créés.
Modifier le rapport de Conception de formulaire, cliquez sur le ReportViewer objet et utiliser le peu "Tâche" pointe de flèche en haut à.r.h. coin. Sélectionnez "Réassocier des Sources de Données" ou " Choisir les Sources de Données pour vérifier qu'ils sont correctement tenus.
À force de Visual Studio pour créer automatiquement le bindingsource, vous devez créer le rapport.rdlc) en premier. Avec une source de données liée, lorsque vous ajoutez le composant (reportviewer) et le lien de la composante avec le nom de l'état comme indiqué dans l'image, une fois que vous sélectionnez le rapport, il va automatiquement créer une source de liaison avec le nom que vous utilisez lors de la création de la conception.