当我有一个简单的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
,或者我现在必须全部手册?
答案 0 :(得分:3)
您可以尝试处理resultsGrid.AutoGeneratingColumns
- 或者更优选地,在集合获取数据绑定之前仅对网格执行此操作 - 以替换或删除列名称中的空格或句点。但是,您必须同时对网格和DataSet执行此操作,因此,如果您的数据被编辑和保存,这种方法可能会比它的价值更麻烦。这种效率和可行性在很大程度上取决于你的应用程序的结构和行为,而且我还没有对它进行过测试,所以请大量使用它。
据我所知(事实上,这不是一个非常广泛的领域),你几乎坚持这种行为。我建议向微软提交一个错误;这似乎是AutoGenerateColumns
的理想行为。
答案 1 :(得分:0)
您可以将SQL select格式化为无空格
select [Column A] as 'Column_A' from table