Here, it is mainly printed in a similar image format, and a simple DataGrid table can be printed. Methods as below:
Add the table to the canvas, and then call the printer to print the canvas directly. The specific code is as follows:
Use a separate window to put the canvas and pass the table in. Because my data is the data on the bound DataTable, I add a header to it and bind it (to put it bluntly, change the header).
xmal:
<Window x:Class="MyControlLibrarys.PrintDataWind" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="打印窗口" Height="600" Width="850"> <Grid> <Canvas x:Name="printArea"> <DataGrid Name="dgData" AutoGenerateColumns="False" CanUserAddRows="False" GridLinesVisibility="All" Margin="20"> <DataGrid.Columns> <DataGridTextColumn Header="序号" Width="70" Binding="{Binding Path=id, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> <DataGridTextColumn Header="测试步骤" Width="140" Binding="{Binding Path=step, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> <DataGridTextColumn Header="测试内容" Width="140" Binding="{Binding Path=content, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> <DataGridTextColumn Header="标准" Width="120" Binding="{Binding Path=standard, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> <DataGridTextColumn Header="实测" Width="120" Binding="{Binding Path=actual, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> <DataGridTextColumn Header="结论" Width="120" Binding="{Binding Path=conclusion, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> </DataGrid.Columns> </DataGrid> </Canvas> </Grid> </Window>
Background code:
/// <summary> /// Interactive logic of PrintDataWind.xaml /// </summary> public partial class PrintDataWind : Window { public PrintDataWind(System.Data.DataTable dt) { InitializeComponent(); this.dgData.ItemsSource = dt.DefaultView; } public void print() { PrintDialog dialog = new PrintDialog(); if (dialog.ShowDialog() == true) { dialog.PrintVisual(printArea, "Print Data"); } } }
calling code:
Part of xmal (for consistency):
<DataGrid Grid.Row="1" ColumnHeaderStyle ="{DynamicResource DataGridColumnHeaderStyle}" Grid.Column="0" Name="dgData" AutoGenerateColumns="False" CanUserAddRows="False" GridLinesVisibility="All"> <DataGrid.Columns> <DataGridTextColumn Width="0.8*" Header="序号" ElementStyle="{StaticResource contentCenterStyle}" Binding="{Binding Path=OrderId, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> <!--DataGridTextColumn Header="序号" Width="*" Binding="{Binding Path=id, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></--> <DataGridTextColumn Header="测试步骤" Width="2*" Binding="{Binding Path=step, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> <DataGridTextColumn Header="测试内容" Width="2*" Binding="{Binding Path=content, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> <DataGridTextColumn Header="标准" Width="2*" Binding="{Binding Path=standard, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> <DataGridTextColumn Header="实测" Width="2*" Binding="{Binding Path=actual, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn> <!--DataGridTextColumn Header="结论" Width="2*" Binding="{Binding Path=conclusion, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Foreground="{Binding Path=conclusion,ConverterParameter=通过, Converter={StaticResource DataColorConverterStyle}}"></--> <DataGridTemplateColumn Width="2*" Header="结论"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Path=conclusion,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}" Foreground="{Binding Path=conclusion,Converter={StaticResource DataColorConverterStyle}}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid>
Background calling code:
/// <summary> /// print data /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PrintData_Click(object sender, RoutedEventArgs e) { PrintDataWind pdw = new PrintDataWind(_dt); pdw.print(); }In this way, you can print. Although the method is stupid, it works. This method can also print pictures and so on.