问题
FineReport 复选框实现多个值查询(使用JS通过文本控件作为值传递实现)
具体方法
参考js注释
let months21 = _g().getWidgetByName('months2');//获取复选框控件
let months = _g().getWidgetByName('months');//获取文本框控件(用于转换值并进行值传递,此文本框名是动态参数名)
let months_value = months21.getValue();//获取复选框返回值(复选框返回值类型为字符串:以,逗号分隔)
//alert('months_value: '+months_value);
months_value = JSON.stringify(months_value);//转换object 类型为string,typeOf()
let months_arr = months_value.split(',');//以逗号拆分字符串到数组中
let arr_len = months_arr.length;//获取数组长度(复选框选择的个数)
let months22 = "(";//拼接字符串为sql查询使用(以in的方式查询)
//alert('arr_len: '+arr_len);
if(arr_len>=2){//获取1-(n-1)
for(i=0;i<arr_len-1;i++){
months22=months22 + months_arr[i]+"\",\"";
}
}
months22=months22 + months_arr[arr_len-1]+")";//获取最后一个
//alert("months2: "+months22);
if(months22.length<=4){//这里判断是否选择了值(原则上应该最开始判断)
months22="";
// alert('000000000');
}
months.setValue(months22);//赋值文本框刚刚处理好的值
_g().getWidgetByName('months').fireEvent('afteredit');//给文本框控件添加编辑完事件
sql查询语句:
SELECT * FROM `season2`
where 1=1
${if(len(months)<=0,"","and months in "+months+"")}