Ошибка привязки списка объектов к Datagrid .Net WebForms - PullRequest
0 голосов
/ 20 марта 2012

Я использую C # и WebForms и сталкиваюсь с проблемой.У меня есть такой класс:

 public class Foo
 {
      public int _touchID;
      public string _touchName;
  }

Затем у меня есть объект Dao, который возвращает List из Foo, и я хочу связать этот список с DataGrid.

public List<Foo> getFooList()
    { //get my list and whatnot}

Я привязываю его к своему asp:DataGrid так:

TouchGrid.DataSource = dao.getFooList();
TouchGrid.DataBind();

Страница aspx выглядит так:

 <asp:DataGrid ID="TouchGrid" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundColumn HeaderText="ID" DataField="_touchID"></asp:BoundColumn>
        <asp:TemplateColumn HeaderText="Touch">
            <ItemTemplate>
                  <asp:Label ID="touchName" text='<%#DataBinder.Eval(Container.DataItem, "_touchname") %>' runat="server"/>
                  <%--<div class="touchDescriptionHidden"><%#DataBinder.Eval(Container.DataItem, "_description")%></div>--%>
            </ItemTemplate>
        </asp:TemplateColumn>
    </Columns>
</asp:DataGrid>

Когда я запускаю код, Я получаю исключение во время выполнения, потому что

Поле или свойство с именем '_touchID' не найдено в выбранном источнике данных.

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

Невозможно автоматически сгенерировать столбцы для выбранного источника данных

Я знаю, что что-то упустил, но не уверен, что именно.Если я отлаживаю строку DataBind и смотрю на DataSource, я вижу свои объекты очень хорошо:

TouchGrid.DataSource

 [0] - _touchID=1 | _name="stuff"  
 [1] - _touchID=2 | _name="otherStuff" 

Чтоздесь проблема?

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Механизм DataBinding работает не с полями классов, а со свойствами классов.

Таким образом, вам нужно преобразовать поля в свойства (также это запрошенный принцип ООП).

public class Foo
 {
      public int _touchID;
      public string _touchName;
  }

becomes

public class Foo
 {
      public int TouchID {get; set;}
      public string TouchName {get; set;}
  }
1 голос
/ 20 марта 2012
public class Foo
{
  public int TouchID {get; set;}
  public string TouchName {get; set;}
}

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

<asp:Label ID="touchName" 
text='<%# DataBinder.Eval(Container, "DataItem.TouchName") %>' runat="server"/>

Должно работать ..

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