首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UWP打印需要扩展到多页的长Datagrid

UWP打印需要扩展到多页的长Datagrid
EN

Stack Overflow用户
提问于 2019-05-25 21:18:42
回答 1查看 616关注 0票数 2

我正在做一个会计程序使用( uwp,c#,MySQL ),我想知道当打印报表时,如果数据网格很长,如何将其余部分扩展到新页,以便所有报表将打印在多页上。

我使用了打印示例中的printhelp.cs:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/Printing,但它只在一页上打印数据网格,而没有将其余的页面扩展到更多的页面。

UWP XAML:

代码语言:javascript
复制
<Grid>
    <controls:DataGrid Grid.Row="2" Grid.RowSpan="5" Grid.ColumnSpan="2"
        x:Name="TextContent"
        Foreground="Black"
        Background="White"
        ItemsSource="{x:Bind SelectSOA()}"
        AutoGenerateColumns="False"    
        GridLinesVisibility="Horizontal">



        <controls:DataGrid.Columns>
            <controls:DataGridTextColumn   Header="ID" Binding="{Binding ID}" />
            <controls:DataGridTextColumn Header="Account" Binding="{Binding Principal}" />
            <controls:DataGridTextColumn Header="Balance" Binding="{Binding Client}" />
        </controls:DataGrid.Columns>
代码语言:javascript
复制
    <RichTextBlockOverflow  x:Name="FirstLinkedContainer" OverflowContentTarget="{Binding ElementName=ContinuationPageLinkedContainer}" Grid.Row="2" Grid.Column="0"/>
    <RichTextBlockOverflow x:Name="ContinuationPageLinkedContainer" Grid.Row="3" Grid.ColumnSpan="2"/>


</Grid>

我预计在打印时,如果Datagrid很长,会扩展到下一页。但它只打印第一页,而不会将其余页面扩展到新页面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-27 18:12:58

您可以使用Print Helper类打印DataGrid,但仍然需要在代码隐藏中手动对数据进行分页。

请参阅Windows Community Toolkit PrintHelper sample以了解如何使用此类打印XAML控件。

根据该示例,我做了一些更改以生成一个简单的代码示例,供您参考:

代码语言:javascript
复制
<Grid>
    <Grid x:Name="RootGrid"
          HorizontalAlignment="Center"
          VerticalAlignment="Center">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid x:Name="Container"
              Grid.RowSpan="2"
              Opacity="0" />
        <Grid x:Name="CustomPrintContainer"
              Opacity="0" />
        <Grid x:Name="DirectPrintContainer">
            <Grid x:Name="PrintableContent">
                <Grid x:Name="XamlRoot" />
            </Grid>
        </Grid>
    </Grid>
    <Button Content="Print" Click="Button_Click" VerticalAlignment="Bottom"></Button>
</Grid>
代码语言:javascript
复制
public List<Person> Persons { get; set; }

    public MainPage()
    {
        this.InitializeComponent();

        Persons = new List<Person>();
        for (int i = 0; i < 100; i++)
        {
            Persons.Add(new Person
            {
                PersonId = i,
                FirstName = "FirstName" + i,
                LastName = "LastName" + i,
                Position = "Network Administrator " + i
            });
        }
    }

    private PrintHelper _printHelper;

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        _printHelper = new PrintHelper(CustomPrintContainer);

        var pageNumber = 0;

        for (int i = 0; i < Persons.Count; i = i + 10)
        {
            var grid = new Grid();
            grid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
            grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) });
            grid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });

            // Static header
            var header = new TextBlock { Text = "Custom Print", Margin = new Thickness(0, 0, 0, 20) };
            Grid.SetRow(header, 0);
            grid.Children.Add(header);

            // Main content with layout from data template
            var dataGrid = new DataGrid();
            dataGrid.AutoGenerateColumns = true;
            dataGrid.ItemsSource = Persons.Skip(i).Take(10);
            Grid.SetRow(dataGrid, 1);
            grid.Children.Add(dataGrid);

            // Footer with page number
            pageNumber++;
            var footer = new TextBlock { Text = string.Format("page {0}", pageNumber), Margin = new Thickness(0, 20, 0, 0) };
            Grid.SetRow(footer, 2);
            grid.Children.Add(footer);

            _printHelper.AddFrameworkElementToPrint(grid);
        }

        _printHelper.OnPrintCanceled += _printHelper_OnPrintCanceled;
        _printHelper.OnPrintFailed += _printHelper_OnPrintFailed;
        _printHelper.OnPrintSucceeded += _printHelper_OnPrintSucceeded;

        var printHelperOptions = new PrintHelperOptions(false);
        printHelperOptions.Orientation = Windows.Graphics.Printing.PrintOrientation.Default;
        printHelperOptions.AddDisplayOption(StandardPrintTaskOptions.Orientation);
        await _printHelper.ShowPrintUIAsync("print sample", printHelperOptions);
    }
代码语言:javascript
复制
public class Person
{
    public int PersonId { get; set; }
    public int DepartmentId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Position { get; set; }
}

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

https://stackoverflow.com/questions/56305185

复制
相关文章

相似问题

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