Member 13347569 Ответов: 2

Как передать значение в crystal report C#


привет
В моем приложении счета есть 2 формы первая для добавления продуктов в мою базу данных счетов с идентификатором счета и вторая с crystal report

В моей первой форме у меня есть одна кнопка печати, которая приводит нас к форме отчета то, что я хочу, когда я нажимаю эту кнопку печати, она берет этот идентификатор счета из формы 1 и отображает весь продукт этого идентификатора счета в моем кристаллическом отчете

плз помогите мне

Что я уже пробовал:

SqlConnection cnn;
           string connectionString = null;
           string sql = null;

           connectionString = "Data Source=SQLEXPRESS;Initial Catalog=MyBill;Integrated Security=True;Pooling=False";
           cnn = new SqlConnection(connectionString);
           cnn.Open();
           sql = "SELECT * FROM sale where billid = '"+nn+"'";
           SqlDataAdapter dscmd = new SqlDataAdapter(sql, cnn);
           DataSet ds = new DataSet();
           dscmd.Fill(ds);
         //  MessageBox.Show(ds.Tables[1].Rows.Count.ToString());
           cnn.Close();

           CrystalReport2 objRpt = new CrystalReport2();

           objRpt.SetDataSource(ds);
           crystalReportViewer1.ReportSource = objRpt;
           crystalReportViewer1.Refresh();

2 Ответов

Рейтинг:
2

Zahid Mughal

Это Бегущий пример, которым я делюсь с вами:

Метод базы данных:

public DataSet SelectAll_()
       {
           var ds = new DataSet();
           var conn = DACUtil.GetConnection();
           try
           {
               SqlCommand cmd = new SqlCommand(SELECT_ALL, conn);
               var da = new SqlDataAdapter { SelectCommand = cmd };

               da.Fill(ds);

               ds.Tables[0].TableName = "Employee";
               ds.AcceptChanges();

           }
           finally
           {
               conn?.Dispose();
           }
           return ds;
       }


В Reportviewer.файл CS :

public partial class ReportViewer : System.Web.UI.Page
    {
        ReportDocument _rpt = new ReportDocument();
        EmployeeDAC employee = new EmployeeDAC();
        protected void Page_Load(object sender, EventArgs e)
        {
            _rpt.Load(Server.MapPath("EmployeeReport.rpt"));
            DataSet ds = employee.SelectAll_();
            _rpt.SetDataSource(ds);
            CrystalReportViewer1.ReportSource = _rpt;

        }
    }


Более подробную информацию см. В следующей статье.
Crystal Report in Asp.net 2015 использование C#[^]


Рейтинг:
1

an0ther1

Не указывая на количество доступных примеров и учебных пособий..
Обычно я создаю Отчет по базе данных, которую не использую. Я также обычно использую хранимые процедуры для отчетов - они быстрее и имеют явные преимущества, когда у вас есть вложенные отчеты. однако следующая ссылка покажет вам, как использовать наборы данных;
Проект кода-создание Crystal Reports с использованием C# с наборами данных[^]

Вам нужно добавить следующие ссылки-предполагая, что Windows Forms;
Кристаллические решения.CrystalReports.Двигатель
Кристаллические решения.ReportSource
Кристаллические решения.Общий
Кристаллические решения.Окна.Формы

Я использую VS 2015 с Crystal Reports 13.2 - смотрите ссылку ниже для загрузки во время выполнения;
Crystal Reports, разработчик для загрузки Visual Studio-Business Intelligence (BusinessObjects) - SCN Wiki[^]

Вам также нужно будет добавить следующие "usings"

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;



Вы не указали, какой отчет-это делается следующим образом;
ReportDocument rptDoc = new ReportDocument();
rptDoc.Load("Put the full path and file name here");

Затем перебирайте параметры отчета и устанавливайте их - обычно я использую следующее;
if(rptDoc.DataDefinition.ParameterFields.Count > 0)
{
    foreach(ParameterFieldDefinition crDef in rptDoc.DataDefinition.ParameterFields)
    {
    // Check for empty report name
    // Sub Reports will have a value, Main Report does not
    // Sub Report Parameters are passed by the Main Report
        if(crDef.ReportName == string.Empty)
        {
            object objValue = "What ever value I want to use";
            rptDoc.SetParameterValue(crDef.ParameterFieldName, objValue);
        }
    }
}

Следующее, что нужно сделать, это создать Crystal reports ConnectionInfo, который затем передается в отчет
ConnectionInfo crConn = new ConnectionInfo();
crConn.ServerName = "My DB Server Name";
crConn.DatabaseName = "My Database Name";
crConn.UserID = "DB User Name";
crConn.Password = "DB Password";
// get the Report Tables
Tables crTables = rptDoc.Database.Tables;
for(int i = 0; i < crTables.Count; i++)
{
    Table crTable = crTables[i];
    TableLogOnInfo tblInfo = crTable.LogOnInfo;
    tblInfo.ConnectionInfo = crConn;
    crTable.ApplyLogOnInfo(tblInfo);
}
// then display the Report - here I am using a Crystal Reports Viewer in a Windows Form
this.crystalReportsViewerFrm.ReportSource = rptDoc;


удачи