FastReport Вложенная переменная класса C # не используется - PullRequest
0 голосов
/ 08 ноября 2018

мой английский так себе я извиняюсь

Я использую fastreport с c #

Это моя форма быстрого отчета, имя файла = orderform.frx

<?xml version="1.0" encoding="utf-8"?>
<Report ScriptLanguage="CSharp" SmoothGraphics="true" ReportInfo.Name="ORDER FORM" ReportInfo.Author="HABIB" ReportInfo.Version="2018.09.11" ReportInfo.Description="GOKER" ReportInfo.CreatorVersion="2018.3.24.0">
<Dictionary/>
<ReportPage Name="Page1">
<ReportTitleBand Name="ReportTitle2"/>
<PageHeaderBand Name="PageHeader1" />
<DataBand Name="Data2"KeepTogether="true">
      <TableObject Name="Table6" Left="9.45" Top="37.8" Width="678.73" Height="47.25" Border.Lines="All" Border.Color="25, 128, 128, 128" Border.Width="0.5">
        <TableColumn Name="Column11" Width="338.62"/>
        <TableColumn Name="Column12" Width="340.11"/>
        <TableRow Name="Row23" Height="28.35">
          <TableCell Name="Cell54" Text="Order ID" style=Bold"/>
          <TableCell Name="Cell55" Text="Order Number" style=Bold"/>
        </TableRow>
        <TableRow Name="Row24">
          <TableCell Name="Cell56" Text="[orderDetail.OrderID]"/>
          <TableCell Name="Cell57" Text="[orderDetail.orderNumber]"/>
        </TableRow>
      </TableObject>
      <TableObject Name="Table3">
        <TableColumn Name="Column5" />
        <TableColumn Name="Column6" />
        <TableRow Name="Row12">
          <TableCell Name="Cell32" Text="FULL ADDRESS"/>
          <TableCell Name="Cell33" Text="[orderDetail.shippingAddress.FullAddress]"/>
        </TableRow>
     </TableObject>
</DataBand>
    <PageFooterBand Name="PageFooter1"/>
  </ReportPage>
</Report>

За моим кодом C #

public string OrderID { get; set; }

public System.Data.DataTable OrderDetailRapor = new System.Data.DataTable();

protected void Page_Load(object sender, EventArgs e)
{
WebReport1.ReportFile = @"C:\Users\habib\Desktop\order\orderform.frx";
}

private void RegisterData(Report FReport)
{           
   OrderService OrderService = new OrderService();
   var OrderDetailData = OrderService .getOrderDetail(Convert.ToInt64(OrderID));
   List<OrderDetailData> OrderDetailDataList = new List<OrderDetailData>();

   OrderDetailDataList.Add(OrderDetailData);

   OrderDetailRapor = Functions.LINQToDataTable<OrderDetailData>(OrderDetailDataList);

   FReport.RegisterData(OrderDetailRapor, "orderDetail");
   DataBand DataBndInfo = FReport.FindObject("Data2") as DataBand;
   DataBndInfo.DataSource = FReport.GetDataSource("orderDetail");

   WebReport1.Scripts();
   WebReport1.Report = FReport;
}
protected void WebReport1_StartReport(object sender, EventArgs e)
{
    Report FReport = (sender as WebReport).Report;
    RegisterData(FReport);
}

это мой класс

public class OrderDetail {

        public long OrderID { get; set; }

        public string orderNumber { get; set; }

        public AddressModel shippingAddress;
        ...
}
public class AddressModel {

        public string FullAddress { get; set; }
        public string city{ get; set; }
        public string district{ get; set; } 
        ...
}

Я использую его таким образом и пишу успешные данные

[orderDetail.orderNumber]

но когда я пишу это

[orderDetail.shippingAddress.FullAddress]

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

где я делаю не так?

Заранее жду вашей помощи, спасибо

1 Ответ

0 голосов
/ 08 ноября 2018

Вам не хватает инициализации shippingAddress. Инициализируйте ваш объект OrderDetail, как показано ниже, и он должен нормально работать:

OrderDetail orderDetail  = new OrderDetail() {
        shippingAddress = new AddressModel()
};

Вот скрипка .Net, чтобы сделать ее более понятной. Посмотрите, где появляется ошибка, когда вы ее запускаете. Комментарии добавлены для пояснения.

https://dotnetfiddle.net/TsM7c7

...