将DataRowView添加到名称中带点的DataGrid时出现问题
本文关键字:DataGrid 问题 添加 DataRowView | 更新日期: 2023-09-27 18:28:06
我有一个关于输出一些计算值的工具中DataGrid中的输出的大问题。作为程序的一部分,我有一个DataGrid:
<DataGrid AutoGenerateColumns="True" EnableRowVirtualization="True" EnableColumnVirtualization="True" Margin="6,14,6,6" Name="valueGrid" ItemsSource="{Binding}" MaxColumnWidth="70" MinColumnWidth="70" ColumnHeaderHeight="23" IsReadOnly="True" CanUserSortColumns="False" CanUserReorderColumns="False" />
然后我在中动态添加列
public partial class MainWindow : Window
{
private DataView _dv;
private void BuildGrid(int columns, int rows, double[,] values, double x, double deltax)
{
DataTable dt = new DataTable();
int i, j;
string pos;
DataColumn cl = null;
for (i = 0; i < columns; i++)
{
pos = string.Format("{0:0.0000}", x + i * deltax);
cl = new DataColumn("x = " + pos);
dt.Columns.Add(cl);
}
_dv = new DataView(dt);
valueGrid.ItemsSource = _dv;
for (i = 0; i < rows; i++)
{
DataRowView rw = _dv.AddNew();
j = 0;
foreach (DataColumn col in _dv.Table.Columns)
{
rw[col.ColumnName] = string.Format("{0:0.000000}", values[i, j]);
j++;
}
}
}
}
现在我运行的是一个德语操作系统(所以十进制分隔符是逗号),但在英国学习,所以我想把我的CultureInfo改成英语,用点代替逗号,一切都很好,但列名称中的点似乎有问题,更改后DataGrid的所有单元格都是空的。我还尝试在每个列名的末尾添加字符串".test",而不是更改语言,结果出现了同样的问题。我收到以下错误消息:
System.Windows.Data错误:40:BindingExpression路径错误:在"对象"DataRowView"(HashCode=225662852)上找不到"x=8"属性。BindingExpression:Path=x=8.0000;DataItem="DataRowView"(哈希代码=25662852);目标元素为"TextBlock"(名称=");目标属性是"文本"(类型为"字符串")
每一列都有相同的消息,只是有一个不同的x。使用.test版本,再使用德语(所以逗号而不是点作为小数分隔符),我得到:
System.Windows.Data错误:40:BindingExpression路径错误:在"对象"DataRowView"(HashCode=225662852)上找不到"x=80000"属性。BindingExpression:Path=x=80000.test;DataItem="DataRowView"(哈希代码=25662852);目标元素为"TextBlock"(名称=");目标属性是"文本"(类型为"字符串")
有人看到这个问题的解决方案了吗?
谨致问候,Phil
DataColumn.ColumnName
遵循与MS SQL中列名相同的规则。关于MSSQL中可接受列名的堆栈文章介绍如下:
我也能在这里找到关于这方面的培训课程,但不是关于这个主题的原始MS来源。
简而言之,"."不是列名可以接受的字符。