带动态控件的ListView将所有行更新为最后一行

时间:2015-08-24 17:44:42

标签: asp.net entity-framework listview formview asp.net-dynamic-data

我有一个页面,它通过各种FormViews和ListViews以一对多的关系显示来自多个表的数据。 ListView嵌套在FormView中并显示正确的数据但是,当我去更新时,ListView中的最后一条记录更新了ListView中的所有行及其内容,我无法弄清楚原因。

以下是一些代码:

<asp:FormView runat="server" ItemType="Table1" 
DefaultMode="Edit" DataKeyNames="Table1_key" 
SelectMethod="GetAll" OnItemCommand="ItemCommand" 
UpdateMethod="UpdateTables" RenderOuterTable="false">
    <EmptyDataTemplate>
        Cannot find the Episode with Episode key <%: FriendlyUrl.Segments[0] %>
    </EmptyDataTemplate>
    <EditItemTemplate>
           <asp:DynamicControl Mode="Edit" DataField="foo1" runat="server"/>
           <asp:Button runat="server" ID="UpdateButton" CommandName="Update" Text="Update" CssClass="btn btn-primary" />
    </EditItemTemplate>

    <asp:ListView ID="ListView1" runat="server" 
    DataKeyNames="Table2_key" SelectMethod="GetTable2"
    ItemType="Table2">
        <ItemTemplate>
             <tr>
                 <td>
                     //this doesn't update properly
                     <asp:DynamicControl runat="server" DataField="foo" ID="foo" Mode="Edit" />
                </td>
             </tr>
        </ItemTemplate>
    </asp:ListView>
</asp:FormView>

代码隐藏中的更新方法(用于更新FormView(即Table1),但不用于更新ListView内容(表2):

public void UpdateTables(int Table1_key)
    {
        using (_db)
        {
            var item = _db.Table1.Find(Table1_key);

            if (item == null)
            {
                // The item wasn't found
                ModelState.AddModelError("", String.Format("Item with id {0} was not found", Table1_key));
                return;
            }

            TryUpdateModel(item); // this updates the foo1 property

            if (ModelState.IsValid)
            {
                _db.SaveChanges();
            }

            var lesions = _db.Table2.Where(cl => cl.Table1_key == Table1_key);
            foreach (var lesion in lesions)
            {
                TryUpdateModel(lesion); //this updates ALL the children with the value I put in the last textbox.
            }

            _db.SaveChanges();
        }
    }

我找不到任何可以排序的东西,但肯定有人想和我做同样的事情,即显示来自多个表的数据,但只有一个更新按钮?谢谢!

0 个答案:

没有答案