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

时间:2018-04-05 12:19:30

标签: c# wpf datagrid

我有一个标题列(列),然后是数据行,并希望在DataGrid中使用双向绑定显示它

列出标题=新列表{" FirstName"," LastName","年龄" };

列表row1 =新列表{" John"," Doe"," 19" };

列表row2 =新列表{"简"," Doe"," 21" };

列表row3 =新列表{" Suzie"," Q"," 52" };

列表row4 =新列表{" No"," Body"," 48" };

列表> tableValues =  新名单> {row1,row2,row3,row4};

编辑器不允许我显示列表列表,因为它有多个<

我感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

首先创建一个类来保存您的人员信息,因为您初始化列表的方式并不好。

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

然后在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,但应该给你一个起点

网上有很多指南可以帮助解决这个问题,而不是在Stack Overflow上编写你自己的问题。

答案 1 :(得分:1)

鉴于标题数量可能不同,我建议以便于双向数据绑定的格式转换数据并使用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;