我可以以某种方式表示 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;
提前谢谢。
一种方法
是在第一个DataGrid
的RowDetailsTemplate
中使用另一个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