我可以以某种方式表示 WPF 中数据网格中的列表列表吗?

本文关键字:列表 网格 数据网 数据 方式 表示 WPF 我可以 | 更新日期: 2023-09-27 18:33:54

我可以以某种方式表示 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;

提前谢谢。

我可以以某种方式表示 WPF 中数据网格中的列表列表吗?

一种方法

是在第一个DataGridRowDetailsTemplate中使用另一个DataGrid,如下所示:

<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 Interface以获得更好的灵活性

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