0

人视图模型:

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的两种方式绑定
  • 将gridview的CheckBox绑定到IsSelected模型上的属性
4

1 回答 1

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();

这种方法很糟糕,但我还没有看到任何可以识别嵌套集合中的变化的东西。

于 2014-01-14T00:46:53.233 回答