Как печатать Данные, выданные в Кристэла Репорт

Привет я надеюсь, что они могут помогать мне. Я использую crystal доклад, чтобы производить доклад pdf, что делает мое приложение, состоит в том, чтобы выдавать то, в чем я нуждаюсь, состоит в том, чтобы, когда пользователь выберет некие данные, были напечатаны только эти и не все данные. Если, что, когда пользователь выдаст данные только, эти выданные данные появились в документе crystal доклад.

Они сказали мне, что с этими линиями кода были напечатаны данные, выданные в crystal докладе:

DataTable Dt = dgvAsistencia.DataSource as DataTable;
        if (Dt != null)
        {
          ReportAsistenciaReport_ Cr = new ReportAsistenciaReport_();
            Cr.SetDataSource(Dt);

           ReporteAsistenciaForm R = new ReporteAsistenciaForm();
            R.crvReportes.ReportSource = Cr;
            R.ShowDialog();

reportViewer, который это называет crvReportes, это у меня есть в form названном ReporteAsistenciaForm и в другом окне названном VerAsistencia я имею datagridview с кнопкой печатать, который посылает crystal доклад так называемый ReportAsistenciaReport_, не помечает мне никакой ошибки код, но выполнив это, у меня появляется следующее: introducir la descripción de la imagen aquí

6
задан 23.12.2016, 18:55
2 ответа

Ошибка, что ты показываешь в вопросе, казалась как будто система не находила какое-то дополнение Crystal Report или Framework,

Ты мог бы проверять в твоем коде файл app.config или web.config и проверять, что существовала следующая линия:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

И если он существует, что у него была часть: sku=".NETFramework,Version=v4.0"

Также ты был бы должен санкционировать, что Framework ты используешь.

Ты предупреждаешь меня, тебе помогает ли мой ответ, привет.

Также исследуйте немного и, как кажется, ты должен искать:

Crystal report Redistributable package на странице SAP, как кажется dll что помечает тебя, ошибка - SAP

Ты мог бы проверять соединения:

http://www.sap.com/product/analytics/crystal-reports.html http://www.sap.com/product/analytics/crystal-visual-studio.html

Другая важная точка состоит в том, чтобы санкционировать, что у тебя есть установленный Кристэл Репорт, и ссылки твоего проекта указывают на эту установку.

Обновление

Я исследовал ошибку:

No se puede cargar el archivo o ensamblado 'file:///C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet1\crdb_adoplus.dll' ni una de sus dependencias. El sistema no puede encontrar el archivo especificado.

С моей точки зрения тебе остается устанавливать дополнение, которое находится в маршруте:

C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0

Когда твое приложение пробует использовать dll crdb_adoplus.dll он не находит ее и поэтому гремит гром, не обязательно dll он должен быть в ссылках твоего приложения, если не, что может быть снабженным ссылками внутри другой dll который ты использовал.

На основании которого я видел на других страницах, они говорят следующее: Дай клик, чтобы видеть страницу

introducir la descripción de la imagen aquí

Другая ссылка с тем же ответом

introducir la descripción de la imagen aquí

Что главным образом является тем же самым, что и я написал в начале ответа, ты мог бы пробовать это и делать твои ревизии. Также ты можешь видеть другие альтернативы на как производить твой доклад, не используя Кристэл Репорт или зависимости, которые они бьют козырем.

Привет.

3
ответ дан 03.12.2019, 19:15
  • 1
    спасибо am, но это много беспорядки не? –  05.01.2017, 19:45
  • 2
    как, который много я расслабляю? он что ты используешь XD, Ошибка, которую ты показываешь, - DLL Кристэла Репорт для SAP... или точно ¿ Qué вот то, что ты делаешь?, ¿ Có mo ты стремишься к тому, чтобы упорядочить это? –  05.01.2017, 19:58
  • 3
    ja XD am тогда - из-за проблем SAP? –  05.01.2017, 20:04
  • 4
    Спасибо :) Кристина –  05.01.2017, 21:13
  • 5
    если уже я остаюсь готовым je, ты спас мне жизнь –  05.01.2017, 21:21

Привет ты мог бы делать что-то как: Кристэл Репортс со Сторе Проседуре

И чтобы это обращать в PDF, ты можешь использовать этот метод

public static string ExportToPDF(ReportDocument rpt, string NombreArchivo)
    {
        string vFileName = null;
        DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();

        try
        {
            rpt.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
            rpt.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;


            vFileName = @"c:\Reporte\" + NombreArchivo;
            if (File.Exists(vFileName))
                File.Delete(vFileName);
            diskOpts.DiskFileName = vFileName;
            rpt.ExportOptions.DestinationOptions = diskOpts;
            rpt.Export();
        }
        catch (Exception ex)
        {
            throw ex;
        }

        return vFileName;
    }

query твоей консультации должен быть чем-то как:

string strSQL = "SELECT Grupo NombreApellido, FechaHora FROM Tabla" +
If(MyComboBox.SelectedValue == 1)
   strSQL += " WHERE= Grupo + " LIKE '%" + txtBuscar.Text + "%'"
If(MyComboBox.SelectedValue == 2)
   strSQL += " WHERE= NombreApellido + " LIKE '%" + txtBuscar.Text + "%'"
If(MyComboBox.SelectedValue == 3)
   strSQL += " WHERE= FechaHora=@Fecha"

Из-за каждого выбора ComboBox ты должен вооружать query посредством один if

Метод, который получает переменную strSQL смоги быть что-то как:

