·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 通过实例学习Fireasy开发(下篇)
本文目录
通过实例学习Fireasy开发(上篇)
通过实例学习Fireasy开发(中篇)
通过实例学习Fireasy开发(下篇)
通过实例学习Fireasy开发(补充/示例代码下载)
一、员工列表页面
EmployeeList.aspx页面的需求是这样的,左边是部门树,右边是员工列表,点击部门节点后右边显示该部门下面的员工,同时提供岗位、生日期间查询。
对table:#dg处进行改造,加下一个treegrid列表:
<div data-options="region:'center',border:false"> <div id="layout" class="easyui-layout" data-options="fit:true,border:false"> <div data-options="region:'west',border:false,split:true" style="width:220px"> <table id="dgDept"> </table> </div> <div data-options="region:'center',border:false"> <table id="dg"> </table> </div> </div> </div>
然后在js里加入一个loadDepts函数,并且一开始就加载部门树:
$(function () { loadDepts(); loadData(); }) function loadDepts() { $('#dgDept').treegrid({ url: 'DeptList.ajx/GetDepts', fit: true,//自动填充 idField: 'id', treeField: 'text', columns: [[ { field: 'text', title: '部门', width: 180 } ]], onClickRow: function (row) { $('#dg').datagrid({ queryParams: { deptNo: row.attributes.no } }); } }) }
修改loadData函数,把不需要的列移除掉,然后,浏览EmployeeList.aspx页面,显示如下:
loadDepts函数里,treegrid的onClickRow事件里,datagrid将使用no作为条件筛选员工数据。修改EmployeeList.aspx.cs类中的GetEmployees方法,增加一个参数deptNo,如下:
/// <summary> /// 根据查询条件获取员工。 /// </summary> /// <param name="deptNo">部门编码。</param> /// <param name="keyWord">关键字</param> /// <returns></returns> [ExceptionBehavior(true)] public object GetEmployees(string deptNo, string keyword) { var pager = EasyUIHelper.GetDataPager(); var sorting = EasyUIHelper.GetSorting(); using (var context = new DbContext()) { var list = context.Employees .Segment(pager) //.OrderBy(sorting) .AssertWhere(!string.IsNullOrEmpty(deptNo), s => s.Dept.No.StartsWith(deptNo)) //.AssertWhere(!string.IsNullOrEmpty(keyword), s => s.Name.Contains(keyword)) .ToList(); return EasyUIHelper.Transfer(pager, list); } }
AssertWhere是一个扩展方法,来自Fireasy.Common.Extensions,如果deptNo不为空的时候,使用Dept这个关联属性的No进行like查询,也就是说TB_EMPLOYEE join 上 TB_DEPT查询。
EasyUIHelper的GetDataPager用于构造easyui-datagrid传递过来的两个分页参数,构造出一个分页对象pager,Linq再使用Segment扩展方法将pager传进去分页。最后,使用Transfer方法把结果转换为 { total: 10, rows: [] } 这样的json结构。
增加额外的查询条件。
我们在EmployeeList.aspx的query区加入日期和岗位查询条件。
<div class="query"> <table> <tr> <td>出生日期</td> <td><input id="txtStartTime" class="easyui-datebox" style="width:110px" /></td> <td>至</td> <td><input id="txtEndTime" class="easyui-datebox" style="width:110px" /></td> <td>岗位</td> <td><input id="txtPost" class="easyui-combobox" data-options="url:'EmployeeList.ajx/GetPosts',valueField:'Value',textField:'Name',panelHeight:'auto'" style="width:110px" /></td> <td>快速查询</td> <td> <input id="txtKeyword" type="text" class="easyui-textbox enterQuery" data-options="PRompt:'名称或拼音首字母'" style="width: 160px" /></td> <td><a class="easyui-linkbutton" onclick="query()" data-options="iconCls:'icon-search'">查询</a> </td> </tr> </table> </div>
在EmployeeList.aspx.cs里增加方法GetPosts,该方法用于获取岗位代码,岗位代码我们先用枚举来表示。
枚举定义在WebApplicaiton1.Data的Enums.cs里。对了,还需要一个性别的枚举,这个时候一起定义好了。
public enum PostKinds { [EnumDescription("首席执行官")] CEO, [EnumDescription("首席财务官")] CFO, [EnumDescription("首席技术官")] CTO, [EnumDescription("首席运营官")] COO, [EnumDescription("首席信息官")] CIO, } public enum Sex { [EnumDescription("男")] Male, [EnumDescription("女")] Female }
EnumDescriptionAttribute是用于标记中文描述的特性。
GetPosts方法就是将该中文描述和枚举值返回给前台。
public object GetPosts() { var list = typeof(PostKinds).GetEnumList() .Select(s => new { Value = s.Key.ToString(), Name = s.Value }) .ToList(); list.Insert(0, new { Value = "", Name = "--全部--" }); return list; }
修改EmployeeList.aspx中的query函数,加入查询条件:
//查询 function query() { $('#dg').datagrid('unselectAll'); $('#dg').datagrid({ queryParams: { startTime: $('#txtStartTime').datebox('getValue'), endTime: $('#txtEndTime').datebox('getValue'), post: $('#txtPost').combobox('getValue'), keyword: $('#txtKeyword').val() } }); }
相应的在EmployeeList.aspx.cs中,修改GetEmployees方法,加入这三个参数。
/// <summary> /// 根据查询条件获取员工。 /// </summary> /// <param name="deptNo">部门编码。</param> /// <param name="startTime">开始日期。</param> /// <param name="endTime">结束时间。</param> /// <param name="post">岗位类别。</param> /// <param name="keyword">关键字</param> /// <returns></returns> [ExceptionBehavior(true)] public object GetEmployees(string deptNo, DateTime? startTime, DateTime? endTime, PostKinds? post, string keyword) { var pager = EasyUIHelper.GetDataPager(); var sorting = EasyUIHelper.GetSorting(); using (var context = new DbContext()) { var list = context.Employees .Segment(pager) //.OrderBy(sorting) .AssertWhere(!string.IsNullOrEmpty(deptNo), s => s.Dept.No.StartsWith(deptNo)) .AssertWhere(startTime != null, s => s.Birthday >= startTime.Value.StartOfDay()) .AssertWhere(endTime != null, s => s.Birthday <= endTime.Value.EndOfDay()) .AssertWhere(post != null, s => s.Post == post) .AssertWhere(!string.IsNullOrEmpty(keyword), s => s.Name.Contains(keyword)) .ToList(); return EasyUIHelper.Transfer(pager, list); } }
注意,由于日期可以置空,所以参数中应使用可空类型,然后使用AssertWhere扩展方法来拼接LINQ。
参数post使用了PostKinds枚举类型,我们需要修改一个Employee实体类型的Post属性类型由原来的int?改成PostKinds:
/// <summary> /// 获取或设置职务。 /// </summary> public PostKinds Post { get { return (PostKinds)GetValue(EpPost); } set { SetValue(EpPost, value); } }
好了,员工列表页面至此就做完了。
二、员工编辑页面
打开EmployeeEdit.aspx,调整表单区域如下:
<% var Html = new HtmlHelper<Webapplication.Data.Model.Employee>