using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

using Stimulsoft.Report;
using Stimulsoft.Report.Components;
using Stimulsoft.Base.Drawing;
using Stimulsoft.Base;

namespace StimulSoftRunTimeReportSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnReportShow_Click(object sender, EventArgs e)
        {
            try
            {

                // ××××××××××××××××××××××××××
                // 1
                // بدست آوردن فیلدهای انتخاب شده و تشکیل 
                // SELECT QUERY
                // لازم برای واکشی اطلاعات
                // ××××××××××××××××××××××××××
                string strSql = "";
                string strFields = "";
                foreach (Control c in groupBox1.Controls)
                {
                    if (c is CheckBox)
                    {
                        CheckBox chk = (CheckBox)c;
                        if (chk.Checked)
                            strFields += chk.Tag + ",";
                    }
                }
                if (string.IsNullOrEmpty(strFields))
                {
                    MessageBox.Show(" حداقل یک مورد را انتخاب کنید", "خطا");
                    return;
                }
                strSql = " Select " + strFields.Substring(0, strFields.Length - 1) + " From Personal";



                // ××××××××××××××××××××××××××
                // 2
                // ایجاد کانکشن و ..... 
                // واکشی اطلاعات و ذخیره آن در دیتاتیبل
                // توجه : کانکشن استرینگ بایستی بر اساس نیاز استفاده کننده اصلاح شود 
                // ××××××××××××××××××××××××××
                DataTable dt = new DataTable("Per");

                if (rdoAccess.Checked)
                {

                    OleDbConnection con = new OleDbConnection();
                    con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Test.mdb";
                    con.Open();
                    OleDbCommand com = new OleDbCommand(strSql);
                    com.Connection = con;
                    com.CommandType = CommandType.Text;
                    // DataTable dt = new DataTable("Per");
                    OleDbDataAdapter da = new OleDbDataAdapter(com);
                    da.Fill(dt);
                }
                else
                {
                    SqlConnection con = new SqlConnection();
                    con.ConnectionString = "Data Source=SMART\\SMART;Initial Catalog=Test;Integrated Security=True";
                    SqlDataAdapter da = new SqlDataAdapter(strSql, con);
                    da.Fill(dt);
                }





                // ××××××××××××××××××××××××××
                // 3
                // تعریف گزارش / صفحه گزارش / شکل گزارش 
                // ××××××××××××××××××××××××××
                StiReport report = new StiReport();
                StiPage page = report.Pages[0];
                page.Orientation = StiPageOrientation.Portrait;



                // ××××××××××××××××××××××××××
                // 4
                // ارسال اطلاعات سلکت شده به گزارش 
                // ××××××××××××××××××××××××××
                report.RegData(dt);
                report.Dictionary.Synchronize();



                // ××××××××××××××××××××××××××
                // 5
                // ایجاد بخش  
                // TitleBand
                // گزارش و تکست باکس مربوط به نام گزارش و مشخصات آن 
                // و اضافه کردن آنها به صفحه گزارش
                // ××××××××××××××××××××××××××
                StiHeaderBand TitleBand = new StiHeaderBand();
                TitleBand.Height = 0.85;
                TitleBand.Name = "TitleBand";
                page.Components.Add(TitleBand);

                StiText headerText = new StiText(new RectangleD(0, 0, page.Width, 0.85));
                headerText.Text = "نام گزارش ";
                headerText.HorAlignment = StiTextHorAlignment.Center;
                headerText.Name = "TitleHeader";
                headerText.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold);
                TitleBand.Components.Add(headerText);



                // ××××××××××××××××××××××××××
                // 6
                // ایجاد بخش  
                // HeaderBand
                // گزارش و اضافه کردن آن به صفحه گزارش 
                // ××××××××××××××××××××××××××
                StiHeaderBand headerBand = new StiHeaderBand();
                headerBand.Height = 0.5;
                headerBand.Name = "HeaderBand";
                page.Components.Add(headerBand);



                // ××××××××××××××××××××××××××
                // 7
                // ایجاد بخش  
                //  Databand
                // گزارش و اضافه کردن آن به صفحه گزارش 
                // ××××××××××××××××××××××××××
                StiDataBand dataBand = new StiDataBand();
                dataBand.DataSourceName = "Per";
                dataBand.Height = 0.2;
                dataBand.Name = "DataPer";
                page.Components.Add(dataBand);



                // ××××××××××××××××××××××××××
                // 8
                // تعیین ستونهای گزارش   
                // تعیین مختصات نمایش تکست باکسهای حاوی اطلاعات
                // ......... 
                // ××××××××××××××××××××××××××
                double pos = 0;
                double columnWidth = page.Width / dt.Columns.Count;
                int nameIndex = 1;
                foreach (DataColumn dataColumn in dt.Columns)
                {
                    StiText dataText = new StiText(new RectangleD(pos, 0, columnWidth, 0.7));

                    dataText.Text = "{Per." + Stimulsoft.Report.CodeDom.StiCodeDomSerializator.ReplaceSymbols(dataColumn.ColumnName) + "}";
                    dataText.Name = "DataText" + nameIndex.ToString();
                    dataText.HorAlignment = StiTextHorAlignment.Right;
                    dataText.VertAlignment = StiVertAlignment.Center;

                    dataText.Brush = new StiSolidBrush(Color.Pink);
                    dataText.Border.Side = StiBorderSides.All;

                    dataBand.Components.Add(dataText);
                    pos = pos + columnWidth;
                    nameIndex++;
                }




                // ××××××××××××××××××××××××××
                // 9
                // کامپایل و نمایش گزارش   
                // ××××××××××××××××××××××××××
                report.Compile();
                report.Show();


                // ××××××××××××××××××××××××××
                // ???
                //dt.Dispose();
                //con.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error");
            }
        }
    }
}