我可以以某种方式表示WPF中DataGrid中的列表列表

时间:2014-12-09 20:06:48

标签: c# wpf

我可以以某种方式表示WPF中DataGrid中的列表列表吗?如果是这样,最简单的方法是什么?顺便说一句我自己无法生成列名称,我也不知道每个列表中有多少字段。

以下代码为我提供了"容量"和"伯爵"不应该显示的列。

        var list = new List<List<String>>();

        var firstList = new List<String>();
        firstList.Add("1");
        firstList.Add("2");

        var secondList = new List<String>();
        secondList.Add("3");
        secondList.Add("4");

        list.Add(firstList);
        list.Add(secondList);

        excelData.ItemsSource = list;

提前致谢。

2 个答案:

答案 0 :(得分:1)

一种方法是在第一个DataGrid的{​​{1}}内使用另一个RowDetailsTemplate,如下所示:

DataGrid

并在后面的代码中定义ListOfList属性:

<Grid Background="Blue">
        <DataGrid x:Name="ExcelData" AutoGenerateColumns="True">
            <DataGrid.RowDetailsTemplate>
                <DataTemplate>
                    <DataGrid ItemsSource="{Binding SelectedItem,ElementName=ExcelData}" x:Name="DataGridDetail" AutoGenerateColumns="False">
                        <DataGrid.Columns>
                            <DataGridTextColumn Binding="{Binding}"></DataGridTextColumn>
                        </DataGrid.Columns>
                    </DataGrid>
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>
        </DataGrid>
    </Grid>

并像你一样初始化它:

private List<List<String>> _listOfList;
        public List<List<String>> ListOfList
        {
            get
            {
                return _listOfList;
            }

            set
            {
                if (_listOfList == value)
                {
                    return;
                }

                _listOfList = value;
            }
        }

您可以考虑使用ListOfList = new List<List<String>>(); var firstList = new List<String> { "1", "2" }; var secondList = new List<String> {"3", "4"}; ListOfList.Add(firstList); ListOfList.Add(secondList); ExcelData.ItemsSource = ListOfList; 代替ObservableCollection并实施List INotifyPropertyChanged以获得更好的灵活性

答案 1 :(得分:0)

应使用<DataGrid.RowDetailsTemplate> <DataTemplate>,还应使用ObservableCollection。如果您的网格是只读的,即仅用于显示,那么您也可以使用List