имя столбца данных wpf не может иметь косую черту /

Я очень новичок в WPF. У меня очень странная проблема с созданием таблицы, вот код, который у меня есть:

DataTable table = new DataTable();
table.Columns.Add("request/sec", typeof(string));
DataRow newRow = dataTable.NewRow();
newRow["request/sec", "na");

но он показывает только имя столбца с «запрос/сек» и пустую строку

однако, если я это сделаю:

DataTable table = new DataTable();
table.Columns.Add("test(request/sec)", typeof(string));
DataRow newRow = dataTable.NewRow();
newRow["test(request/sec)", "na");

тогда он работает, он правильно показывает имя столбца и строку со значением «na»

Я понятия не имею, почему это происходит, я знаю, что это звучит нелепо. Кто-нибудь может помочь?

примечание: я также пробовал "//", "/", "\/", @ я не могу жестко закодировать имена столбцов, они динамически генерируются определенной логикой, я использовал приведенный выше код в качестве примеров


person airok    schedule 23.10.2014    source источник
comment
У вас есть сетка, генерирующая столбцы, или вы сами их указываете? Если вы делаете это сами, покажите нам, как вы это делаете. Кроме того, что такое ItemsSource сетки?   -  person Mike Strobel    schedule 24.10.2014
comment
имена столбцов генерируются. :(   -  person airok    schedule 24.10.2014


Ответы (2)


Данные не отображаются при привязке ItemsSource WPF DataGrid к DataTable, который содержит такие столбцы, как ' 14.01.10' - Форум MS WPF обсуждает эту проблему.

Вкратце, это было заявлено как ошибка WPF Toolkit от 22 марта 2010 г. и относится к заявкам, сообщающим о подобных проблемах с некоторыми другими символами.

person ivan_pozdeev    schedule 23.10.2014

Существуют проблемы с созданием привязок, когда имя свойства содержит некоторые зарезервированные символы, такие как . и /. Парсер пути свойства просто не обрабатывает их. У вас есть несколько вариантов:

  1. Вместо того, чтобы сетка автоматически генерировала столбцы, определите их самостоятельно, а для столбцов с зарезервированными символами привяжите к индексатору строки данных вместо имени столбца:

    <DataGridTextColumn Binding="{Binding Path=[request/sec]}" Header="request/sec" />
    
  2. Если вам важно только имя столбца, потому что вы хотите управлять текстом заголовка столбца, просто объявите столбцы вручную, дайте столбцу «правильное» имя и установите Header, как указано выше.

person Mike Strobel    schedule 23.10.2014
comment
Мне нужно сгенерировать имя столбца... это не всегда одно и то же. Т_Т - person airok; 24.10.2014
comment
Не могли бы вы удалить недопустимые символы из имени столбца, но оставить их в заголовке столбца? Это будет выглядеть так же для пользователя. Вы по-прежнему можете генерировать столбцы, но вы можете сделать это самостоятельно, а не полагаться на сетку. - person Mike Strobel; 24.10.2014
comment
Как удалить недопустимые символы из имени столбца, но оставить их в заголовке столбца? - person airok; 25.10.2014
comment
Создайте столбцы вручную и назначьте правильный заголовок свойству Header. - person Mike Strobel; 27.10.2014
comment
Это столбец DataGrid, а не DataColumn :-( - person imma; 25.07.2019