Как получить набор данных уровня проекта в другой форме windows или в форме отчета Crystal c# - PullRequest
0 голосов
/ 12 февраля 2020

Я использовал набор данных во многих моих windows формах для сетки данных. Как вы можете видеть, я создал набор данных на уровне проекта.

enter image description here

Проблема в том, что я хотел бы возобновить этот набор данных внутри кода, чтобы получить исходный текст для отчета о кристаллах следующим образом.

       //sbmsDataSetAllis not recognized 

        ReportDocument cryRpt = new ReportDocument();
        cryRpt.Load("rystalReport1.rpt");
        cryRpt.SetDataSource(sbmsDataSetAll.Tables["recent_slide_dataset"].DataSet) ;
        crystalReportViewer1.ReportSource = cryRpt;
        crystalReportViewer1.Refresh();

1 Ответ

1 голос
/ 15 февраля 2020

ОК, но вы должны понимать, что эти элементы набора данных, которые вы видите в обозревателе решений, представляют типы классов (вещи, которые вы можете создать), а не экземпляры объектов (вещи, которые вы создали), поэтому вы можете использовать только экземпляры объектов в своем коде

В форме, в которой создан ваш набор данных, с кодом, например

 sbmsDataSetAll myDataset = new sbmsDatasetAll();

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

Вы действительно должны передать одну из таблиц в наборе данных как источник данных Crystal Report, если только вы не сказали Crystal, какое имя таблицы использовать (где-то в режиме разработки - я не вижу его в вашем коде). Когда вы работаете со строго типизированными наборами данных, подобными этим, вам не нужно использовать коллекцию .Tables. Каждая таблица в наборе имеет именованное свойство для таблицы:

    cryRpt.SetDataSource(sbmsDataSetAll.recent_slide_dataset) ;

Вам также не нужно вызывать свойство DataSet таблицы, поскольку оно просто указывает на набор данных, в котором находится таблица, в которой вы уже знать, когда вы выбрали таблицу:

cryRpt.SetDataSource(sbmsDataSetAll) ;

В качестве еще одной небольшой критики, в c# мы используем PascalCase имен объектов, свойств и методов, поэтому ваши сущности набора данных должны быть действительно названы как:

cryRpt.SetDataSource(SbmsDataSetAll.RecentSlides) ;
...