Привязка списка к GridView. GridView не может найти мое свойство!

#c# #data-binding #gridview #ienumerable

#c# #привязка данных #gridview #ienumerable

Вопрос:

Учитывая:

У меня есть класс:

 class MyObject
{
  public string Field1;
  public string Field2;
}
  

и следующий код:

 var list = SomeFunction(); // returns a valid List<MyObject>
gvMyList.DataSource = list;
gvMyList.DataBind(); // THIS THROWS AN EXCEPTION
  

И элемент управления GridView на странице aspx:

 <asp:GridView ID="gvMyList" AutoGenerateColumns="false" runat="server">
  <Columns>
    <asp:TemplateField HeaderText="Field 1">
      <ItemTemplate>
        <asp:Label ID="lblCourse" runat="server" Text='<%# Eval("Field1")   " "   Eval("Field2") %>'></asp:Label>
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>
  

Проблема:

Итак, я знаю, что если что-то реализуется, IEnumerable то это может быть передано DataSource свойству. Насколько я знаю, если вы передадите DataSource список, то у меня должен быть доступ к MyObject свойствам с помощью Eval("Field1") или Eval("Field2") . Здесь дело не в этом. Вместо этого я получаю исключение:

DataBinding: 'MyObject' does not contain a property with the name 'Field1'.

Ответ №1:

Ваш класс содержит поля, а не свойства; Вы должны определить свойства таким образом :

  class MyObject
    {
      public string Field1 { get; set; }
      public string Field2 { get; set; }
    }