无法将WPF DataGrid绑定到具有空格和其他特殊字符的列的表

时间:2012-01-30 17:00:44

标签: wpf wpf-controls wpfdatagrid

当我有一个简单的DataSet有一个包含简单列名的表(即没有空格或句点)时,如下所示的代码就可以了:

  DataGrid resultsGrid=...; // Actually defined in the XAML
  DataSet ds=...; // The is the DataSet that contains one table
  Binding binding = new Binding();

  resultsGrid.DataContext=ds.Tables[0];
  resultsGrid.SetBinding(DataGrid.ItemsSourceProperty, binding);

上例中的DataGrid将AutoGenerateColumns属性设置为True,并从DataSet中的表中正确填充其数据。

但是,如果我的表包含名称包含空格/句点或其他特殊字符的列,则自动绑定似乎失败。我收到的错误如下:

  

System.Windows.Data信息:20:BindingExpression不能   由于缺少信息而检索值。 BindingExpression:路径=我的   上校名称; DataItem ='DataRowView'(HashCode = 8146871);目标要素   是'TextBlock'(Name =''); target属性是'Text'(类型'String')

显然,自动生成的绑定表达式Path=My Col. Name无效。需要“引用”整个路径以允许空格和句点。对于具有更复杂列名的表格,有没有办法坚持AutoGeneratedColumns,或者我现在必须全部手册?

2 个答案:

答案 0 :(得分:3)

您可以尝试处理resultsGrid.AutoGeneratingColumns - 或者更优选地,在集合获取数据绑定之前仅对网格执行此操作 - 以替换或删除列名称中的空格或句点。但是,您必须同时对网格和DataSet执行此操作,因此,如果您的数据被编辑和保存,这种方法可能会比它的价值更麻烦。这种效率和可行性在很大程度上取决于你的应用程序的结构和行为,而且我还没有对它进行过测试,所以请大量使用它。

据我所知(事实上,这不是一个非常广泛的领域),你几乎坚持这种行为。我建议向微软提交一个错误;这似乎是AutoGenerateColumns的理想行为。

答案 1 :(得分:0)

您可以将SQL select格式化为无空格

 select [Column A] as 'Column_A' from table