Имена столбцов SharePoint list.items.GetDataTable не совпадают с именами полей - PullRequest
2 голосов
/ 13 ноября 2008

Я связываю SPGridView с SPList. Как показывают примеры кода, я использую следующий код для создания представления данных на основе списка.

dim data as DataView = myList.Items.GetDataTable.DefaultView
grid.DataSource = data
etc...

Я обнаружил, что имена столбцов в результирующем просмотре данных не всегда соответствуют исходным полям, определенным в SPList. Например, у меня есть столбцы с именем

  • Описание
  • ReportItem
  • ReportStatus

    они отображаются в результирующем просмотре данных с именами столбцов, такими как

  • ReportType0
  • ReportStatus1

Это заставляет меня думать, что у меня определены повторяющиеся имена полей, но, похоже, это не так.

Похоже, мне здесь не хватает чего-то фундаментального? Спасибо.

Ответы [ 3 ]

4 голосов
/ 22 января 2009

Итак, я написал об этом в своем блоге, но написал небольшой вспомогательный метод, который вы можете использовать, сразу после того, как вы получите таблицу данных, она в основном сопоставляет имена столбцов в DataTable с их понятными именами.

DataTable table = list.GetItems(list.DefaultView).GetDataTable();
foreach(DataColumn column in table.Columns)
{
   column.ColumnName = list.Fields.GetFieldByInternalName(column.ColumnName).Title;
}

Надеюсь, это поможет!

4 голосов
/ 13 ноября 2008

Метод GetDataTable возвращает internalName (или staticName - я точно не помню, какое, но часто одинаковое) представление столбцов, а не Title представление, которое это то, что вы видите в веб-интерфейсе. Я считаю, что GetDataTable выполняет CAML-запрос под прикрытием, и вы должны использовать его internalName для ссылок на поля в CAML.

Этот блог рассказывает об этом чуть подробнее.

0 голосов
/ 09 мая 2009

Что вы также можете сделать (если вы используете .NET 3.5) - это использовать анонимный тип и связываться с ним. Если вы делаете это, вы также можете использовать Linq DataSource. Я сделал пост, который объясняет это здесь .

...