【问题标题】:How to RowFilter a column with a period in the name?如何对名称中带有句点的列进行行过滤?
【发布时间】:2012-12-19 08:25:03
【问题描述】:

我有一个从多维数据集填充的 DataTable,其列名声明为:

[措施].[库存数量]

DataTable 填充正确,但是在尝试使用 RowFilter 时:

"[措施].[库存数量] >= 2000"

我收到以下错误:

“[Measures.StockQty] 未找到

我也尝试只使用列名:

"[库存数量] >= 2000"

但这也会失败并出现未找到的错误。

是否可以使用包含句点的列名来过滤 DataTable,如果可以,如何?

【问题讨论】:

  • 如果您的查询中只有一张表,您可以只使用您的列名。
  • @NeilKnight 试过了。不行。
  • DataTable中列的真实名称是什么?使用调试器对其进行检查。
  • @TimSchmelter 有趣的是根据列调试:[Measures].[UnitsSold]
  • @NeilKnight 删除括号在这两种情况下都没有帮助:(

标签: c# winforms datatable cube


【解决方案1】:

您可以重命名数据表列(用于将句点替换为“_”)& 他们尝试行过滤器。

例如:

dataTable.Columns["Stock Qty"].ColumnName = 
                 dataTable.Columns["Stock Qty"].ColumnName.Replace(" ", "_");

【讨论】:

  • 它需要额外的维护,应该避免。这是一种解决方法。
【解决方案2】:

你为什么要使用RowFilter?如果您使用的是 .NET 3.5 或更高版本,我建议您使用更强大且更易读的 Linq-To-DataTable:

IEnumerable<DataRow> filteredRows = tblMeasures.AsEnumerable()
    .Where(r => r.Field<int>("Stock Qty") >= 2000);

如果您再次需要DataTable

DataTable tblFiltered = filteredRows.CopyToDataTable();

顺便说一句,如果DataTable 中的列名称是"Stock Qty",那么您的最后一种方法应该可以工作,因为您需要将其括在括号中。

tblMeasures.DefaultView.RowFilter = "[Stock Qty] >= 2000";

所以你应该使用调试器来查看列的真实名称和类型。

【讨论】:

  • 我同意这是一个更好的解决方案,但是我们不允许使用 LINQ(请不要问为什么)。我正在尝试找到一个快速而肮脏的解决方案,但这值得将来使用。
猜你喜欢
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 2020-04-21
相关资源
最近更新 更多