为什么我的数据网格中的每个单元格都显示 "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]
};
});
}
我正在尝试将 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]
};
});
}