将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

将DataRowView添加到名称中带点的DataGrid时出现问题

DataColumn.ColumnName遵循与MS SQL中列名相同的规则。关于MSSQL中可接受列名的堆栈文章介绍如下:

我也能在这里找到关于这方面的培训课程,但不是关于这个主题的原始MS来源。

简而言之,"."不是列名可以接受的字符。