我有一个页面,它通过各种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();
}
}
我找不到任何可以排序的东西,但肯定有人想和我做同样的事情,即显示来自多个表的数据,但只有一个更新按钮?谢谢!