为什么我的数据网格中的每个单元格都显示 "System.Data.DataRowView" 而不是实际数据? (WPF)

Why is every single cell in my Data Grid showing "System.Data.DataRowView" instead of actual data? (WPF)

我正在尝试将 csv 读入我的数据网格。我需要做的就是获取 csv 并将其放入数据网格中。这是我拥有的 C#(找到 here):

            public ICollection CreateDataSource()
            {
                string CSVDataBase = @"C:\Users\Laura\source\repos\Inveni\Inveni\inventory.csv";
                //Create new DataTables and Rows
                DataTable dt = new DataTable();
                DataRow dr;

                //Create Column Headers
                dt.Columns.Add(new DataColumn("ID", typeof(int)));
                dt.Columns.Add(new DataColumn("Type", typeof(string)));
                dt.Columns.Add(new DataColumn("Brand", typeof(string)));
                dt.Columns.Add(new DataColumn("Line", typeof(string)));

                //For each line in the File
                foreach (string Line in File.ReadLines(CSVDataBase))
                {
                    //Split lines at delimiter ';''

                    //Create new Row
                    dr = dt.NewRow();

                    //ID=
                    dr[0] = Line.Split(',').ElementAt(0);

                    //Type =
                    dr[1] = Line.Split(',').ElementAt(1);

                    //Brand=
                    dr[2] = Line.Split(',').ElementAt(2);

                    //Line= 
                    dr[3] = Line.Split(',').ElementAt(3);

                    //Add the row we created
                    dt.Rows.Add(dr);
                }
                //Return Dataview 
                DataView dv = new DataView(dt);
                return dv;
            }

然后:

dgvInventory.ItemsSource = CreateDataSource();

在我的 XAML 中:

<DataGrid x:Name="dgvInventory" ItemsSource="{Binding}" Grid.Column="1" Margin="0" Grid.Row="1" BorderBrush="{x:Null}" Background="#FF0B123F" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding}" Header="ID"/>
                    <DataGridTextColumn Binding="{Binding}" Header="Type"/>
                    <DataGridTextColumn Binding="{Binding}" Header="Brand"/>
                    <DataGridTextColumn Binding="{Binding}" Header="Line"/>
                </DataGrid.Columns>
            </DataGrid>

此输出是显示“System.Data.DataRowView”而不是实际数据的每个单元格。 System.Data.DataRowView Issue

如何让我的数据网格显示正确的数据?

列绑定必须使用相应的 属性 路径:

<DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding ID}" Header="ID"/>
    <DataGridTextColumn Binding="{Binding Type}" Header="Type"/>
    <DataGridTextColumn Binding="{Binding Brand}" Header="Brand"/>
    <DataGridTextColumn Binding="{Binding Line}" Header="Line"/>
</DataGrid.Columns>

或更简单,您根本没有显式声明列,也没有设置 AutoGenerateColumns="False".

另请注意,当您在后面的代码中分配 ItemsSource 属性 时,ItemsSource="{Binding}" 毫无意义。


您只需要以下内容即可创建源集合:

private IEnumerable CreateDataSource()
{
    var CSVDataBase = ...

    return File.ReadLines(CSVDataBase).Select(
        line =>
        {
            var items = line.Split(',');
            return new
            {
                ID = int.Parse(items[0]),
                Type = items[1],
                Brand = items[2],
                Line = items[3]
            };
        });
}