2016-07-06 43 views
0

我正在編寫一些UI,它需要從另一個庫中獲取C#DataTable,並嘗試將其顯示在WPF DataGrid中。當DataTable中的列有特殊字符(例如.[])時,這會導致綁定錯誤(對用戶,行顯示錯誤或缺失數據)。我也許可以嘗試替換特殊字符,因此我的問題:將C#DataTable綁定到WPF DataGrid時允許使用哪些列名?

有什麼是合法的列名稱,什麼可能會導致綁定錯誤?

在這個簡單的代碼,我已經創建了一個帶有DataGrid一個WPF形式,它結合到DataTable

public DataTable Table { get; private set; } 

public MainWindow() 
{ 
    // Set up a table 
    Table = new DataTable(); 
    Table.Columns.Add("a"); 
    Table.Columns.Add("a.1"); 
    Table.Columns.Add("a[]"); 
    Table.Rows.Add("1", "2.", "3."); 
    InitializeComponent(); 

    DataContext = this; 
} 

上面的代碼產生以下綁定錯誤:

System.Windows.Data Error: 40 : 
BindingExpression path error: '[]' property not found on 'object' ''String' (HashCode=-842352753)'. BindingExpression:Path=a[]; DataItem='DataRowView' (HashCode=44777048); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') 
System.Windows.Data Error: 40 : 
BindingExpression path error: '1' property not found on 'object' ''String' (HashCode=-842352753)'. BindingExpression:Path=a.1; DataItem='DataRowView' (HashCode=14413736); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') 

由於!

+0

我花了一點時間研究這個,看看我能否找到任何相關的東西 - 最近我發現是[這裏](https://stackoverflow.com/questions/24679884/binding-datatable-to-a -datagrid-first-two-columns-empty-no-matter-what)其中@ZoAnimus表示_「如果列名中有特殊字符或標點符號,則wpf Datagrids會出現問題如果刪除這些字符,它應該按預期方式運行。「_。 –

+0

考慮到問題的性質,很明顯問題在於WPF正在使用正常的字符串路徑分析邏輯來解釋這些名稱。所以你實際尋找的引用是WPF綁定路徑文檔。需要避免解析器將解析的任何「特殊字符」。 –

+0

同意@Peter,謝謝,不幸的是我一直無法找到該文檔。你有什麼建議嗎?謝謝! –

回答

0

在綁定和查找propery期間存在一些反映,這意味着您無法指定列名,在反射期間會導致「語法錯誤」。 https://msdn.microsoft.com/en-us/library/bb613546(v=vs.110).aspx

+0

謝謝,這是非常有用的!,但不幸的是,這個鏈接並沒有給我一個清楚的畫面,說明哪些類的字符會導致語法錯誤。遊玩已經顯示。和[]是困難的;但有沒有更好的文檔顯示準確的語法允許? –

+0

您可以查看有關屬性名稱的語言規範:https://www.microsoft.com/en-us/download/confirmation.aspx?id=7029,章節2.4.2 – Dexion

+0

Thanks @ Dexion-這與Peter的答案相結合早些時候給我一個清晰的畫面。 –