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;
내 코드의 효과의 스크린 샷입니다 :
그리고 여기 스눕에 의해 감시 표현 예외입니다. 그래서 문제는 바인딩 경로의 "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,
도움 주셔서 감사합니다. 나는 아직도이 문제에 대해 고심하고있다. 우리는 X64 환경에 있습니다. 그래서 우리는 OleDbProvider 등을 사용할 수 없습니다. 그래서 우리는 바이너리 리더로 DBF를 읽습니다. 위의 코드는이 문제를 재현 할 수있는 간단한 샘플입니다. OleDb 또는 우리의 메서드와 다른 읽기가 있는지, 열 형식이 같은지, 값이 데이터 원본과 동일한 지 확신 할 수 없습니다. 그래서 핵심 문제는 바인딩 표현에서 온 것이라고 생각합니다. 내 편집 된 질문을 참조하십시오. – Howard
이상한. 흠 .. 예. "A \ .B"? – KMC
"A \ .B"는 사용이 불법입니다. 하지만 [A.B]를 사용하여 문제를 해결했습니다. 그러나이 방법으로 정렬 할 열 머리글을 클릭하면 SortMemberPath에 대한 예외가 발생하므로 '['및 ']'을 트림하여 이벤트가 작동하도록해야합니다. 어쨌든 고마워. – Howard