我正在开发一个允许用户输入/编辑多条记录的asp.net页面。我使用了一个Repeater控件来显示每个记录的输入字段。我想要添加一个“添加”按钮,当点击该按钮时,可以插入一组新的空白记录输入字段。用户应该能够输入新记录,然后多次单击添加按钮继续添加新记录。然后,当用户单击保存按钮时,这些新记录将与现有记录的更改一起保存。如果用户没有点击保存,则应丢弃记录并不写入数据库中。
是否有办法在Repeater控件中实现此“添加”功能呢?
是否有办法在Repeater控件中实现此“添加”功能呢?
这个问题有一个相当简单的解决方案。假设您有某种视图模型来暂时保存用户输入的数据,您可以在重复器使用作为数据源的集合中添加一个额外的“空白”视图模型。在保存时,您可以简单地将所有存在于您的视图模型中的修改保存到数据库中。一个可能的例子是:
protected void btnAdd_OnCommand(object sender, EventArgs e)
{
List<Item> items = (List<Item>)this.ItemRepeater.DataSource;
items.Add(new Item() { Id = -1 });
this.ItemRepeater.DataBind();
}
protected void btnSave_OnCommand(object sender, EventArgs e)
{
List<Item> items = (List<Item>)this.ItemRepeater.DataSource;
foreach (Item itm in items)
{
if (itm.Id == -1)
{
//Save New Item
}
else
{
//Update existing item
}
}
}
这里的主要注意点是,您必须使用视图模型更新重新填充ItemRepeater的数据源,以便保留/显示用户所做的任何更改。
DataBind
而不会丢失现有的实时更改吗?或者你是在说“始终存储实时更改,以便DataBind
重新绑定当前值”? - Mark Hurd.DataBind
,则会为您保留“实时”的设置。 - Mark Hurd