internal static PersonaAll ObtenerAsistencias(string strSQL)
    {
        PersonaAll _DsPersonas = new PersonaAll();
        using (SqlConnection cn = AD.Conexion.Conectar("default"))
        {
            cn.Open();
            using (SqlCommand cmd = cn.CreateCommand())
            {
                cmd.CommandText = strSQL;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(_DsPersonas, "Personas");
            }
        }
        return _DsPersonas;
    }

И ты это называешь с твоей кнопки печатать:

private void btnImprimir_Click(object sender, EventArgs e)
    {
        ReportePersonas _reporte = Reporte.ObtenerReportePersonas();
        frmReportePersonas frm = new frmReportePersonas(_reporte);
        frm.Show();
    }

Формуляр, который содержит доклад:

 //No olvidar utilizar este namespace.
 using CrystalDecisions.CrystalReports.Engine;
 public partial class frmReportePersonas : Form
 {
        ReportClass Report = null;
        public frmReportePersonas()
        {
            InitializeComponent();
        }

        public frmReportePersonas(ReportClass _report) 
        {
            InitializeComponent();
            Report = _report; 
        }

        private void frmReportePersonas_Load(object sender, EventArgs e)
        {
            crystalReportViewer1.ReportSource = Report;
        }

    }

Просвет, - если creates DataSet.

Рекомендация:

using (var cn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
        {
            //Resto de código.
        }

Заключив заявление объекта Connection между блоком Using ... End Using, мы будем убеждаться закрытия связи и разрушения ресурсов, использованных объектом, закончив вышеупомянутый блок (когда он будет работать End Using). С ésto мы не должны быть незаконченными того, чтобы звонить в метод Close (чтобы закрывать связь), ни также в метод Dispose (чтобы разрушать объект), следовательно, не необходимо располагать внешней процедурой для таких занятий.

И относительно призывания в метод Open открывать связь, не необходимо осуществлять вышеупомянутый вызов, если то, что мы желаем, состоит в том, чтобы наполнять объект DataTableа именно, когда мы звоним в метод Fill объекта SqlDataAdapter, потому что этот я возражаю, он возьмется за то, чтобы делать это автоматически, и за то, чтобы закрывать связь, когда он закончит Вашу работу.

5
ответ дан 24.11.2019, 12:40
  • 1
    ok спасибо за совет от conexió n – karol 23.11.2016, 01:53
  • 2
    @karolprincess добавьте консультацию SQL для того, чтобы ты просочился segú n condició n, который ты выбрал в combobox. – Pedro Ávila 23.11.2016, 01:55
  • 3
    спасибо но уже просачиваются мои данные с одинокого combobox нуждалось в том, чтобы воплотить это фильтры в crystal доклад или pdf – karol 23.11.2016, 02:05
  • 4
    @karolprincess Volví чтобы обновлять ответ проверь ее. – Pedro Ávila 23.11.2016, 23:59
  • 5
    у формуляра, где - reportViewer, есть q идти этот có я говорю? – karol 24.11.2016, 00:47

В общем есть две формы:

1) Выдавать твои данные о твоем DataTable перед тем, как распределять это cr. SetDataSource уже был, в с WHERE в твоем query, из-за LINQ, используя метод Filter BindingSource.

2) Определяя Parameters в докладе и устанавливать стоимость в момент приказывания называть доклад:

myDataReport.SetParameterValue("MyParameter", "Hello");

Я рекомендую называть твой формуляр ReporteAsistencia в ReporteAsistenciaForm, и доклад в ReporteAsistenciaReport, чтобы предотвращать путаницу.

Сделанный предыдущее, изменяет строитель формуляра ReporteAsistenciaForm следующей формы:

public ReporteAsistenciaForm(ReportClass reporteFiltrado)
{
            InitializeComponent();
            this.crvReportes.ReportSource = reporteFiltrado;
            this.crvReportes.Refresh();
            ...
}
И измени твой код на VerAsistencia в:

...
            ReportAsistenciaReport Cr = new ReportAsistenciaReport();
            Cr.SetDataSource(Dt);            
            ReporteAsistenciaForm frm = new ReporteAsistenciaForm(Cr);
            frm.ShowDialog();

Больше информации в:

Как Перемещение Параметров / переменных Кристэла Репортс

Доклад с Параметрами в Кристэле Репортс (Видео)

Заметь: Существует другая форма, которая изменяя SelectionFormula в момент посылания доклада, функционирует хорошо, однако я рекомендую тебе предыдущие выборы.

4
ответ дан 24.11.2019, 12:40
  • 1
    и если уже я выдал данные о моем DataTable, которые я делаю – karol 10.11.2016, 20:21
  • 2
    Только распредели твой DataSet или DataTable с данными, выданными в доклад с cr. SetDataSource = datosFiltrados; – AlejandroMedina 10.11.2016, 21:26
  • 3
    ok, и поскольку я это распределяю? utilize в combobox для того, чтобы пользователь выбрал категорию, которая ищет, и в textbox он пишет информацию, которая ищет и выдает в datagridview информацию, которая ищет, и с кнопкой pdf я хочу, чтобы появилась информация, которую выбрал пользователь. В кнопке одинокого pdf у меня есть это: ReporteAsistencia frm = new ReporteAsistencia(); frm.ShowDialog();, где призвал к crystal доклад, что уже creé – karol 10.11.2016, 23:04
  • 4
    ¿ Có mo ты выдаешь контент DataGridView?, ты используешь Биндингсоурсе ¿ или ты делаешь query в базу данных всякий раз когда пользователь меняет comboBox и Textbox, о котором ты упоминаешь и распределяешь dgvAsistencia. DataSource = resultset1? – AlejandroMedina 11.11.2016, 03:03
  • 5
    я делаю query в базу данных, точный добавьте часть кода наверху, который я использую, чтобы выдавать данные – karol 11.11.2016, 18:23