C# 如何使用c在DataGrid(WPF)中显示列表列表#

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

我有一个标题(列)列表,然后是数据行,并希望通过双向绑定在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> { "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 make
AutoGenerateColumns=“True”