·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 通过实例学习Fireasy开发(下篇)

通过实例学习Fireasy开发(下篇)

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

通过实例学习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>