按钮单击时保存DataList中的所有更改

时间:2013-01-23 15:52:45

标签: c# asp.net web-services datalist

我有以下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>&nbsp;


</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.   
}

1 个答案:

答案 0 :(得分:1)

您基本上必须构建更改的表示。因为没有通用的解决方案,我没有任何代码,但这是过程:

随着项目的更改,您必须存储更改的内容。您可以在页面上存储隐藏变量中实际更改的行的索引,或将更改存储在JavaScript对象中。单击保存更改后,在客户端上循环执行这些更改,如果存在,则批量发送或一次发送一次。

如果您为每个已更改的索引创建了一个隐藏字段,其值为0,2,5,则可以轻松找到这些项目,从表单中获取值并将其发送到Web服务。或者,您可以构建一个具有以下更改的JavaScript对象:

{ key: 2, checked: true, text:"My new text" }

将它们存储在一个数组中,然后通过Web服务将它们推送到服务器。