最近在做考试系统的模板,学到了如何写级联查询,这里简单的介绍一下,如果有人在这方面有困扰,可以稍稍借
鉴一下~
什么是级联查询
大家做过机房收费系统应该知道,有一个组合查询,级联查询类似组合查询,不过有些微的区别。
组合查询 : A + B + C => answer.
级联查询: A => B => answer.
如何实现级联查询
实现级联查询的逻辑其实很简单,触发A的同时加载B,触发B的同时得到answer。看看我正在写的考试系统模板
的级联查询界面:
所以在写级联查询的时候,需要先加载开考的学院,然后根据学院ID,加载课程,并通过课程和题型的对应表
tr_coursemapname查询到课程和题型的映射名,显示到界面上。整个这套级联查询的逻辑就是这样的,所以下边就
是代码部分了!
加载学院信息:
html代码:
<select id="academy" class="easyui-combobox" name="state" style="width: 150px; margin-right: 100px;"@* 级联查询 *@ url="/BuildTemplate/academy"; valueField="id" textField="value" required="true" editable="false" > </select>
controller代码:
public string academy() { //测试所用的假数据 List<Combox> comboxlist = new List<Combox>(); Combox combox = new Combox(); combox.id="123456"; combox.value="经济学院"; Combox combox1= new Combox(); combox1.id="1456"; combox1.value = "生科学院"; Combox combox2 = new Combox(); combox2.id="12346"; combox2.value="数信学院"; Combox combox3 = new Combox(); combox3.id="12345"; combox3.value="体育学院"; comboxlist.Add(combox1); comboxlist.Add(combox2); comboxlist.Add(combox3); JavaScriptSerializer servializer = new JavaScriptSerializer(); return servializer.Serialize(comboxlist); }
这样就完成加载考试学院了,然后就是触发这个combobox,然后加载课程信息:
html代码:
@* 2.根据学院信息加载课程信息 *@ 课程: <select name="state" id="Course" class="easyui-combobox" style="width: 150px;" @* 级联查询 *@ url="/BuildTemplate/test1"; valueField="id" textField="value" required="true" editable="false" > </select>
//获取课程信息 public string Course(string val) { String value = val; List<Combox> comboxlist = new List<Combox>(); Combox combox = new Combox(); combox.id = "1"; combox.value = "数学"; Combox combox1 = new Combox(); combox1.id = "2"; combox1.value = "汉语言文学"; Combox combox2 = new Combox(); combox2.id = "3"; combox2.value = "大学英语"; Combox combox3 = new Combox(); combox3.id = "4"; combox3.value = "大学体育"; comboxlist.Add(combox1); comboxlist.Add(combox2); comboxlist.Add(combox3); JavaScriptSerializer servializer = new JavaScriptSerializer(); return servializer.Serialize(comboxlist); }然后最重要的就是javascript了:
<script type="text/javascript"> $(function () { var val=""; var id = ""; $('#academy').combobox({ //触发学院的select事件 onSelect: function () { val = $('#academy').combobox('getValue'); //获取学院的id $('#Course').combobox({ valueField: 'id', textField: 'value', editable: false, url: '/BuildTemplate/Course?val=' + val, }); } }); $('#Course').combobox({ //触发课程的select事件 onSelect: function () { id = $('#Course').combobox('getText'); $.ajax({ type: "post", url: '/ConfigurationQue/QueryExamCourseName', async: false, data: { "courseid": id }, dataType: 'json', success: function (data) { try { var coursename = data[0].ExamCourseName; $("#mapname").val(coursename); } catch (Exception) { alert("无映射名记录,请输入映射名!"); $("#mapname").val(""); $("#mapname").focus(); } } }); } }) }) </script>然后就是通过课程ID加载映射名啦!
controller代码:
public JsonResult mapname(String id) { String value = id; JsonResult js = new JsonResult(); js.Data = value; return js; }
这样整个级联查询就OK了!看看效果!
当当当当!!!肿么样!是不是棒棒哒?!