在網上搜索wpf合並單元格,一直沒搜索到,沒辦法,只能自己想辦法搞定了。其實就是DataGrid套DataGrid,為了方便支持Column拖動,在合並的DataGridColumn那一列的Header也放一個DataGrid,但是合並的這一個連續列中只支持一列的拖動,效果如下,上圖
代碼如下
首先定義兩個模板,一個用於合並的Header顯示
<DataTemplate x:Key="MergeHeader"> <DataGrid HorizontalAlignment="Stretch" HorizontalGridLinesBrush="Transparent" BorderThickness="0" Margin="0" CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="產品批號" Width="*" IsReadOnly="True" /> <DataGridTextColumn Header="生產日期" IsReadOnly="True" Width="100" /> <DataGridTextColumn Header="有效期至" IsReadOnly="True" Width="102" /> <DataGridTextColumn Header="tedsd" Width="126" IsReadOnly="True" /> <DataGridTextColumn Header="tesddff" Width="125" IsReadOnly="True"/> </DataGrid.Columns> <DataGrid.Resources> <Style TargetType="DataGridColumnHeader"> <Setter Property="Template" Value="{StaticResource styleMergeHeader}"/> </Style> </DataGrid.Resources> </DataGrid> </DataTemplate>
另外一個模板用於顯示合並明細信息,ItemsSource要綁定到你數據源的一個List屬性,意思就是你把合並的明細信息放入到主DataGrid數據源的子List屬性中,因為明細中不要顯示Header所以把Header隱藏
<DataTemplate x:Key="MergeColumn"> <DataGrid Name="dgMergeGrid" ItemsSource="{Binding MerageData}" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" Loaded="dgMergeGrid_Loaded" BorderThickness="0,0,0,0" HorizontalAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Center" VerticalContentAlignment="Center" HeadersVisibility="None" AutoGenerateColumns="False" IsReadOnly="True"> <DataGrid.Columns> <DataGridTextColumn Header="產品批號" Width="*" IsReadOnly="True" Binding="{Binding produceBatchNo}"> </DataGridTextColumn> <DataGridTextColumn Header="生產日期" IsReadOnly="True" Width="100" Binding="{Binding produceDate}" /> <DataGridTextColumn Header="有效期至" IsReadOnly="True" Width="102" Binding="{Binding exprieDate}" /> <DataGridTextColumn Header="dfafa" Width="126" IsReadOnly="True" Binding="{Binding smallNum}" /> <DataGridTextColumn Header="fafsfdfd" Width="125" IsReadOnly="True" Binding="{Binding packUnit}" /> </DataGrid.Columns> <DataGrid.Resources> <Style TargetType="DataGrid"> <!--網格線顏色--> <Setter Property="HorizontalGridLinesBrush"> <Setter.Value> <SolidColorBrush Color="Transparent"/> </Setter.Value> </Setter> <Setter Property="VerticalGridLinesBrush"> <Setter.Value> <SolidColorBrush Color="LightBlue"/> </Setter.Value> </Setter> </Style> </DataGrid.Resources> </DataGrid> </DataTemplate>
然后在你的主DataGrid中的顯示明細信息的列設置模板就可以了
<DataGridTemplateColumn Header="批次信息" Width="580" HeaderTemplate="{StaticResource MergeHeader}" CellTemplate="{StaticResource MergeColumn}">
<DataGridTemplateColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="LightBlue"></Setter>
</Style>
</DataGridTemplateColumn.HeaderStyle>
</DataGridTemplateColumn>