我有以下DataList -
<td>
<asp:Label ID="Label3" runat="server" Text="Exclude"></asp:Label>
<asp:DataList runat="server" ID="excludeTextBox">
<ItemTemplate>
<br />
<asp:TextBox ID="myTextBox" runat="server" Text='<%# Container.DataItem.ToString() %>'></asp:TextBox>
</ItemTemplate>
</asp:DataList>
<td>
<asp:Label ID="Label4" runat="server" Text="Active"></asp:Label>
<asp:DataList runat="server" ID="activeCheck" >
<ItemTemplate>
<br />
<asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Container.DataItem.ToString().Equals("1") %>' OnCheckedChanged="CheckBox1_CheckedChanged" AutoPostBack="true" />
</ItemTemplate>
</asp:DataList>
</td>
因此,这会为数据库中存在的每一行生成一个textBox和checkBox。
目前没有与dataList关联的保存操作,但是如果用户检查或取消选中其中一个复选框,则会调用Web服务并切换数据库表中的值。
我的问题是,在用户编辑了某些文本框中的文本并选中或取消选中某些复选框后,如何在save changes
按钮中捕获更改。因为如果项目是动态创建的,那么从技术上讲它们就不存在于页面上。我想这样做,而没有在dataList上的任何行上保存选项。
protected void saveChanges_Click(object sender, EventArgs e)
{
// capture all edits and call update webservice method.
}
答案 0 :(得分:1)
您基本上必须构建更改的表示。因为没有通用的解决方案,我没有任何代码,但这是过程:
随着项目的更改,您必须存储更改的内容。您可以在页面上存储隐藏变量中实际更改的行的索引,或将更改存储在JavaScript对象中。单击保存更改后,在客户端上循环执行这些更改,如果存在,则批量发送或一次发送一次。
如果您为每个已更改的索引创建了一个隐藏字段,其值为0,2,5
,则可以轻松找到这些项目,从表单中获取值并将其发送到Web服务。或者,您可以构建一个具有以下更改的JavaScript对象:
{ key: 2, checked: true, text:"My new text" }
将它们存储在一个数组中,然后通过Web服务将它们推送到服务器。