1
private void btnPrint_Click(object sender, EventArgs e)
{    
   Report crt = new Report();    
   DataTable dt = new DataTable();    
   dt = dba.getToForPrint(txtTONumber.Text);    
   dt = dba.getOrderDatails(txtTONumber.Text);    
   crt.SetDataSource(dt);    
   crystalReportViewer1.ReportSource = crt;     
}

データを取得するには、2 つのメソッドを呼び出す必要があります。Datatable と OrderDetails などの 2 つのデータテーブルを作成しました。しかし、レポート ビューアーで両方のテーブル データを表示することはできません。

4

3 に答える 3

0

まず、ADO.NET スキーマを使用するように Crystal Report を設定する必要があります。(下の画像を参照)。スキーマを生成するには、データ セットを作成し、それを埋めるテーブルを作成するだけです。入力したら、(テーブル名を使用して) テーブルをデータ セットに追加し、スキーマを xml ファイルにエクスポートできます。

List<Tuple<string, string>> sqlQueries = new List<Tuple<string, string>>();

// The sql queries below shoudl match the same column names 
// you want to pull back from the database for yoru report
sqlQueries.Add(new Tuple<string, string>("Table1Name", "SELECT TOP 1 .... FROM ..."));
sqlQueries.Add(new Tuple<string, string>("SubReportName", "SELECT TOP 1 .... FROM ..."));
sqlQueries.Add(new Tuple<string, string>("SubReport2TableName", "SELECT TOP 1 .... FROM ..."));

SqlConnection connection = new SqlConnection(ConnectionString);
DataSet resultSet = new DataSet();

foreach (var tuple in sqlQueries)
{
    SqlDataAdapter adapter = new SqlDataAdapter(tuple.Item1, connection);
    DataTable schema = new DataTable();
    adapter.Fill(schema);
    schema.TableName = tuple.Item2;
    resultSet.Tables.Add(schema);

}

// write out the schema to a file
string path = Path.Combine("PATH_TO_DATASET_XML.xml");
using (var writer = File.CreateText(path))
{
    writer.Write(resultSet.GetXmlSchema().Replace(" encoding=\"utf-16\"", ""));
}

次に、それを Crystal Reports のデータ ソースとして使用します。

ここに画像の説明を入力

最後に、同じ xml ファイルを使用してレポート データを入力します。

DataSet reportData = new DataSet();
SqlConnection connection = new SqlConnection();
SqlDataAdapter reportAdapter = new SqlDataAdapter();
reportAdapter.SelectCommand = new SqlCommand();
reportAdapter.SelectCommand.Connection = connection;

reportData.ReadXml("PATH_TO_DATASET_XML.xml");

List<Tuple<string, string>> sqlQueries = new List<Tuple<string, string>>();

sqlQueries.Add(new Tuple<string, string>("Table1Name", "SELECT .... FROM ..."));
sqlQueries.Add(new Tuple<string, string>("SubReportName", "SELECT .... FROM ..."));
sqlQueries.Add(new Tuple<string, string>("SubReport2TableName", "SELECT .... FROM ..."));

reportData.EnforceConstraints = false;

foreach (var tuple in sqlQueries)
{                
    reportAdapter.SelectCommand.CommandText = tuple.Item1;
    try
    {
        reportAdapter.Fill(reportData, tuple.Item2.Trim());
    }
    catch (Exception ex)
    {
        // Handle your stuff
    }
}

using (var exportReport = new ReportDocument())
{
    exportReport.Load("PATH_TO_RPT_FILE.rpt");
    exportReport.SetDataSource(reportData);

    // export report to wherever you want
}
于 2013-06-18T11:11:32.173 に答える
0

データソースを使用するか、Crystal レポートに 2 つのサブレポートを含めることができます。たとえば、「Crystal」としてそれぞれにデータテーブルを割り当てます

reportDocument.Load(this.MapPath("rptmainReport.rpt"));
reportDocument.OpenSubreport("rptSubReport1.rpt").SetDataSource(dt1);
reportDocument.OpenSubreport("rptSubReport2JNR.rpt").SetDataSource(dt2);

rptSubReport1 と rptSubReport2 は mainReport のサブレポートです。したがって、データソースをサブレポートに設定しました

また

ダミーのデータ列を追加してそれらにデータを追加するか、コメントに従ってビューを介してデータソースを追加できます

質問がある場合は、お気軽にコメントしてください

于 2013-06-18T10:45:37.650 に答える