2012-01-30 28 views
4

名稱的列當我有一個簡單的DataSet具有與簡單的列名(即沒有空格或週期),碼錶,如以下工作就好:不能WPF DataGrid綁定到表與具有空間和其他特殊字符

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); 

數據網格在上面的例子有AutoGenerateColumns屬性設置爲True和正確地從在DataSet表填充其數據。

但是,如果我的表中有包含空格/時間或其它特殊字符名稱的列,自動綁定似乎失敗。我得到的錯誤,如:

System.Windows.Data信息:20:BindingExpression不能 由於缺少信息檢索值。 BindingExpression:Path = My Col. Name; DataItem ='DataRowView'(HashCode = 8146871);目標元素 是'TextBlock'(Name ='');目標屬性是「文本」(類型「字符串」)

顯然,自動生成的綁定表達式Path=My Col. Name無效。整個路徑需要「引用」以便允許空格和句點。對於列名更復雜的表,是否有任何方法可以使用AutoGeneratedColumns?還是我現在必須全部手動?

回答

3

你可以嘗試處理resultsGrid.AutoGeneratingColumns - 或者更優選,設定被數據綁定之前,這樣做只是爲了電網 - 替換或刪除空格或句點在列名中。不過,你必須對grid和DataSet都這樣做,所以如果你的數據被編輯和保存,這個方法可能會比它的價值更麻煩。這樣做的效率和可行性在很大程度上取決於您的應用程序的結構和行爲,另外我還沒有測試過它,因此請使用相當大的鹽。

至於我發現(這誠然是不是一個非常廣闊的領域),你幾乎堅持了這種行爲。我會建議向微軟提交一個錯誤;這似乎是AutoGenerateColumns的理想行爲。

+0

這正是我現在要做的,在將它綁定到網格之前重命名DataSet中的列 - 黑客攻擊。 – 2012-01-30 22:18:52

0

你可以格式化SQL選擇有沒有空格

select [Column A] as 'Column_A' from table 
+0

除了它是結果集一個存儲過程調用的... – 2012-01-30 21:10:37

+0

你能修改存儲過程? – Paparazzi 2012-01-31 13:59:10

+0

不,我必須按照原樣處理結果集,因爲我不是唯一的用戶... – 2012-01-31 14:19:34