Как связать столбец gridview со значением подкласса? - PullRequest
6 голосов
/ 09 марта 2009

У меня есть сетевое представление ASP.net, к которому я пытаюсь подключиться. Мой DataSource содержит коллекцию, и 2 столбца, к которым я привязываюсь, являются частью подкласса. Мой DataSource имеет подкласс под названием Staff, который содержит информацию о персонале. Связанные поля SurveyID и NumberOfExceptions связываются нормально, но привязка Staff.Name и Staff.Office не может быть связана.

asp:BoundField DataField="SurveyID" HeaderText="ID" ...
asp:BoundField DataField="Staff.Name" HeaderText="Name" ...
asp:BoundField DataField="Staff.Office" HeaderText="Office" ...
asp:BoundField DataField="NumberOfExceptions" HeaderText="Exceptions" ...

И код позади:

uxSurveyGrid.DataSource = searchResults;
uxSurveyGrid.DataBind();

Если я наберу searchResults[0].Staff.Name в коде, я вижу значение, почему среда выполнения не может оценить Staff.Name в виде сетки?

Как связать столбцы со значениями подкласса? Должен ли я сделать это в коде позади?

Буду признателен за любую помощь,

Mark.

Ответы [ 4 ]

8 голосов
/ 09 марта 2009

Я полагаю, что вы можете заставить это работать, используя поле Template и скрипт разметки ...

    <asp:TemplateField>
        <ItemTemplate>
            <asp:Label Id="lblSubclassVal" runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "SubClass.PropertyName")%>"></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
6 голосов
/ 09 марта 2009

Механизм привязки данных в ASP.NET GridView поддерживает привязки только одного уровня. (в отличие от своего аналога WinForms Binding, который поддерживает многоуровневый режим в случае привязки к DataSet / DataTable / DataView).

У вас есть три возможных решения:

  1. Обработка события ItemDataBound для каждой строки
  2. Расширение сущностей корневого уровня свойствами, предоставляющими свойства дочернего объекта, и использование этих свойств для выражений привязки
  3. Вместо использования BoundField вы можете использовать поле шаблона и генерировать содержимое с помощью выражения <% =%>, которое обращается к элементу данных.
0 голосов
/ 10 марта 2009

Синтаксис [Имя]. [Имя] не поддерживается BoundField. Только простые имена свойств.

0 голосов
/ 09 марта 2009

Марк,

Я на 99,9% уверен, что вам придется обрабатывать это в коде, указанном в событии ItemDataBound для отдельной строки.

Помните, что вы можете получить весь объект базы данных из e.Item.DataItem

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