【发布时间】:2017-10-12 15:53:56
【问题描述】:
我用 Excel 文件填充DataTable,然后我将这个DataTable 分配给我的DataGrid 的ItemSource,所有的列和行都很好,除了最后一个抛出:
“System.Windows.Data 错误:40:BindingExpression 路径错误:'对象''DataRowView' (HashCode=64398613) 上找不到'Y Error Est' 属性。BindingExpression:Path=Y Error Est.1 ( 1类); DataItem='DataRowView' (HashCode=64398613); 目标元素是'TextBlock'(名称=''); 目标属性是“文本”(类型“字符串”)”`
这是填充函数:
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 for View 上。
我知道错误非常具体和明确,但除了那一列之外,所有列都很好,而且我还检查了 Excel 中单元格的 DataType 并且与其他列相同,所以我很迷茫.
有人可以帮忙吗?提前致谢。
【问题讨论】:
-
worksheet.Dimension.End.Column的值是多少? -
30,这只是它结束 Range 的列数。
-
那么您在执行期间检查了该值,它与预期的一样吗?
-
没错,DataRow 一切正常,所有列都有所有值,问题出在(我假设)在 DTGrid.ItemSource = tbl.AsDataView();
-
在您的 DataGrid 中,为什么要使用 grid.row="1" 和 grid.column 和 columnspan。这个网格在另一个网格内吗?