Проблема добавления DataRowView в DataGrid с точкой в ​​имени - PullRequest
0 голосов
/ 18 марта 2012

У меня есть большая проблема относительно вывода в 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: свойство 'x = 8' не найдено в 'объекте' '' DataRowView '(HashCode = 25662852)'. BindingExpression: Path = x = 8,0000; DataItem = 'DataRowView' (HashCode = 25662852); целевым элементом является TextBlock (Name = ''); Целевое свойство - «Текст» (тип «Строка»)

То же сообщение для каждого отдельного столбца только с другим x. Используя версию .test и снова немецкий язык (так что запятая вместо точки в качестве десятичного разделителя) я получаю:

Ошибка System.Windows.Data: 40: Ошибка пути BindingExpression: свойство 'x = 8,0000' не найдено в 'объекте' '' DataRowView '(HashCode = 25662852)'. BindingExpression: Path = x = 8,0000.test; DataItem = 'DataRowView' (HashCode = 25662852); целевым элементом является TextBlock (Name = ''); Целевым свойством является «Текст» (тип «Строка»)

Кто-нибудь видит решение этой проблемы?

С уважением, Фил

1 Ответ

1 голос
/ 18 марта 2012

DataColumn.ColumnName следует тем же правилам, что и имена столбцов в MS SQL. Статья стека о допустимых именах столбцов в MS SQL, которая охватывает здесь :

Я также смог найти обучающий урок по этому здесь , но не оригинальный источник MS по этой теме.

Короче, "." недопустимый символ для имени столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...