使用名称中的点将DataRowView添加到DataGrid的问题

时间:2012-03-18 08:58:40

标签: c# wpf datagrid

在输出一些计算值的工具中,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路径错误:在'object'''DataRowView'(HashCode = 25662852)'上找不到'x = 8'属性。 BindingExpression:Path = x = 8.0000; DataItem ='DataRowView'(HashCode = 25662852); target元素是'TextBlock'(Name =''); target属性是'Text'(类型'String')

每个列只有不同的x的相同消息。使用.test版本和德语(所以逗号而不是点作为小数分隔符)我得到:

System.Windows.Data错误:40:BindingExpression路径错误:在'object'''DataRowView'(HashCode = 25662852)'上找不到'x = 8,0000'属性。 BindingExpression:Path = x = 8,0000.test; DataItem ='DataRowView'(HashCode = 25662852); target元素是'TextBlock'(Name =''); target属性是'Text'(类型'String')

有没有人看到这个问题的解决方案?

此致 菲尔

1 个答案:

答案 0 :(得分:1)

DataColumn.ColumnName遵循与MS SQL中的列名相同的规则。关于MS SQL中可接受的列名称的堆栈文章是here

我还能够找到关于here的培训课程,但不是关于该主题的原始MS来源。

简而言之,“。”不是列名称的可接受字符。