【问题标题】:DataTable into Datagrid binding error [duplicate]DataTable 到 Datagrid 绑定错误 [重复]
【发布时间】:2017-10-12 15:53:56
【问题描述】:

我用 Excel 文件填充DataTable,然后我将这个DataTable 分配给我的DataGridItemSource,所有的列和行都很好,除了最后一个抛出:

“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。这个网格在另一个网格内吗?

标签: c# wpf epplus


【解决方案1】:

这可能不是正确的答案,但我想我记得 excel 空单元格被归类为 null 而不是空字符串,您可能需要调整查询以用空字符串替换空值。您的错误抱怨期望值需要是一个字符串 希望这有用。

【讨论】:

  • 您好,感谢您的回答,遗憾的是文件中没有空单元格。但是我不知道,谢谢指出。 =D
  • 实际上然后再次查看您的代码,与 Cell.Text 相比,用户 Cell.Value 会更好吗?
  • 我刚刚测试了更改为 Cell.Value 并得到了同样的错误。
  • 最后,是否与索引起始值有关,id 数据表从索引 0 开始。我认为 excel 从索引 1 开始。您可能正在尝试读取工作表维度末尾之后的行.
  • 是的,这是我想到的第一件事,但是,我检查了其他列和行,一切都在它应该在的位置(与原始 Excel 文件中的位置相同)。
【解决方案2】:

问题实际上是ColumnName,ColumnName是用来创建绑定路径的,更好的解释可以在@ASh answer here找到

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 2013-12-09
    • 2018-02-07
    • 2013-06-20
    • 2023-04-06
    • 2012-11-22
    • 2011-10-12
    • 2014-01-13
    相关资源
    最近更新 更多