0

フォームをデザインし、フォームの棒グラフを使用して、特定の年(たとえば、2009年)に特定のプログラム(看護)で特定の問題(家族の問題など)を抱えている学生の数を表示しました。データベースから合計を取得して棒グラフに表示するように、他のすべてを設計しました。フォームでこれを達成することはできますが、レポートを生成し、同じ棒グラフをレポートに表示する必要があります。私の質問は、データベースに接続せずにこれを達成できるかどうかです。はいの場合、それから素晴らしいですが、どうやって?? 前もって感謝します。

以下のコードは、特定のプログラムで3年間に問題(家族の問題、麻薬中毒など)を抱えている学生の総数の棒グラフのコードです。

    public void calculateStatsFor3Years(int year1, int year2, int year3)
    {
         //count the number of students in with intervention in particular program in a year

        intervention.Classes.Programs objPrograms = new intervention.Classes.Programs();

        List<int> programCodeList = objPrograms.GetProgramCode();

        List<int> numStudentsYear1 = new List<int>();
        List<int> numStudentsYear2 = new List<int>();
        List<int> numStudentsYear3 = new List<int>();

        int temp1 = 0;
        int temp2 = 0;
        int temp3 = 0;

        for (int counter = 0; counter < programCodeList.Count; counter++)
        {

            temp1 = Convert.ToInt32(objControllerClass.get_students_intervention_particular_year_program(year1, programCodeList.ElementAt(counter)));

            numStudentsYear1.Add(temp1);

            temp2 = Convert.ToInt32(objControllerClass.get_students_intervention_particular_year_program(year2, programCodeList.ElementAt(counter)));

            numStudentsYear2.Add(temp2);

            temp3 = Convert.ToInt32(objControllerClass.get_students_intervention_particular_year_program(year3, programCodeList.ElementAt(counter)));

            numStudentsYear3.Add(temp3);

        }//for 

        int[] yValues0 = numStudentsYear1.ToArray();//2011-2012
        int[] yValues1 = numStudentsYear2.ToArray();//2010-2011
        int[] yValues2 = numStudentsYear3.ToArray();//2009-2010 


        string[] xNameSeries0 = { "Agent immobilier", "Mécanique du bâtiment", "Gestion des eaus ", "Soins infirmiers ", "Anglais ", "Comtabilité et gestion ", "Bureautique ", "Architecture et gestion de réseau ", "Programmeur web ", "Assurance de dommages ", "O'Bois ", "Éducation à l'enface ", "Francisation " };

        myBarChart.Series[0].Points.DataBindXY(xNameSeries0, yValues0);
        myBarChart.Series[1].Points.DataBindXY(xNameSeries0, yValues1);
        myBarChart.Series[2].Points.DataBindXY(xNameSeries0, yValues2);


        //legend text
        myBarChart.Series[0].LegendText = year1.ToString();
        myBarChart.Series[1].LegendText = year2.ToString();
        myBarChart.Series[2].LegendText = year3.ToString();

    }//calculateStatsFor3Years()

これは、CrystalReportsに表示する必要のある水平グラフのスクリーンショットです。

http://i1342.photobucket.com/albums/o765/CSharpJunior/C%20Sharp%20project/horizo​​ntalGraph.jpg

4

1 に答える 1

0

これは可能です。最善の方法は、おそらくデータセットを使用することです。私はよく人々に次のことを紹介します:http://csharp.net-informations.com/crystal-reports/csharp-crystal-reports-without-database.htm

using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Data;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataSet1 ds = new DataSet1();
            DataTable t = ds.Tables.Add("Items");
            t.Columns.Add("id", Type.GetType("System.Int32"));
            t.Columns.Add("Item", Type.GetType("System.String"));

            DataRow r ;
            int i = 0;
            for (i = 0; i <= 9; i++)
            {
                r = t.NewRow();
                r["id"] = i;
                r["Item"] = "Item" + i;
                t.Rows.Add(r);
            }

            CrystalReport1 objRpt = new CrystalReport1();
            objRpt.SetDataSource(ds.Tables[1]);
            crystalReportViewer1.ReportSource = objRpt;
            crystalReportViewer1.Refresh(); 
        }
    }
}
于 2012-11-17T09:31:36.013 に答える