2011-07-29 48 views
1

我有一個DBF文件讀入數據表並顯示在WPF中的數據網格。此DBF文件是特殊的,其列名稱爲「A.B」。綁定此列後,綁定表達式可能將「A」作爲數據視圖的屬性進行交易,否則「B」將爲「A」的屬性。有沒有辦法解決這個問題?在WPF中的綁定路徑中的點導致問題

以下是重新創建此問題的代碼。只需在XAML中有一個DataGrid名稱「dg」。按F5時,它應該在第一行顯示「Godspeed」,但沒有任何顯示。

DataTable dt = new DataTable(); 
      dt.Columns.Add("ID", typeof(int)); 
      dt.Columns.Add("A.B"); 

      DataRow row = dt.NewRow(); 
      row[0] = 1; 
      row[1] = "Godspeed"; 
      dt.Rows.Add(row); 

      DataGridTextColumn colA = new DataGridTextColumn(); 
      colA = new DataGridTextColumn(); 
      colA.Binding = new Binding("A.B"); 
      colA.Header = "A.B"; 
      dg.Columns.Add(colA); 

      var dv = new DataView(
       dt, 
       "", 
       "ID ASC", 
       DataViewRowState.CurrentRows); 

      dg.ItemsSource = dv; 

這裏是我的代碼的效果截圖: enter image description here

這裏是窺探​​看着表達異常。所以我相信這個問題是由綁定路徑中的「A.B」點引起的。

System.Windows.Data Error: 40 : BindingExpression path error: 'A' property not found on 'object' ''DataRowView' (HashCode=60213203)'. BindingExpression:Path=A.B; DataItem='DataRowView' (HashCode=60213203); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') Thanks,

+0

感謝您的幫助;我仍然在這個問題上掙扎。我們在X64環境中;所以我們不能使用OleDbProvider等;所以我們用二進制閱讀器閱讀DBF。上面的代碼是一個簡單的例子來重新創建這個問題,我不確定從OleDb或我們的方法有任何不同的讀取,列類型是相同的,在數據​​源中的值是相同的。所以我認爲核心問題來自於約束性表達。請看我編輯的問題。 – Howard

+0

奇怪。嗯..你試過逃跑了嗎? 「A \ .B」? – KMC

+0

「A \ .B」是非法使用。但我試着用[A.B]解決了這個問題;但是通過這種方式,當單擊列標題進行排序時,它會引發關於SortMemberPath的異常,所以我們需要掛鉤事件來修剪'['和']'以使其工作。不管怎麼說,還是要謝謝你。 – Howard

回答

2

使用方括號。

DataTable dt = new DataTable(); 
dt.Columns.Add("ID", typeof(int)); 
dt.Columns.Add("A.B"); 

DataRow row = dt.NewRow(); 
row[0] = 1; 
row[1] = "Godspeed"; 
dt.Rows.Add(row); 

dg.AutoGenerateColumns = false; 
DataGridTextColumn colA = new DataGridTextColumn(); 
DataGridTextColumn colB = new DataGridTextColumn(); 
colA = new DataGridTextColumn(); 
colB = new DataGridTextColumn(); 
colA.Binding = new Binding("ID"); 
colB.Binding = new Binding("A.B"); 
colA.Header = "ID"; 
colB.Header = "A.B"; 
dg.Columns.Add(colA); 
dg.Columns.Add(colB); 

var dv = new DataView(
    dt, 
    "", 
    "ID ASC", 
    DataViewRowState.CurrentRows); 

dg.ItemsSource = dv; 

但排序拋出異常

+0

是的,看到我的讚賞,我們幾乎在同一時間找出了問題。 :)。 – Howard

2

加上回答KMC,你可能有整理例外。請在DataGrid上掛鉤「排序」事件,並修剪e.Column.SortMemberPan的'['和']'將解決此問題。

+0

在我看來,我有與單元格中的值更新類似的問題。當提交被稱爲我的應用程序崩潰與對象參照實例異常和堆棧輸出如: 在System.Windows.Data.BindingGroup.UpdateValues() 在System.Windows.Data.BindingGroup.UpdateAndValidate(ValidationStep validationStep) 在系統.Windows.Data.BindingGroup.CommitEdit() 你有沒有類似的問題? – stenly