我可以以某种方式表示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;
提前致谢。
答案 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