C# 如何使用c在DataGrid(WPF)中显示列表列表#
我有一个标题(列)列表,然后是数据行,并希望通过双向绑定在DataGrid中显示它C# 如何使用c在DataGrid(WPF)中显示列表列表#,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个标题(列)列表,然后是数据行,并希望通过双向绑定在DataGrid中显示它 List<string> headers = new List<string> { "FirstName", "LastName", "Age" }; List<string> row1 = new List<string> { "John", "Doe", "19" }; List<string> row2 = new List<string&g
List<string> headers = new List<string> { "FirstName", "LastName", "Age" };
List<string> row1 = new List<string> { "John", "Doe", "19" };
List<string> row2 = new List<string> { "Jane", "Doe", "21" };
List<string> row3 = new List<string> { "Suzie", "Q", "52" };
List<string> row4 = new List<string> { "No", "Body", "48" };
List<List<string>> tableValues =
new List<List<string>> { row1, row2, row3, row4 };
List headers=新列表{“FirstName”、“LastName”、“Age”};
列表行1=新列表{“John”、“Doe”、“19”};
List row2=新列表{“Jane”、“Doe”、“21”};
List row3=新列表{“Suzie”、“Q”、“52”};
列表行4=新列表{“否”、“正文”、“48”};
列出表值=
新列表{第1行、第2行、第3行、第4行};
编辑器不允许我显示列表列表,因为它有多个,首先创建一个类来保存您的个人信息,因为您初始化列表的方式不好
Public class Person
{
public string Firstname {get; set;}
public string Surname {get; set;}
public int Age {get; set;}
}
然后你可以创建多个人并将他们存储在一个Person类型的列表中
//other code
List<Person> People = new List<Person>();
People.Add(new Person() { Firstname = "John", Surname = "Doe", Age = 19 });
//etc
//其他代码
列表人员=新列表();
添加(newperson(){Firstname=“John”,姓氏=“Doe”,年龄=19});
//等
然后在XAML中,您所要做的就是将数据网格指向人员列表,它应该能够绑定到每个人的各种属性或自动生成列
<DataGrid CanUserSortColumns="True"
CanUserAddRows="False"
CanUserDeleteRows="False"
AutoGenerateColumns="False"
ItemsSource="{Binding Path=People}"
SelectionMode="Single">
<DataGrid.Columns>
<DataGridTextColumn MinWidth="100"
Width="Auto"
IsReadOnly="False"
Header="Firstname">
<DataGridTextColumn.Binding>
<Binding Path="Firstname"/>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
未经测试的XAML,但应该为您提供一个起点
有很多在线指南可以帮助您解决这一问题,而不是编写您自己关于堆栈溢出的问题。鉴于标题的数量可能不同,我建议以便于双向数据绑定的格式转换数据,并使用DataTable:
var dt = new DataTable();
// create columns and headers
int columnCount = headers.Count;
for (int i = 0; i < columnCount; i++)
dt.Columns.Add(headers[i]);
// copy rows data
for (int i = 0; i < tableValues.Count; i++)
dt.Rows.Add(tableValues[i].Take(columnCount).ToArray());
// display in a DataGrid
dataGrid.ItemsSource = dt.DefaultView;
var dt=new DataTable();
//创建列和标题
int columnCount=headers.Count;
对于(int i=0;i
XAML中有哪些内容?什么是您的DataContext?为什么您特别希望有一个列表作为您的数据源。这似乎不寻常。使源成为datatable似乎是一种更明显的选择,您可以键入列。年龄显然是一个整数,我没有一个类来表示它来自数据库中xml列的数据。标题可以不同,行也可以不同。因此,我将行表示为StringList,我没有一个类来表示它来自DB中xml列的数据。标题可以不同,行也可以不同。因此,我将行表示为字符串列表。正如Ash所提到的,您最好的选择是动态创建数据表。其他示例可以在此处找到,感谢您的评论和帮助。我修改了代码,并在代码中使用了数据表。但它不显示列或行。我有一个用于我的xam的用户控件。只需datagrid makeAutoGenerateColumns=“True”