首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XAMDataGrid末尾的标签

XAMDataGrid末尾的标签
EN

Stack Overflow用户
提问于 2016-01-18 17:51:05
回答 1查看 410关注 0票数 0

我有一个XAMDataGrid,它用来用下面的代码填充报表。

其中EGMList是一个模型.在这里输入图像描述

Reports.Xaml

代码语言:javascript
复制
 <dataPresenter:XamDataGrid x:Name="datagdStatus" DataSource="{Binding EgmList}" DockPanel.Dock="Top"
                          HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch"  GroupByAreaLocation="None" FontFamily="Arial" FontSize="11" Visibility="Hidden">
                    <dataPresenter:XamDataGrid.FieldLayoutSettings>
                        <dataPresenter:FieldLayoutSettings RecordSelectorLocation="None" AllowAddNew="False" AllowDelete="False"  AutoGenerateFields="False" />
                    </dataPresenter:XamDataGrid.FieldLayoutSettings>
                    <dataPresenter:XamDataGrid.FieldLayouts >
                        <dataPresenter:FieldLayout >
                            <dataPresenter:FieldLayout.Fields>
                                <dataPresenter:Field Name="Id" Label="{x:Static p:resource.tab_report_machineid}" Width="1.8*" Visibility="Collapsed">
                                    <dataPresenter:Field.Settings>
                                        <dataPresenter:FieldSettings AllowEdit="False" LabelTextAlignment="Center" EditorStyle="{StaticResource TextEditor}" LabelTextWrapping="Wrap"  />
                                    </dataPresenter:Field.Settings>
                                </dataPresenter:Field>
                                <dataPresenter:Field Name="MacAddress" Label= "{x:Static p:resource.UID}" Width="4*">
                                    <dataPresenter:Field.Settings>
                                        <dataPresenter:FieldSettings AllowEdit="False" LabelTextAlignment="Left" LabelTextWrapping="Wrap" />
                                    </dataPresenter:Field.Settings>
                                </dataPresenter:Field>
                                <dataPresenter:Field Name="HouseNumber" Label= "{x:Static p:resource.tab_chn_houseNumber_Title}" Width="3.3*" >
                                    <dataPresenter:Field.Settings>
                                        <dataPresenter:FieldSettings AllowEdit="False" LabelTextAlignment="Left" />
                                    </dataPresenter:Field.Settings>
                                </dataPresenter:Field>
                                <dataPresenter:Field Name="Type" Label="{x:Static p:resource.tab_report_type}" Width="2.5*" >
                                    <dataPresenter:Field.Settings>
                                        <dataPresenter:FieldSettings AllowEdit="False" LabelTextAlignment="Left" LabelTextWrapping="Wrap" />
                                    </dataPresenter:Field.Settings>
                                </dataPresenter:Field>
                                <dataPresenter:Field Name="Status" Label="{x:Static p:resource.tab_redeem_status}" Width="5*" >
                                    <dataPresenter:Field.Settings>
                                        <dataPresenter:FieldSettings AllowEdit="False" LabelTextAlignment="Left" />
                                    </dataPresenter:Field.Settings>
                                </dataPresenter:Field>
                           </dataPresenter:FieldLayout.Fields>

                        </dataPresenter:FieldLayout>

                    </dataPresenter:XamDataGrid.FieldLayouts>

                </dataPresenter:XamDataGrid>
            </DockPanel>

Reports.Xaml.cs

代码语言:javascript
复制
  private void btnAllStatusPrint_Click(object sender, RoutedEventArgs e)
    {
        if (RedeemVoucherViewModel.EgmList.Count != 0)
        {
            Report reportObj = new Report();
            // set scale mode
            reportObj.ReportSettings.HorizontalPaginationMode = HorizontalPaginationMode.Scale;
            reportObj.PageHeaderTemplate = this.Resources["PagePresenterHeaderTemplate_small"] as DataTemplate;
            //  reportObj.PageContentTemplate = this.TryFindResource("basicContentTemplate") as DataTemplate;
            string siteControllerName = RedeemVoucherView.getSiteControllerName();
           // reportObj.PageFooter = "Total Machines :23";
            reportObj.PageHeader = string.Format("{0} {2} {1}", siteControllerName, DateTime.Now.ToString("dd/MM/yyyy"), Environment.NewLine);
            reportObj.ReportSettings.PageSize = new Size(3.13, 6);
            // create section and add it to report's section collection
            reportObj.ReportSettings.Margin = new Thickness(0, 0, 0, 0);
            EmbeddedVisualReportSection section = new EmbeddedVisualReportSection(datagdStatus);
            reportObj.Sections.Add(section);
            reportObj.Print(true, false);
            rteventLogger.WriteLog(TraceEventType.Information, "All Status report is printed", WMSTrace.ScopeTypes.Internal);
        }
        else
        {
            MessageBoxHelper.Show("No content available to print", MessageBoxImage.Information);
        }
    }

