最近学了MVC设计模式,在客户端方面也接触了一些东西,今天巧合发现checkbox有这样的功能,如果想要在客户端绑定一个表可利用foreach(System.Data.DataRow item in Model.Rows),当然我指的是MVC模式,Model指的是从控制器传过来的一个datatable,因为MVC里面有个router功能,它会自动匹配视图和控制器之间传递的数据,这里不做详细介绍……(MVC文章待几天发布)还是言归正传吧!
当我想在一个table里面批量修改里面的字段时(注:里面的字段存放在text里面),当然这些数据需要用foreach绑定每一行每一列,直到表尾,如果要在这个表中修改多个记录的多个字段需要怎么才能全部保存到数据库呢?此时,一个checkbox就能帮你忙,假如checkbox(>
例如:<input type="text" name="txtName<%=item["guid"]%>" value="<%=item["字段名"]%>"……这就可以改变某条记录的某个文本框。但是这样做的话,也就是每条记录都要执行一次更新,如果记录少的话,可以忽略不计,如果取出来的table有成千上万条数据的话,那就做了太多的无用功了……于是,新的想法出来了,如果能确定改了那个文本框就更新哪个记录,那么就可以提高效率了……那么就从改变开始想,改变改变,不就是Onchange事件嘛,于是在每个text里面加上了Onchange事件,但Onchange事件发生时记下那条记录的guid,这样就可以避免其他多余的记录被更新。于是想到了隐藏域的作用,可以通过表单提交到服务器……于是就做了一个专门存放触发Onchange事件的隐藏域<input type="hidden" name="hidGuid" value="" Onchage="GetGuid('<%=item["Guid"]%>') ;/>并且定义了一个js函数:(函数功能:把每个被更新过的记录的guid存放到隐藏域,用逗号分隔开)
<script>
function GetGuid(guid)
{
var HiddenGuid=document.getelementbyid("hidGuid");
HiddenGuid.value+=guid+',';
}
</script>
这样就可以把要改变的记录确定下来,然后在后台先把隐藏域的值拆成一个字符串数组,然后用foreach就可以遍历每个待修改的text,这样就实现了较完美的批量修改。
以上只代表个人思路想法,如果谁有更好的方法,欢迎讨论。