类别:程序开发
日期:2023-08-30 浏览:1656 评论:0
这里主要以类似图片格式方式打印,可以打印简单的DataGrid表格。方法如下:
将表格加入到画布中,然后调用打印机,将画布直接打印出来,具体代码如下:
单独用一个窗口放画布,将表格传进来,因为我的数据是绑定的DataTable上的数据,故给它单独加个表头并绑定(说白了就是换表头)。
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>
后台代码:
/// <summary> /// 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"); } } }
调用代码:
部分xmal(目的为了保持一致):
<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>
后台调用代码:
/// <summary> /// 打印数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PrintData_Click(object sender, RoutedEventArgs e) { PrintDataWind pdw = new PrintDataWind(_dt); pdw.print(); }
这样就可以打印了,方法虽笨,但管用,该方法还可打印图片等。
发表评论 / 取消回复