WPF DataGrid 合並單元格


在網上搜索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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM