2013-05-30 4 views
0

Person вид модели:FormView на объекте с IEnumerable собственности

public class Person { 
    public string Name { get; set; } 
    public List<Person> Relatives { get; set; } 
    public bool IsSelected { get; set; } 
} 

У меня есть asp:FormView контроль на моей странице, которая содержит asp:GridView, который связан со свойством коллекции на моем Person классе.

<asp:FormView ID="ui_frmMain" runat="server" DefaultMode="Edit" OnCallingDataMethods="ui_frmMain_CallingDataMethods" SelectMethod="GetItems" UpdateMethod="UpdateItems" ItemType="Person"> 
    <EditItemTemplate> 
     <%# Item.Name %> 
     <asp:GridView ID="..." runat="server" DataSource='<%# Bind("Relatives") %>' ItemType="Person"> 
      <ItemTemplate> 
         <asp:TemplateField> 
          <ItemTemplate> 
           <asp:CheckBox ID="Selected" runat="server" Checked='<%# Bind("IsSelected") %>' /> 
          </ItemTemplate> 
         </asp:TemplateField> 
      </ItemTemplate> 
     </asp:GridView> 
    <EditItemTemplate> 
</asp:FormView> 

Я использую .NET 4.5 привязки данных, чтобы отправить мою модель обратно в UpdateMethod UpdateItems(Person person) однако Relatives свойство всегда нуль.

Есть ли способ:

  • Двухсторонний связывают с GridView
  • Bind CheckBox в GridView, чтобы в IsSelected собственности на модели
+0

Не могли бы вы предоставить более подробную информацию? –

+0

Я добавил еще несколько деталей - спасибо – Darbio

+0

Попробуйте привязать к объекту Person в поле с Проверено = "<% # Item.IsSelected)%>". Или иначе используйте Checked = "<% # BindItem.IsSelected)%>". – Neville

ответ

0

Перед тем, как сохранить изменения на обновленный объект «вручную» зацикливается и добавляет вложенные объекты коллекции один за другим.

Например:

UpdateItems(Person person) 
{ 
    // :(probably null for Relatives :(
    GridView myGrid = (GridView)FindControl("MyGrid"); 
    for (int i = 0; i < myGrid.Rows.Count; i++) 
    { 
     Textbox txtName = (Textbox)myGrid.Rows[i].FindControl(""); 
     CheckBox chkSelected = (Checkbox)myGrid.Rows[i].FindControl(""); 
     Person p = new Person(); 
     p.Name = txtName.Text; 
     p.IsSelected = chkSelected.cheked; 
     person.Relatives.Add(p); 
    } 
    myEntity.SaveChanges(); 

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

Смежные вопросы