Menci Lucio Ответов: 0

Печать отчета без существующих таблиц в БД


Привет,

Я должен распечатать отчет в автономном режиме, где результат отчета не существует в БД.
Я добавил ссылку на CrystalDecisions.CrystalReports.Двигатель В2.0.50727 (версия 12.0.2000.0) на мой .Проект Net Framework версии 4.
Я запустил метод, который должен распечатать отчет и сохранить набор данных в XML-файл:
internal void PrintData(string reportFile, string printerName)
{
    DataTable DT = CreateDataTable();

    if (DT.Rows.Count > 0)
    {
        DataSet DS = new DataSet();
        DS.DataSetName = "ReportDataset";
        DS.Namespace = "ReportNamespace";
        DS.Tables.Add(DT);

        DS.WriteXml(Environment.GetEnvironmentVariable("TEMP") + "\\ReportDataset.xml", XmlWriteMode.WriteSchema);

        if (false)
        {
            ReportDocument report = new ReportDocument();
            report.Load(reportFile);
            report.SetDataSource(DS);
            PrintDialog pd = new PrintDialog();
            pd.PrinterSettings.PrinterName = printerName;
            if (pd.ShowDialog() == DialogResult.OK)
            {
                report.PrintOptions.PrinterName = pd.PrinterSettings.PrinterName;
                report.PrintToPrinter(1, false, 0, 0);
            }
        }
    }
}

Затем я создаю отчет с помощью Crystal Reports 2008 (v12.0.0.683). Я создаю соединение как XML-соединение с созданным мной XML-файлом.
Кажется, он бежит.
Я изменил if (false) в if (true) чтобы увидеть результат.
Заявление
report.SetDataSource(DS);
вызовите необработанное исключение типа DataSourceException (неизвестная ошибка в соединителе базы данных).

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

Я также попытался выполнить печать в режиме вытягивания, и она работает хорошо, но писать xml-файл неэлегантно, потому что Crystal Reports не выполняет метод SetDataSource. Что-то не так в версиях?

njammy

Почему вы поместили утверждение if (false)?

Menci Lucio

@kjammy, потому что у меня не было файла отчета. Я поставил if (false), создал XML, создал отчет, заменил if (false) на if (true)

njammy

Но вы не оцениваете boolean ни к чему. Лучше просто избавиться от if (true / false)

Боюсь, что у меня нет v12.0.0.683, чтобы проверить, смогу ли я воссоздать проблему, но я использовал 13.0.2000.0 с VS2015 и отлично работает. Попробуйте эту версию.

Menci Lucio

Как вы его установили? Где я могу его найти? Я не смог...
Я установил CRRuntime_12_3 много времени назад, и я нашел CristalDecision.CrystalReports.Двигатель.dll в C:\Program файлы (x86)\бизнес-объекты\общие\4.0\управляемые.
Теперь я только что установил CRforVS_redist_install_64bit_13_0_17 (скачано с http://scn.sap.com/docs/DOC-7824), disinstalled ed установил CRRuntime_64bit_13_0_12 из http://downloads.i-theses.com/index.php?option=com_downloads&Itemid=481&task=downloads&groupid=9&id=101), но в некоторых ситуациях я не мог найти кристального решения.CrystalReports.Двигатель.dll на моем диске, но v12. 0 у меня уже был.

0 Ответов