我有2个值类
public class UserType
{
public int ID;
public string TypeName;
}
public class User
{
public int ID;
public string UserName;
public UserType Type;
}
1处理阶级
public class Users
{
public User[] GetUsers()
{
//Retrive and re turn User array
}
public int Update(User user, User old_user)
{
//Update user
}
}
1个ListView和1个ObjectDataSource
<asp:ListView ID="lsvUser" runat="server" DataKeyNames="ID" DataSourceID="odsUser"
ItemPlaceholderID="plhItem" onitemupdating="lsvUser_ItemUpdating">
<LayoutTemplate>
<ul><asp:PlaceHolder ID="plhItem" runat="server"></asp:PlaceHolder></ul>
</LayoutTemplate>
<ItemTemplate>
<li>
<asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
<asp:Label ID="lblUserName" runat="server" Text='<%# Eval("UserName") %>'></asp:Label>
<asp:Label ID="lblTypeName" runat="server" Text='<%# Eval("Type.TypeName") %>'></asp:Label>
<asp:LinkButton ID="btEdit" runat="server" CssClass="button" CommandName="Edit" Text="Edit"></asp:LinkButton>
</li>
</ItemTemplate>
<EditItemTemplate>
<li class="editRow">
<asp:Textbox ID="txbUserName" runat="server" Text='<%# Bind("UserName") %>'></asp:Textbox >
<asp:Textbox ID="txbTypeName" runat="server" Text='<%# Bind("Type.TypeName") %>'></asp:Textbox >
</li>
</EditItemTemplate>
</asp:ListView>
<asp:ObjectDataSource ID="odsUser" runat="server" TypeName="BLL.Users" DataObjectTypeName="BLL.User" SelectMethod="GetUsers" UpdateMethod="Update" ConflictDetection="CompareAllValues" OldValuesParameterFormatString="old_{0}"></asp:ObjectDataSource>
当数据加载到ItemTemplate中时,ListView会解释Type.TypeName并正确绑定, 但是在更新记录时,我无法从旧值中检索old_user.Type。因此old_user.Name和old_user.ID具有值,但old_user.Type为null。
帮帮我。我已经搜索了大约2天,但找不到解决方案。我可以为这样的新用户绑定数据:
protected void lsvUser_ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
e.NewValues.Add("Type", new BLL.UserType() { TypeName = Convert.ToString(((TextBox)lsvUser.EditItem.FindControl("txbTypeName")).Text) });
}
但我不知道如何检索旧值(如何检索lblTypeName的值)。 帮我。如果在ItemUpdating事件中有一个不需要额外代码的解决方案,请教我。
谢谢。
答案 0 :(得分:0)
将Type.TypeName添加为DataKey,如下所示:
<asp:ListView ID="ListView1" runat="server" DataKeyNames="Type.TypeName">
在ItemUpdating事件处理程序中,检索键值如下:
string typeName = (string)e.Keys["Type.TypeName"];
我不肯定“Type.TypeName会起作用,但是它的某些变化应该有效,无论是Type.TypeName还是TypeName。