首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并WPF DataGrid中的单元格

合并WPF DataGrid中的单元格
EN

Stack Overflow用户
提问于 2013-06-20 06:21:13
回答 3查看 26.5K关注 0票数 17

我想创建一个WPF数据网格,它跨越一列中的多个行。如下所示:

代码语言:javascript
运行
复制
+-------+----------------+
| Name  | Attributes     |
+-------+----------------+
|       | Horse Power    |
| BMW   +----------------+
|       | Color          |
+-------+----------------+
|       | Weight         |
| Ford  +----------------+
|       | Color          |
+-------+----------------+

如何更改以下代码才能完成此任务?

代码语言:javascript
运行
复制
<DataGrid AutoGenerateColumns="False">
     <DataGrid.Columns>
          <DataGridTextColumn Header="Name" />
          <DataGridTextColumn Header="Attributes" />
     </DataGrid.Columns>
</DataGrid>
EN

回答 3

Stack Overflow用户

发布于 2013-06-21 14:05:19

尝试使用DataGridTemplateColumn。我创建了用于数据绑定的示例测试类

代码语言:javascript
运行
复制
public class Test
{

    public Test(string name, string attribute1, string attribute2)
    {
        Name = name;
        Attributes = new Attribute(attribute1, attribute2);
    }

    public string Name { get; set; }
    public Attribute Attributes { get; set; }
}

public class Attribute
{

    public Attribute(string attribute1, string attribute2)
    {
        Attribute1 = attribute1;
        Attribute2 = attribute2;
    }

    public string Attribute1 { get; set; }
    public string Attribute2 { get; set; }
}

和xaml中的数据网格

代码语言:javascript
运行
复制
<DataGrid AutoGenerateColumns="False"  Name="dataGrid1" ItemsSource="{Binding}">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Name"  >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Grid>
                            <TextBlock Text="{Binding Path=Name}"  VerticalAlignment="Center" Margin="3,3,3,3"/>
                        </Grid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Attributes"  >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate >
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="50*"/>
                                <RowDefinition />
                                <RowDefinition Height="50*"/>
                            </Grid.RowDefinitions>
                            <TextBlock Grid.Row="0" Text="{Binding Path=Attributes.Attribute1}" VerticalAlignment="Center" Margin="3,3,3,3"/>
                            <Line Grid.Row="1" Stroke="Black" Stretch="Fill" X2="1" VerticalAlignment="Center"/>
                            <TextBlock Grid.Row="2" Text="{Binding Path=Attributes.Attribute2}"  VerticalAlignment="Center" Margin="3,3,3,3"/>
                        </Grid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

并将其填充到代码隐藏中

代码语言:javascript
运行
复制
List<Test> list = new List<Test>();
//populate list with your data here
dataGrid1.DataContext = list;
票数 10
EN

Stack Overflow用户

发布于 2014-10-08 21:31:39

我设法实现了一个解决方案,它通过三个级别的分组实现了您想要的功能,但有一个小问题,即Group Header与数据水平滚动。

代码语言:javascript
运行
复制
    <Style x:Key="GroupItemStyle" TargetType="{x:Type GroupItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GroupItem}">
                        <StackPanel Orientation="Horizontal" >
                            <Border BorderThickness="0">
                                <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition Width="Auto"/>
                                    </Grid.ColumnDefinitions>

                                    <Border BorderThickness="1" MinWidth="150">
                                        <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
                                            <ContentPresenter Content="{Binding Name}" >
                                            </ContentPresenter>
                                        </Grid>

                                    </Border>
                                    <Border BorderThickness="0" Grid.Column="1">
                                        <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
                                            <ItemsPresenter/>
                                        </Grid>
                                    </Border>
                                </Grid>
                            </Border>
                        </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

和网格:

代码语言:javascript
运行
复制
            <DataGrid ItemsSource="{Binding GroupedData}" AutoGenerateColumns="False" MinRowHeight="25" CanUserAddRows="False" CanUserDeleteRows="False">
                <DataGrid.GroupStyle>
                    <!-- First Group -->
                    <GroupStyle ContainerStyle="{StaticResource GroupItemStyle}">
                        <GroupStyle.Panel>
                            <ItemsPanelTemplate>
                                <DataGridRowsPresenter/>
                            </ItemsPanelTemplate>
                        </GroupStyle.Panel>
                    </GroupStyle>

                    <!-- Second Group -->
                    <GroupStyle ContainerStyle="{StaticResource GroupItemStyle}">
                        <GroupStyle.Panel>
                            <ItemsPanelTemplate>
                                <DataGridRowsPresenter/>
                            </ItemsPanelTemplate>
                        </GroupStyle.Panel>

                    </GroupStyle>

                    <!-- Third Group -->
                    <GroupStyle ContainerStyle="{StaticResource GroupItemStyle}">
                        <GroupStyle.Panel>
                            <ItemsPanelTemplate>
                                <DataGridRowsPresenter/>
                            </ItemsPanelTemplate>
                        </GroupStyle.Panel>
                    </GroupStyle>
                </DataGrid.GroupStyle>
                <DataGrid.Columns>
        ...
                </DataGrid.Columns>
            </DataGrid>
票数 3
EN

Stack Overflow用户

发布于 2013-11-05 09:33:57

关于这个主题的另一篇有用的文章是http://www.mindstick.com/Articles/90371ed3-c0f7-49eb-ba2d-9d1f2c9b14e2/?Grid%20Control%20in%20WPF

代码语言:javascript
运行
复制
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Button x:Name="btn1" Content="First Button" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" />
    <Button x:Name="btn2" Content="Second Button" Grid.Row="0" Grid.Column="2" />
    <Button x:Name="btn3" Content="Thired Button" Grid.Row="1" Grid.Column="0" Grid.RowSpan="2" />
    <Button x:Name="btn4" Content="Fourth Button" Grid.Row="1" Grid.Column="1" />
    <Button x:Name="btn5" Content="Fifth Button" Grid.Row="1" Grid.Column="2" />
    <Button x:Name="btn6" Content="Six Button" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" />

请注意Grid.ColumnSpanGrid.RowSpan属性。

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

https://stackoverflow.com/questions/17202389

复制
相关文章

相似问题

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