上面描述的例子,就涉及到了一个父子窗体间的数据传递。如何实现这一数据传递,当然有很多方法。这里只是记录一下在这个例子中我使用的方法。我的方法是在子窗体点击“确定”按钮时,将操作结果构造成json格式的字符串,通过调用父窗体上的方法:opener.方法(),将json格式数据传递到父窗体上。
此例中构造的json数据类似如下格式:
{mydata:[
{bh:111,lx:1,df:10,bz:aaa},
{bh:112,lx:2,df:20,bz:bbb},
{bh:113,lx:2,df:30,bz:ccc}
]}
此处子项打分需要保持的分别是bh:编号;lx:类型;df:得分;bz:备注。
按照自己的需要,可以再自己增加需要保持的项。构造此json数据可以放在前台,也可以放在后台。
在此例中,我是放置后台的。代码如下:
复制代码 代码如下:
stringbuilder jsonbuilder = new stringbuilder();
jsonbuilder.append(@{\);
jsonbuilder.append(mydata);
jsonbuilder.append(\:[);
int k = bh.split(',').length + 1;
for (int i = 0; i {
tem += update kh_pfx set df = '+encriptlib.encriptlib.encodecode(convert.todouble(df.split(',')[i].tostring().trim()))+',;
tem += bz = '+bz.split(',')[i].tostring().trim()+',pfrxm = '+session[xm].tostring()+',;
tem += pfrbh = '+session[yhbh].tostring()+',pfrq = to_date('+datetime.now.toshortdatestring()+','yyyy-mm-dd');
tem += where bh = '+bh.split(',')[i].tostring().trim()+';
tem += 卐; //此处用此特殊的符号来分隔sql语句
jsonbuilder.append({\bh\: + \ + bh.split(',')[i].tostring().trim() + \ + ,);
jsonbuilder.append(\lx\: + \ + lx.split(',')[i].tostring().trim() + \ + ,);
jsonbuilder.append(\df\: + \ + df.split(',')[i].tostring().trim() + \ + ,);
jsonbuilder.append(\bz\: + \ + bz.split(',')[i].tostring().trim() + \ + },);
}
if(tem != )
{
jsonbuilder.remove(jsonbuilder.length - 1, 1);
jsonbuilder.append(]);
jsonbuilder.append(});
page.clientscript.registerclientscriptblock(gettype(), cg, );
}
@符号可以防止在jsonbuilder.tostring()后,转义字符“”的消失。
调用父窗体的getzxdf()方法,将json数据传递给父窗体。
下面给出子窗体加载时,绑定json数据的代码
复制代码 代码如下:
$(function() {
//加载时获取json,然后绑定打分结果
var obj = opener.getjson($(#txt_ycbh).val());
if($.trim(obj) != ){
obj = ( + obj + );
obj = eval(obj);
var data = obj.mydata;
$.each(data, function(i, n) {
if(n.lx == 1){
//直接打分类的绑定
$(#lx + n.bh).siblings(input).eq(0).val(n.df);
$(#lx + n.bh).siblings(input).eq(1).val(n.df);
$(#lx + n.bh).parent().parent().next().children().children(textarea).val(n.bz);
}
if(n.lx == 2){
//选项打分类的绑定
$(#lx + n.bh).siblings(input:text).eq(1).val(n.df);
$(#lx + n.bh).siblings(input:checkbox).each(function(){
if($.trim($(this).val()) == $.trim(n.df)){
$(this).attr(checked,true);
}
});
$(#lx + n.bh).parent().parent().parent().next().children().children(textarea).val(n.bz);
}
});
opener.getjson()方法是父窗体上用来向子窗体传递json数据的方法,代码如下:
复制代码 代码如下:
//通过编号获取对应评分项的子项打分结果的json字符串
function getjson(p_bh)
{
//$(#zxdf + p_bh).siblings(input).eq(1).val()中保存的就是子窗体传递给父窗体的json数据
return $(#zxdf + p_bh).siblings(input).eq(1).val();
}