报表将在上述函数调用上打印,并在Report中填充EGMList的内容。

我希望在报告末尾有一个摘要标签,上面有记录/EGM的计数

尝试将其添加到PageFooter中,但在所有页面中打印都没有结果。

还尝试从后面的代码添加一个不同的部分,但这也会显示不同的页面。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-18 23:28:50

不幸的是,这不是一件容易的事情。

首先,我认为我只需要为Report定义一个新的Report,并根据它是否位于最后一页来隐藏或显示页脚。

不幸的是,报表生成是以不知道总共生成多少页的方式完成的,因此在数据模板中,您不知道是否在模板最后一个页面。

来源:Source1

Source2:Source2

解决办法

我只能给你一个解决办法。如果你不介意把报告写两遍,那是可行的。首先,我们生成它,这样我们就可以得到总页面数,并且我们可以使用它来设置FooterTemplate

代码语言:javascript
复制
private void btnAllStatusPrint_Click(object sender, RoutedEventArgs e)
{
    if (RedeemVoucherViewModel.EgmList.Count != 0)
    {
        Report reportObj = new Report();
        // set scale mode
        reportObj.ReportSettings.HorizontalPaginationMode = HorizontalPaginationMode.Scale;
        reportObj.PageHeaderTemplate = this.Resources["PagePresenterHeaderTemplate_small"] as DataTemplate;
        string siteControllerName = RedeemVoucherView.getSiteControllerName();

        reportObj.PageFooter = string.Format("Total Machines: {0}", MyXamDataGrid.DataItems.Count);

        reportObj.PageHeader = string.Format("{0} {2} {1}", siteControllerName, DateTime.Now.ToString("dd/MM/yyyy"), Environment.NewLine);
        reportObj.ReportSettings.PageSize = new Size(3.13, 6);
        // create section and add it to report's section collection
        reportObj.ReportSettings.Margin = new Thickness(0, 0, 0, 0);
        EmbeddedVisualReportSection section = new EmbeddedVisualReportSection(datagdStatus);
        reportObj.Sections.Add(section);

        var xamReportPreviewToGetTotalPageNumbers = new XamReportPreview();
        xamReportPreviewToGetTotalPageNumbers.GeneratePreview(reportObj, false, false);
        reportObj.PageFooterTemplate = GetDataTemplateForTotalPageNumbers(reportObj.PhysicalPageNumber);

        reportObj.Print(true, false);
        rteventLogger.WriteLog(TraceEventType.Information, "All Status report is printed", WMSTrace.ScopeTypes.Internal);
    }
    else
    {
        MessageBoxHelper.Show("No content available to print", MessageBoxImage.Information);
    }
}

GetDataTemplateForTotalPageNumbers是这样的:

代码语言:javascript
复制
private DataTemplate GetDataTemplateForTotalPageNumbers(int totalPages)
{
    var dataTemplate = new DataTemplate();

    //set up the label
    var labelFactory = new FrameworkElementFactory(typeof (Label)) {Name = "FooterLabel"};
    labelFactory.SetValue(VisibilityProperty, Visibility.Collapsed);
    labelFactory.SetValue(ContentProperty, new Binding());

    dataTemplate.VisualTree = labelFactory;

    var dataTrigger = new DataTrigger
    {
        Binding = new Binding("PhysicalPageNumber")
        {
            RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor)
            {
                AncestorType = typeof (ReportPagePresenter)
            }
        },
        Value = totalPages
    };

    dataTrigger.Setters.Add(new Setter {
        TargetName = "FooterLabel",
        Property = VisibilityProperty,
        Value = Visibility.Visible
    });

    dataTemplate.Triggers.Add(dataTrigger);

    return dataTemplate;
}

我希望这能帮到你。不过,我会谨慎地使用这个词。因为现在我们要生成两次报告(一次用于获取总页码,并设置正确的数据板,其中显示正确页面上的页脚,并再次打印它)它会导致两倍的时间,所以如果您有一个巨大的网格,这将使UI冻结一段时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34861016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档