2011-07-29 4 views
1

DBFT 파일을 데이터 테이블에 읽고 WPF에서 DataGrid로 표시합니다. 이 DBF 파일은 열 이름이 "A.B"인 특수 파일입니다. 이 열을 바인딩 한 후 바인딩 표현은 "A"를 "A"의 속성 인 데이터보기의 속성으로 교환 할 수 있습니다. 이 문제를 해결할 방법이 있습니까?WPF의 바인딩 경로에있는 점 때문에 문제가 발생합니다.

다음은이 문제를 다시 작성하는 코드입니다. DataGrid에서 XAML에 "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; 

하지만 정렬이 KMC에서 예외

+0

그래, 제 생각에 거의 같은 시간에 문제를 발견했습니다. :). – Howard

2

플러스 답을 던져, 당신은 정렬 예외가있을 수 있습니다. DataGrid에서 "Sorting"이벤트를 후크하고 e.Column.SortMemberPan의 '['와 ']'를 자르면이 문제가 해결됩니다.

+0

저에게는 셀에서 값을 업데이트하는 것과 비슷한 문제가 있다고 생각됩니다. 커밋이 호출되면 내 애플 리케이션이 호출되고 다음과 같은 객체 참조 인스턴스 예외 및 스택 출력과 함께 오류가 발생합니다. at System.Windows.Data.BindingGroup.UpdateValues ​​() at System.Windows.Data.BindingGroup.UpdateAndValidate (ValidationStep validationStep) at System .Windows.Data.BindingGroup.CommitEdit() 비슷한 문제가 있습니까? – stenly

관련 문제