Показать одну запись GridView в Crystal Reports с использованием Entity Framework - PullRequest
1 голос
/ 06 февраля 2020

Сценарий:

У меня есть Gridview с некоторыми записями, которые читаются из базы данных SQL, каждая запись Gridview имеет кнопку, которая использует CommandName и CommandArgument для отправки '<%#Eval("UserId")%>' для обнаружения каждого запись с вызовом их в коде (CS).

Цель:

Я хочу использовать команду объекта, чтобы при нажатии на кнопку (DO_PRINT(LinkButton)) всплывал отчет о кристалле, показывающий содержимое одной и той же записи.

Gridview так:

UserId    Name   LastName   OfficeId    Print
100       Hassan Hosseini      1        DO_PRINT(LinkButton)
200       Brad   Pitt          2        DO_PRINT(LinkButton)

Заранее спасибо

1 Ответ

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

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

Crystal Reports с Entity Framework - передать данные в отчет

  1. Создать ASP. NET Проект WebForms
  2. Добавить новую базу данных в папку App_Data, назовите его SampleDatabase
  3. Добавьте новую таблицу в пример базы данных, назовите ее Products:

    CREATE TABLE [dbo].[Prodcts]
    (
        [Id] INT NOT NULL PRIMARY KEY IDENTITY(1,1),
        [Name] NVARCHAR(50) NOT NULL, 
        [Price] INT NOT NULL,
        [Description] NVARCHAR(500) NULL
    )
    
  4. Добавьте несколько записей в таблицу , (В противном случае GridView не будет отображаться).

  5. Добавьте новую модель данных объекта в ваш проект и назовите ее SampleDatabase
  6. Создайте новые имена страниц Products.aspx и добавьте новый GridView на страницу, используя следующие конфиги:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField  DataField="Name" HeaderText="Name"/>
            <asp:BoundField  DataField="Price" HeaderText="Price"/>
            <asp:BoundField  DataField="Description" HeaderText="Description"/>
            <asp:HyperLinkField
                DataNavigateUrlFields="Id"
                DataNavigateUrlFormatString="~\Report.aspx?Id={0}"
                HeaderText="Report"
                Text="Report" />
        </Columns>
    </asp:GridView>
    
  7. Загрузить данные в сетку, в коде:

    protected void Page_Load(object sender, EventArgs e)
    {
        using (var db = new SampleDatabaseEntities())
        {
            var data = db.Prodcts.ToList();
            GridView1.DataSource = data;
            GridView1.DataBind();
        }
    }
    
  8. Добавьте новый проект Crystal Report в проект, назовите его ProductReport:

    • Добавить новый элемент → Crystal Reports → Использование мастера отчетов / стандарта
    • Затем из доступных источников данных: → Данные проекта →. NET Объекты → Найти и выбрать Продукт и добавить его на правую панель
    • Затем следуйте указаниям мастера
  9. Добавьте новую страницу с именем Report.aspx и перетащите экземпляр ReportViwer на страницу, используя имя по умолчанию CrystalReportViewer1.

  10. В коде позади Report.aspx, получите отчет и данные для отображения в отчете:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (int.TryParse(Request.QueryString["id"], out int id))
        {
            using (var db = new SampleDatabaseEntities())
            {
                var report = new ProductReport();
                var data = db.Prodcts.Where(x => x.Id == id).ToList();
                report.SetDataSource(data);
                CrystalReportViewer1.ReportSource = report;
                CrystalReportViewer1.RefreshReport();
            }
        }
    }
    

Примечание: Если у вас возникла ошибка скрипта p не отображая средство просмотра отчетов, вы можете скопировать папку C:\inetpub\wwwroot\aspnet_client в свой проект.

...