条件查询
1.每个系统开发无非是为了人们方便去管理数据和使用数据了,使用数据当然少不了就是数据的查询了。如果连最基本的数据查询功能那就不行了,总不能还是一页页也去翻一页一页去查是吧,要是几十万条数据呢要查到何时何月呢,多浪费时间,查询、查询当然不是靠说的,不是你说什么查询就查询什么,计算机是不会听得懂的,查询当然是需要根据某个条件去查询的,条件查询就是已经存在有的数据中的某一个作为依据进行查询,举个列子吧好比如一个学生的信息有学院、年级、班级、学号、姓名。学院、年级、班级、学号、姓名这些就是查询的条件,比如我想知道某某学院的所有学生,我们只用“学院”作为条件就行了,就可以把该学院的所有学生信息出来了,如果还想知道到某学院下的某年级下的所有学生,只要在学院的基础加多一个年级作为条件,这样就可以把这个学院的该年级下的学生都查询出来了,往下面查的同理可得,甚至可以查到个人信息。
2.html部分
<label class="col-form-label mr-2" for="searchAcademeID">学院</label>
<select id="searchAcademeID" class="form-control form-control-sm mr-3 col-sm-2 col-md-1"></select>
我们看下一页面这里学院后面放了一个select这样的一个标签,现在的select标签里面是没有选项的,我们以前的用是在select标签里面放一个option这样的标签作为下拉列表中的选项,那么现在我们怎么把下拉框的数据放进来呢,首先就是查询出数据库面的有哪些学院,然后再把查出来的学院放到select里面去
3.下拉框数据的绑定
我们加载出来的就是这样的一个页面
进到页面之后只有学院这个下拉框是有数据的,后面的下拉框是没有的,当我们选定学院后年级下拉框的数据就出来了,不同的学院有不同的年级,首先要确认是学院,同理班级就由学院和年级决定了,在这里我们怎么把学院的内容查出来呢?在这用到createSelect这样一个已经封装好的方法,这个方法createSelect(selectId, url, value)有三个参数,第一个参数是需要查询的ID,第二个参数是请求的路径,第三个是显示的值.
页面代码写好了到控制器写查询的方法了,学院的就是简单一句代码就ok了
//学院下拉框数据绑定
createSelect("searchAcademeID", "selectAcademe");
在写这个方法之前我们还要创建一个实体类
public class SelectVo
{
public int id { get; set; }// 选中值
public string text { get; set; }// 显示值
}
为什么要要创建这样一个类呢?因为我们看到的是文字(text:显示值),而计算机是读不了这些文字的,而是通过读到ID获取到这一行数据显示出来的(id:选中值),把查询到的id都放在id里面,查到名称都放到text里面
public ActionResult selectAcademe()
{ //查询数据
List<SelectVo> listAcademe = (from tbAcademe in myModels.SYS_Academe
select new SelectVo
{
id = tbAcademe.AcademeID,//选中值
text = tbAcademe.AcademeName//显示值
}).ToList();
//List<SelectVo> listAcademe2 = myModels.SYS_Academe.Select(m => new SelectVo { id = m.AcademeID, text = m.AcademeName }).ToList();
//拼接"请选择"项
listAcademe = Common.Tools.SetSelectJson(listAcademe);
return Json(listAcademe, JsonRequestBehavior.AllowGet);
}
使用Linq语句对这个学院表进行查询出来,再进进行赋值,最后把这数据返回到页面。这里还一个问题,页面运行之后,下拉框哪里会默认一个值,把默认的那个数据查询显示了出来,假如我想一进入到页面加载是全部数据而不是默认的那个数据,有些时候我们是不需要根据这个默认值进行查询的,这个时候我们可以加一个请选择项给它,让它的的id为零这样子进入到页面先显示是请选择这个选项了,实际上查询出来的就是所有的信息了,这个操作要在数据返回页面之前我们要进行一个拼接“请选择”这个选项,就是在已经查出数据的基础上在前面加上这一项。
在拼接前要添加这样一个类
public static List<SelectVo> SetSelectJson(List<SelectVo> select)
{
//创建列表对象
List<SelectVo> list = new List<SelectVo>();
//创建实体对象
SelectVo selectVo = new SelectVo
{
id = 0,
text = "---请选择---"
};
//将实体对象添加到对象列表
list.Add(selectVo);
//将数据集添加到对象列表
list.AddRange(select);
return list;
}
下一级就是年级了,上下级存在关系,由上一级数据发生改变时,触发下一级下拉框数据的绑定,这里用了一个change改变事件,首先要获取到选中学院ID,然后同样是上面方法绑定年级下拉框,查询方法差不多就是加多一个参数和一个条件,传一个参数到控制器作为条件的匹配,查询到的数据再返回到页面来,最后清空一下班级下拉框
//学院下拉框数据改变,触发年级下拉框数据绑定
$("#searchAcademeID").change(function () {
//获取选中的学院ID
var academeId = $("#searchAcademeID").val();
//绑定年级下拉框
createSelect("searchGradeID", "selectGrade?AcademeID=" + academeId);
//清除班级下拉框
$("#searchClassID").empty();
});
同理班级下拉框也是同样使用相同的方法绑定数据