【问题标题】:Datagrid within a Datagrid, having one of the columns of a Datagrid as a Datagrid itself?Datagrid 中的 Datagrid,将 Datagrid 的列之一作为 Datagrid 本身?
【发布时间】:2013-01-20 21:04:11
【问题描述】:

我有定义我的 itemsource 的当前代码(我想向用户显示的内容):

public class View
{
public string Name { get; set; }
public string Quantity { get; set; }
public List<Item> items { get; set; }
}

public class Item
{
public string ItemName { get; set; }
public double ItemQuantity { get; set; }
}

使用的数据集:

List<View> myViews

所以你最终得到如下数据:

ViewA 50 {ItemA 50, ItemB 10, ItemC 20)
ViewB 10 {ItemC 10, ItemD 10, ItemE 10)

现在在我的数据网格中,它完美地显示了前两列,但列表显示为“集合”(不是实际数据),我猜这是意料之中的。

这是我现在的 XAML

        <DataGrid Grid.Row="2" Margin="0,146,0,350"
              ItemsSource="{Binding myViews}"
              AutoGenerateColumns="False" Height="104">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Width="*" FontSize="16"
                                Binding="{Binding Path=Name}" />
                <DataGridTextColumn Header="Quantity" Width="*" FontSize="16"
                                Binding="{Binding Path=Quantity}" />
                <DataGridTextColumn Header="Items" Width="*" FontSize="16"
                                Binding="{Binding Path=items}" />
            </DataGrid.Columns>
        </DataGrid>

我正在尝试找到一种向用户表示列表项的方法(在此数据网格中或其他方式,如果这不是正确的方法)。

我的想法是在第 3 列中实际上有另一个 Datagrid,它有自己的项目来源,但我似乎不知道如何使第 3 列成为 Datagrid(而不是像今天这样的文本) .有谁知道如何做到这一点(一些例子会很糟糕)。

或者如果这真的不是解决这个问题的正确方法,任何其他想法也将不胜感激。

谢谢,

【问题讨论】:

    标签: c# wpf xaml datagrid


    【解决方案1】:

    您可以使用RowDetailsTemplate 来显示Item 对象的列表。

     <DataGrid Grid.Row="2"  Margin="0,146,0,350"
          ItemsSource="{Binding myViews}"
          AutoGenerateColumns="False" Height="104">
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding items}">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Item Name" Width="Auto" FontSize="16"
                                Binding="{Binding Path=ItemName}" />
                        <DataGridTextColumn Header="Item Quantity " Width="Auto" FontSize="16"
                                Binding="{Binding Path=ItemQuantity }" />
                    </DataGrid.Columns>
                </DataGrid>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
    
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Width="*" FontSize="16"
                            Binding="{Binding Path=Name}" />
            <DataGridTextColumn Header="Quantity" Width="*" FontSize="16"
                            Binding="{Binding Path=Quantity}" />                
        </DataGrid.Columns>
    </DataGrid>
    

    如果您想在第三列中显示 Item 对象列表,您应该使用 DataGridTemplateColumn

    <DataGrid Grid.Row="2" Margin="0,146,0,350"
          ItemsSource="{Binding myViews}"
          AutoGenerateColumns="False" Height="104">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Width="*" FontSize="16"
                            Binding="{Binding Path=Name}" />
            <DataGridTextColumn Header="Quantity" Width="*" FontSize="16"
                            Binding="{Binding Path=Quantity}" />
            <DataGridTemplateColumn Header="Items">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding items}">
                            <DataGrid.Columns>
                                <DataGridTextColumn Header="Item Name" Width="Auto" FontSize="16"
                                Binding="{Binding Path=ItemName}" />
                                <DataGridTextColumn Header="Item Quantity " Width="Auto" FontSize="16"
                                Binding="{Binding Path=ItemQuantity }" />
                            </DataGrid.Columns>
                        </DataGrid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>               
        </DataGrid.Columns>
    </DataGrid>
    

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2018-04-24
      • 2016-11-05
      • 1970-01-01
      相关资源
      最近更新 更多