Не удается привязать WPF DataGrid к таблице со столбцами, имеющими имена с пробелами и другими специальными символами - PullRequest
4 голосов
/ 30 января 2012

Когда у меня есть простой DataSet, в котором есть таблица с простыми именами столбцов (то есть без пробелов или точек), код, подобный следующему, работает просто отлично:

  DataGrid resultsGrid=...; // Actually defined in the XAML
  DataSet ds=...; // The is the DataSet that contains one table
  Binding binding = new Binding();

  resultsGrid.DataContext=ds.Tables[0];
  resultsGrid.SetBinding(DataGrid.ItemsSourceProperty, binding);

DataGrid в вышеприведенном примере имеет атрибут AutoGenerateColumns, установленный на True, и правильно заполняет свои данные из таблицы в DataSet.

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

Сведения о System.Windows.Data: 20: BindingExpression не может восстановить значение из-за отсутствия информации. BindingExpression: Path = My Имя полковника; DataItem = 'DataRowView' (HashCode = 8146871); целевой элемент is 'TextBlock' (Name = ''); Целевым свойством является «Текст» (тип «Строка»)

Очевидно, что автоматически сгенерированное выражение привязки Path=My Col. Name недопустимо. Весь путь должен быть «заключен в кавычки», чтобы можно было использовать пробелы и точки. Есть ли способ придерживаться AutoGeneratedColumns для таблиц с более сложными именами столбцов, или я должен идти все вручную сейчас?

Ответы [ 2 ]

3 голосов
/ 31 января 2012

Вы можете попробовать обработать resultsGrid.AutoGeneratingColumns - или, что более предпочтительно, сделать это только с сеткой до того, как набор будет привязан к базе данных - чтобы заменить или удалить пробелы или точки в именах столбцов. Однако вам придется сделать это как с сеткой, так и с DataSet, поэтому, если ваши данные будут отредактированы и сохранены, этот метод, скорее всего, будет намного сложнее, чем он того стоит. Эффективность и выполнимость этого в значительной степени зависят от структуры и поведения вашего приложения, плюс я не проверял его, так что принимайте его со значительной долей соли.

Насколько я обнаружил (что, по общему признанию, не очень обширная область), вы в значительной степени застряли в этом поведении. Я бы предложил отправить сообщение об ошибке в Microsoft; похоже, что это было бы желательным поведением для AutoGenerateColumns.

0 голосов
/ 30 января 2012

Вы можете отформатировать SQL-запрос без пробелов

 select [Column A] as 'Column_A' from table
...