Création connexion:
/// <summary>
/// Sets the connection.
/// </summary>
public void SetConnection()
{
_connection = new SqlConnection(Settings.Default.connectionString);
if (_connection.State == System.Data.ConnectionState.Open)
{
_connection.Close();
}
_connection.Open();
}
/// <summary>
/// Closes the connection.
/// </summary>
public void CloseConnection()
{
if (_connection.State == System.Data.ConnectionState.Open)
{
_connection.Close();
_connection.Dispose();
}
}
utilisant au-dessus de jeu de données de connexion Populate manuellement ou Ajouter un jeu de données à votre solution pour obtenir des données sans écrire des codes de connexion. Dites que vous avez ajouté Employee.XSD. Ajoutez un tableadapter dans le XSD qui vous aidera à extraire les données de la base de données, en générant automatiquement des requêtes et des datatables. Après avoir fait toutes ces choses. Créer une méthode quelque part dans votre projet,
Public DataTable GetAllEmployees()
{
Employee.EmployeeTableAdapter adapt = New Employee.EmployeeTableAdapter();
DataTable dt = New DataTable();
dt = adapt.GetData(); // you can also use fill based on your criteria.
return dt; //your datatable with data
}
maintenant sur votre formulaire ajouter un contrôle ReportViewer.
ReportViewer1 rpt = New ReportViewer();
ReportDocument rptDoc = new ReportDocument();
rptDoc.Load("path of rpt file");
rptDoc.SetDataSource(GetAllEmployees());
rpt.Document = rptDoc;
rpt.Refresh();
Avant cela À partir de Crystal Report, ajoutez les champs de la table sur le rapport selon vos besoins.
Une autre façon d'obtenir
Crystal Reports peuvent être utilisés sur divers objets.Si vous avez un scénario pour le lier dynamiquement, voir ma réponse ci-dessous. Ensuite, vous pouvez faire une chose, ajouter un nouveau jeu de données à la solution. Créez une colonne datatable et ajoutez les colonnes requises avec le type de données approprié. N'ajoutez pas de requête ou d'adaptateur de table. Maintenant, à partir de votre code, ajoutez un fichier de classe et créez des propriétés exactement similaires aux colonnes datatable. Maintenant, définissez le datatable comme source à signaler et ajoutez sa colonne sur le rapport.
For example , if you have columns
ID - integer
EmpName - string
Salary - double
Department - string
Créer une classe
public class Employee
{
private SqlConnection _connection;
public int ID {get;set;}
public string EmpName {get;set;}
public double Salary {get;set;}
public string Department {get;set;}
/// <summary>
/// Sets the connection.
/// </summary>
public void SetConnection()
{
//assuming connection string is placed in settings file from Project Properties.
_connection = new SqlConnection(Settings.Default.connectionString);
if (_connection.State == System.Data.ConnectionState.Open)
{
_connection.Close();
}
_connection.Open();
}
/// <summary>
/// Closes the connection.
/// </summary>
public void CloseConnection()
{
if (_connection.State == System.Data.ConnectionState.Open)
{
_connection.Close();
_connection.Dispose();
}
}
public DataTable GetEmployees()
{
DataTable dt = new DataTable("Employee");
// using above connection
SetConnection();
using(SqlCommand command = new SqlCOmmand("commandText",_connection))
{
using(SqlDataReader reader = command.ExecuteReader())
{
dt.Load(reader);
}
}
return dt;
}
}
maintenant créer une autre fonction qui va peupler la table de données créée à l'intérieur du dtataset.
public void PopulateDataTable()
{
DataTable dt = GetEmployee();
Employee dsEmployee = New DataSet();
dsEmployee.EmployeeDataTable dtEmp = new dsEmployee.EmployeeDataTable();
dtEmp = dt;
}
Voulez-vous dire que la chaîne de connexion/l'emplacement des données n'est pas connu au moment de la compilation? – sgriffinusa