DataTable转Datagrid绑定错误
DataTable into Datagrid binding error
我用 Excel 文件填充 DataTable
,然后我将此 DataTable
分配给 DataGrid
的 ItemSource
,所有列和行很好,除了最后一个抛出:
"System.Windows.Data Error: 40 : BindingExpression path error: 'Y Error Est' property not found on 'object' ''DataRowView' (HashCode=64398613)'. BindingExpression:Path=Y Error Est. 1 (Class 1);
DataItem='DataRowView' (HashCode=64398613);
target element is 'TextBlock' (Name='');
target property is 'Text' (type 'String')"`
这是填充函数:
using (var pck = new OfficeOpenXml.ExcelPackage())
{
using (FileStream fileStream = new FileStream(dialog.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
pck.Load(fileStream);
}
ExcelWorksheet worksheet = pck.Workbook.Worksheets.First();
DataTable tbl = new DataTable();
//Column Headers
foreach (ExcelRangeBase firstRowCell in worksheet.Cells[9, 2, 9, worksheet.Dimension.End.Column])
{
tbl.Columns.Add(firstRowCell.Text);
}
Int32 startRow = 10;
for (Int32 rowNum = startRow; rowNum <= worksheet.Dimension.End.Row; rowNum++)
{
ExcelRange range = worksheet.Cells[rowNum, 2, rowNum, worksheet.Dimension.End.Column];
DataRow row = tbl.Rows.Add();
foreach (ExcelRangeBase cell in range)
{
//tbl.Rows.Add(cell.Text);
row[cell.Start.Column-2] = cell.Text;
}
}
DTGrid.ItemsSource = tbl.AsDataView();
}
这里是 WPF 绑定:
<DataGrid Name="DTGrid" ItemsSource="{Binding Path=DTGrid.ItemsSource}" Grid.Row="1" Grid.RowSpan="2" Grid.Column="0" Grid.ColumnSpan="2" AutoGenerateColumns="true"></DataGrid>
我正在遵循 MVVM 模式,以防万一有人问,这发生在我的 ViewModel 上。
我知道这个错误非常具体和清楚,但是除了那一列之外所有的列都很好,我还检查了 Excel 中单元格的数据类型并且与其他列相同,所以我很迷路。
有人可以帮忙吗?提前致谢。
这可能不是正确的答案,但我想我记得 excel 空单元格被归类为 null 而不是空字符串,您可能需要调整查询以用空字符串替换 null。您的错误抱怨期望值需要是一个字符串
希望这有用。
问题其实是ColumnName,ColumnName是用来创建绑定路径的,更好的解释可以在@ASh的回答中找到
我用 Excel 文件填充 DataTable
,然后我将此 DataTable
分配给 DataGrid
的 ItemSource
,所有列和行很好,除了最后一个抛出:
"System.Windows.Data Error: 40 : BindingExpression path error: 'Y Error Est' property not found on 'object' ''DataRowView' (HashCode=64398613)'. BindingExpression:Path=Y Error Est. 1 (Class 1); DataItem='DataRowView' (HashCode=64398613); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')"`
这是填充函数:
using (var pck = new OfficeOpenXml.ExcelPackage())
{
using (FileStream fileStream = new FileStream(dialog.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
pck.Load(fileStream);
}
ExcelWorksheet worksheet = pck.Workbook.Worksheets.First();
DataTable tbl = new DataTable();
//Column Headers
foreach (ExcelRangeBase firstRowCell in worksheet.Cells[9, 2, 9, worksheet.Dimension.End.Column])
{
tbl.Columns.Add(firstRowCell.Text);
}
Int32 startRow = 10;
for (Int32 rowNum = startRow; rowNum <= worksheet.Dimension.End.Row; rowNum++)
{
ExcelRange range = worksheet.Cells[rowNum, 2, rowNum, worksheet.Dimension.End.Column];
DataRow row = tbl.Rows.Add();
foreach (ExcelRangeBase cell in range)
{
//tbl.Rows.Add(cell.Text);
row[cell.Start.Column-2] = cell.Text;
}
}
DTGrid.ItemsSource = tbl.AsDataView();
}
这里是 WPF 绑定:
<DataGrid Name="DTGrid" ItemsSource="{Binding Path=DTGrid.ItemsSource}" Grid.Row="1" Grid.RowSpan="2" Grid.Column="0" Grid.ColumnSpan="2" AutoGenerateColumns="true"></DataGrid>
我正在遵循 MVVM 模式,以防万一有人问,这发生在我的 ViewModel 上。
我知道这个错误非常具体和清楚,但是除了那一列之外所有的列都很好,我还检查了 Excel 中单元格的数据类型并且与其他列相同,所以我很迷路。
有人可以帮忙吗?提前致谢。
这可能不是正确的答案,但我想我记得 excel 空单元格被归类为 null 而不是空字符串,您可能需要调整查询以用空字符串替换 null。您的错误抱怨期望值需要是一个字符串 希望这有用。
问题其实是ColumnName,ColumnName是用来创建绑定路径的,更好的解释可以在@ASh的回答中找到