【发布时间】:2011-10-15 15:14:17
【问题描述】:
我有一个 DBF 文件读入数据表并在 WPF 中使用数据网格显示。这个 DBF 文件很特殊,它的列名为“A.B”。绑定此列后,绑定表达式可能会将“A”作为数据行视图的属性进行交换,而“B”是“A”的属性。有没有办法解决这个问题?
这是重新创建此问题的代码。只需在 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;
下面是我的代码效果截图:
这里是 snoop 监视的表达式异常。所以我确定问题是由绑定路径中的“A.B”点引起的。
System.Windows.Data 错误:40:BindingExpression 路径错误:“A” 在“对象”“DataRowView”(HashCode=60213203)上找不到属性。 绑定表达式:路径=A.B; DataItem='DataRowView' (哈希码=60213203);目标元素是'TextBlock'(名称='');目标 属性是“文本”(输入“字符串”)谢谢,
【问题讨论】:
-
感谢您的帮助;我仍然在这个问题上挣扎。我们在X64环境;这样我们就不能使用 OleDbProvider 等;所以我们用二进制阅读器来阅读 DBF。上面的代码是重现此问题的简单示例,我不确定从 OleDb 或我们的方法读取是否有任何不同,列类型相同,数据源中的值相同。所以我认为核心问题来自于绑定表达式。请查看我编辑的问题。
-
奇怪。嗯..您是否尝试过逃避它,例如“A\.B”?
-
"A\.B" 使用是非法的。但我尝试使用 [A.B] 解决了这个问题;但是这样,当点击列标题进行排序时,它会抛出关于 SortMemberPath 的异常,所以我们需要挂钩一个事件来修剪 '[' 和 ']' 使其工作。还是谢谢。
-
哎呀。没有意识到你已经把方括号放下了。是的,我仍然有排序异常。所以答案还没有完成..
-
没问题,谢谢你的帮助:)