表格中的一些字段随着另一些字段动态改变
2012-12-01 20:56
323 查看
在设置评分中遇到这样一个问题:
如图:
列名中的“职业道德”都从数据库中获取,且项目不固定,随着数据库表的改动而改动。
请选择分值中为(ABCDE。。。不固定),每一项代表的分数也不固定,随着数据库表的改动而改动。
我们需要对姓名中选择的人进行评分(可多选)即选中人的对应项随着下拉框的改动而改动。
我们需要统计每个人的总分(比如A对应20分,B对应16分)。
下面我说一下做法:
首先,我们需要创建表头(我使用的是在后台绑定html代码,如果有更好的,欢迎大家交流):
上面的html代码看起来很烦,其实只要先在dreamweaver中写好,然后粘贴过来,把需要替换的字段替换上,做起了还是很容易的。(一个小小的技巧)
添加被测评人上篇博客已经说过了。
下面,通过下拉框的onchange事件,改变所对应单元格的值。
最终,呈现出来的就是我们所需要的表格,当然,我们可以再表格切换时用ajax将数据写入到数据库中,实现无刷新的测评,当然,因为初次评分为了达到一种直观的效果,没有使用该方法,而在重新测评时就用到了,这里用到挺多知识点,除了最常用的获取控件,还有添加表格删除单元格,设置下拉框的默认值等等。
最后,做界面往往不要依赖于给定的控件,虽然控件很简单很好用,但是,当我们的需求很灵活时,往往控件就满足不了我们了,试着手写一些东西,也是很有意义的。
如图:
列名中的“职业道德”都从数据库中获取,且项目不固定,随着数据库表的改动而改动。
请选择分值中为(ABCDE。。。不固定),每一项代表的分数也不固定,随着数据库表的改动而改动。
我们需要对姓名中选择的人进行评分(可多选)即选中人的对应项随着下拉框的改动而改动。
我们需要统计每个人的总分(比如A对应20分,B对应16分)。
下面我说一下做法:
首先,我们需要创建表头(我使用的是在后台绑定html代码,如果有更好的,欢迎大家交流):
string strScoreHTML; strScoreHTML = ""; //通过循环,把选项ABCD填充到html中,再把每个选项的分值设置成select的value for (int i = 0; i < dattabScore.Rows.Count; i++) { strScoreHTML = strScoreHTML +"<option value=\"" + dattabScore.Rows[i][3] +"\">" + dattabScore.Rows[i][1] + "</option>"; } strScoreHTML = strScoreHTML + "</select>"; MgrSetAssessProject tabAssess = new MgrSetAssessProject(); //定义DataTable表datAssess,用于查询所有可用考核项目信息 DataTable dattabAssess = new DataTable(); dattabAssess = tabAssess.QueryAllAssessProject(); string strHTML; //设置表格的第一列表头 strHTML = "<table id=\"criticsTab\" cellspacing=\"0\" ><trclass=\"tabTitle\"><td class=\"tabRowName\">姓名</td>"; //通过循环,把其他表头设置好,注意,这里要把之前设置上的下拉框添加进入。 //注意,添加下拉框是每一个要加上下拉框的onchange事件,为以后改变下拉框的值而改变所选人对应的分值做准备。 for (int i = 0; i < dattabAssess.Rows.Count; i++) { strHTML = strHTML + "<td><label id=\"assess" + (i + 1) + "\"title=" + dattabAssess.Rows[i][0].ToString() + "></label>" + dattabAssess.Rows[i][1] + " <select id=\"" + (i + 1) +"\" onchange=(seloption(this))><optionvalue=\"initScore\" selected=\"selected\">请选择分值</option>"+ strScoreHTML + "</td>"; } //设置总分 strHTML = strHTML + "<td class =\"tabAllScore\">总分</td></tr></table>"; //在后台建立id为tabContent的div,把以上THML代码填充进入,就把表格设置好了。 tabContent.InnerHtml = strHTML;
上面的html代码看起来很烦,其实只要先在dreamweaver中写好,然后粘贴过来,把需要替换的字段替换上,做起了还是很容易的。(一个小小的技巧)
添加被测评人上篇博客已经说过了。
下面,通过下拉框的onchange事件,改变所对应单元格的值。
//切换下拉框事件 function seloption() { //获取table var tab1 = document.getElementById("criticsTab"); //table中所有的单元格数 cell = tab1.cells.length; //table 中行数 n = tab1.rows.length; //table 中的列数 cell = cell / n; //获取当前下拉框 var srcElem = document.activeElement //取到当前焦点控件 var selectIndex = srcElem.selectedIndex; //获得当前下拉菜单所选中的索引值 //获取项目编号 var assess = document.getElementById("assess" + srcElem.id); var assessID = assess.title //获取分数 var accessAllScore = srcElem.value; //姓名列中对应的人员组 var checkbox = document.getElementsByName("selCheck"); //循环checkbox,判断是否被选中 //判断是否选中,选中则给每一项赋值 for (i = 0; i < checkbox.length; i++) { //被选中的checkbox if (checkbox[i].checked) { //alert(i); //改变单元格的值(这里我使用的是先删除单元格,然后再添加,没有找到直接修改的方法) tab1.rows[i + 1].deleteCell(srcElem.id); //这里填充单元格填充了一个label用来放分数,为了方便后面的计算总分,在把他的visible设置成不可见即可 tab1.rows[i + 1].insertCell(srcElem.id).innerHTML = '<label name = "assessScore"id =score' + checkbox[i].value + srcElem.id + '>' + srcElem.value +'</label>' + srcElem[selectIndex].text + ''; document.getElementById("score" + checkbox[i].value +srcElem.id ).style.display = "none"; //设置下面的table不可见 var AllScore = 0; //计算总分 for (j = 1; j < cell-1 ; j++) { //获取上面建立的table,然后根据table的outerText属性来获取分值,将本行的分值全部加起来,即为总分 var score =document.getElementById("score" + checkbox[i].value + j +""); AllScore = Number(AllScore) + Number(score.outerText) } //填充总分项 tab1.rows[i + 1].deleteCell(cell-1); tab1.rows[i + 1].insertCell(cell-1).innerHTML = '<label name ="assessScore" id =score' + checkbox[i].value + srcElem.id + '>' +AllScore + '</label>'; var criticsID = checkbox[i].value; } } //把下拉框改为默认选项(也可以不设置,看需求而定) srcElem.options[0].selected = true; }
最终,呈现出来的就是我们所需要的表格,当然,我们可以再表格切换时用ajax将数据写入到数据库中,实现无刷新的测评,当然,因为初次评分为了达到一种直观的效果,没有使用该方法,而在重新测评时就用到了,这里用到挺多知识点,除了最常用的获取控件,还有添加表格删除单元格,设置下拉框的默认值等等。
最后,做界面往往不要依赖于给定的控件,虽然控件很简单很好用,但是,当我们的需求很灵活时,往往控件就满足不了我们了,试着手写一些东西,也是很有意义的。
相关文章推荐
- 对某些字段(字段名里面一些字符随着月份儿改变的)进行处理
- Ajax简单示例之改变下拉框动态生成表格
- 使用前端框架后js动态改变样式的一些问题(select)
- 鼠标拖动动态改变表格的宽度的js脚本 兼容ie/firefox
- 基于Jqurey的下拉框改变动态添加和删除表格实现代码
- [Javascript] 不刷新动态改变表格(Table)行数
- 实现div的大小随着内容进行动态改变
- 表体某个页签的字段名字怎么动态改变
- jquery动态添加的表格行鼠标经过时候改变行的背景颜色
- 动态改变表格的行数列数(添加表格)
- 鼠标拖动动态改变表格的宽度的js脚本 兼容ie/firefox
- jquery easyui dataGrid动态改变排序字段名
- 基于Jqurey的下拉框改变动态添加和删除表格实现代码
- 一些可变长度对象(string对象、vector对象 ...)作为结构体或类的成员,会不会动态改变结构体或类所定义的变量的大小呢?
- Ajax简单示例之改变下拉框动态生成表格
- 报表中某列对应的字段动态改变
- 实现可动态改变宽度的表格简单方法
- 转:javascript 动态改变表格列的宽度!
- jqgrid 的一些操作 动态增加列 用本地 数据 修改表格
- jquery easyui dataGrid动态改变排序字段名的方法