SNF快速开发平台MVC-高级查询组件

1.   高级查询

在我们做项目的时候经常想要按名称、编号进行查询数据,可在开发时会把最常用的查询条件写上,不常用的就不写了,也是因为把所有字段都写上太多了,布局不好看而且不实用。还有些查询条件几百年用那么一次,也不能用到时调整一下程序。基于这些考虑我们做的一个高级查询组件,可以把所有列都作为查询条件,把最常用的查询条件还正常放在页面上。点击高级查询按钮后,会有所以列作为筛选条件方便进行查找,别如果本次条件比较多还可以保存起来为一个查询方案,下次时可以方便再次查询。

1.1.      效果展示

图 2.1

高级查询页面

图 2.2

高级查询管理页面

图 2.3

1.2.      调用说明

1.2.1.    添加高级查询的公共js引用

<script src="~/Content/js/core/common.advanced_query.js"></script>

1.2.2.    定义查询事件

在定义查询的表格对象后,定义查询事件。下边的self.grid是datagrid的绑定对象。

this.executeQueryClick = function (post){

self.grid.queryParams($.extend(ko.toJS(self.queryForm), post));

}

1.2.3.    给表格绑定高级查询

通过下边的方式可以绑定高级查询,可以自动生成快速查询栏以及高级查询、清空的按钮

//通过拼html的方法,把选中的grid放进一个layout的center中,上方添加一个north,里边渲染快速查询方案以及方案配置的按钮

//_param = {

//gridName:"grid" //datagrid的id值

//grid:self.grid //需要高级查询的datagrid绑定对象

//_url:"/DEMO/DemoSingleTableAdvancedQuery/DemoSingleTableAdvancedQuery" //当前页面路径

//searchFunc:self.executeQueryClick //对应viewModel中的this.executeQueryClick方法

//flagSession:false //true表示从页面读取datagrid的editor属性自动生成查询列,false表示手动填写查询列

//flagCollapsed:true //true加载时查询栏展开,false表示合死,默认true

//GridViewName:"grid" //使用数据库中GridViewName存入值为GridViewName的数据进行高级查询,方便对现有数据进行处理,以及与cs程序互通。默认等于gridName,如为此值赋值,注意要同时修改controller中的查询列绑定值

//}

snf.advancedQueryLayout({

gridName:"grid",

grid :self.grid,

_url: "/DEMO/DemoSingleTableAdvancedQuery/DemoSingleTableAdvancedQuery",

searchFunc :self.executeQueryClick,

flagSession :false,

flagCollapsed: true

//GridViewName:"grid"

});

此方法应当在定义self.grid之后调用!

1.2.4.    如果不需要快速查询栏

通过此种方式可单独添加一个高级查询按钮,首先定义一个按钮,标签添加属性data-bind="click:advancedQueryClick"

this.advancedQueryClick=function(){

//只需要高级查询按钮,不需要快速查询栏时,调用此方法,参数如下,每个参数含义可参考2.2.3

snf.AdvancedQueryButtonClick({

gridName:"grid",

grid :self.grid,

_url: "/DEMO/DemoSingleTableAdvancedQuery/DemoSingleTableAdvancedQuery",

searchFunc :self.executeQueryClick,

flagSession :true,

//GridViewName:"grid"

});

}

1.2.5.    添加高级查询条件

flagSession=true时,会直接从editor中读取高级查询条件,如果flagSession=false,则要手动在controller中添加查询条件,代码如下

#region 获取高级查询的控件类型

[MvcMenuFilter(false)]

public dynamic GetAdvancedQueryColumns(RequestWrapper request)

{

var list = new List<KeyValuePair<string, object>>();

list.Add(new KeyValuePair<string, object>("grid", new object[]{

new string[]{ "DemoSingleTable.Code", "编号", "validatebox" },

new object[]{ "DropDownSingle", "数据字典", "combobox", this.GetItemsListCategoryBs("ItemsGender", "ItemCode", "ItemName")},

//new object[]{ "a", "a", "combotree",  SNFService.Instance.BaseItemDetailsService.GetDataTable(this.UserInfo, "ItemsTreeTest")},

new string[]{ "Num", "数量", "numberbox", "min:0,precision:2" },

new string[]{ "Money", "金额", "numberspinner", "min:0,precision:2" },

new string[]{ "IsCheckbox", "复选框", "checkbox" },

new string[]{ "DateBox", "日期", "daterange" },

new string[]{ "ApproveState", "状态", "lookup", "lookupType:‘ItemsAuditStatus‘" }

}));

return list.Find(s => s.Key == request["GridViewName"]).Value;

}

#endregion

此方法应写在BaseApiController的继承类下

其中参数

list是一个列表,里边可以包含多个键值对,每个键都对应着一个表格控件。

每个键值对代表一个表格的高级查询绑定,键值对的key是绑定高级查询的表格的id值,键值对的value是一个object对象,包含对应表格的全部的高级查询所需的查询条件。此方法会自动根据表格id进行匹配,返回当前表格高级查询所需的查询条件列表。每个返回的查询条件对象中,可根据实际情况包含三到四个元素,主要控件类型不同有所区分。

注意:js当中advancedQueryClick方法的参数gridName与上面方法list的key值"grid"还有request["GridViewName"]要保持一致。

第一个元素:列名。对应数据库中的字段,多表查询时可输入表名.列名,如DemoSingleTable.Code

第二个元素:查询条件中文名,如:编号

第三个元素:控件类型,现在支持validatebox(文本框),combobox(下拉),

numberbox(数字框),numberspinner(数字微调框),checkbox(复选框),daterange(日期范围),lookup(弹框控件),combotree(下拉树)

第四个元素:扩展属性,对combobox、combotree来说,第四个值传下拉需要展示的数据源;对numberbox,numberspinner,lookup来说,第四个元素之间写easyui控件的data-options里边需要填写的内容即可(可以参考easyui1.3.2的api);validatebox,daterange,checkbox不需要第四个元素

1.2.6.    在controller里的查询方法增加拼接查询条件的方法

SNFService.Instance.CreateService<BaseUserQuerysService, IBaseUserQuerysService>().GetParamQueryById(UserInfo, request, ref pQuery);

如图

图 2.4

1.2.7.    demo样例

程序路径:

/DEMO/ DemoSingleTableAdvancedQuery /DemoSingleTableAdvancedQuery

可在程序中按照此路径增加菜单查看

1.1.      注意事项

一、如果多表查询的高级查询,需要将flagSession定义为false,并且在controller中定义的对象中,把每一列定义为 表名.列名

如图,画框部分为应当使用的写法

图 2.5

二、一个页面多个表格用到高级查询时,如果有多个表格需要在同一controller中进行高级查询的调用,请将各个表格的id值取成不同的,无论是否出现在同一cshtml页面中。调用时,每一表格需在图2.5的GetAdvancedQueryColumns方法中单独添加一段查询条件的代码。如,我们还有一个id为gridlist的表格也要进行高级查询,那么就在return的前一行加上如下代码:

list.Add(new KeyValuePair<string, object>("gridlist", new object[]{

new string[]{ "DemoSingleTable.Code", "编号", "validatebox" },

new object[]{ "DropDownSingle", "数据字典", "combobox", this.GetItemsListCategoryBs("ItemsGender", "ItemCode", "ItemName")},

//new object[]{ "a", "a", "combotree",  SNFService.Instance.BaseItemDetailsService.GetDataTable(this.UserInfo, "ItemsTreeTest")},

new string[]{ "Num", "数量", "numberbox", "min:0,precision:2" },

new string[]{ "Money", "金额", "numberspinner", "min:0,precision:2" },

new string[]{ "IsCheckbox", "复选框", "checkbox" },

new string[]{ "DateBox", "日期", "daterange" },

new string[]{ "ApproveState", "状态", "lookup", "lookupType:‘ItemsAuditStatus‘" }

}));

时间: 2024-11-08 07:33:11

SNF快速开发平台MVC-高级查询组件的相关文章

SNF快速开发平台MVC-自由排序组件

1.    自由排序功能使用 在一些需要排序优先级的数据进行调整处理,如民族数据,在北方实施的时候汉族比较多,希望把汉族放在第一位.在蒙古实施项目时,蒙古族人最多把蒙古族放在第一选择位. 1.1.      效果展示 图 1.1 1.2.      调用说明 1.2.1.    定义自由排序模型 this.freeSort = new snf.freeSortOptionsModel();//自由排序模型 self.freeSort.set({ grid: self.grid, NameSpac

Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework

最近项目确实忙,但也是一直忙于有关项目和框架技术的事情,也一直致力于改善我的WInform开发框架.使得自己及客户使用起来更加方便,更加友好,更加高效. 在很多程序模块中都很常见,也是给客户扩展查询的一个很好的补充,由于我一直希望我的Winform开发框架能够精益求精,所以做了这个模块,希望对今后我自己所有的项目以及框架本身,都能高效的使用. 1.通用高级查询模块的用途及介绍 既然称之为通用查询模块,那么他就不能与具体的表字段有耦合关系,但是要实现具体的查询,必须通过某种方式进行属性传递,实现更

SNF快速开发平台3.0之--MVC 打印解决方案

SNF-MVC打印报表方案: 报表模块创建的过程如下: 利用Stimulsoft Reports客户端报表工具新增一个报表文件 *.mrt 当然你也可以拿好用的*.mrt模版文件进行复制出来一个,我常用这个方法. 按规定要求放于指定位置:Areas->Sys->Reports->BaseRole.mrt 打开对应的页面功能,点击打印即可,也可以在线编辑报表 第一步:配置打印按钮 第二步:配置打印方法 //打印 this.printClick = function () { snf.ope

SNF开发平台WinForm之十三-时间轴控件使用-SNF快速开发平台3.3-Spring.Net.Framework

一.显示效果如下: 二.在控件库里选择UCTimeAxis 拖拽到窗体里. 三.加入以下代码,在load事件里进行调用就可以运行了. #region 给时间轴控件加载数据 private void UCTimeAxisData() { //增加节点 List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(); list.Add(new KeyValueP

SNF开发平台WinForm之九-代码生成器使用说明-SNF快速开发平台3.3-Spring.Net.Framework

下面就具体的使用说明: 1.获取代码生成器的授权码(根据本机)-----还原数据库-------改config-----代码生成器 改代码生成器Config 2.登录代码生成器 3.查看是否连接成功 4.配置参数 下图,可在字段右键选择控件编码字段,控件名称字段 5.生成代码 6.启动程序 这个系列教程文档,欢迎转载: SNF开发平台WinForm之十-Excel导入http://www.cnblogs.com/spring_wang/p/6128604.html SNF开发平台WinForm之

SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework

9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Load事件或者Program入口的Main方法第一行代码加上如下代码: 注意:是主程序的 Load事件要加上调整自动更新程序的代码.要以模式打开窗口.如果没有差异会自动关闭升级窗口显示主窗口. 3.把下面目录里的文件拷贝到 应用程序的同级目录下: 4.配置WINFORMS应用程序目录下Updateli

SNF快速开发平台成长史

2017年:整体不管cs还是bs都进入到了快车道 5月份升级内容: 框架组和产品组正在全力升级中. 4月份升级内容: BS框架 页面显示效果的优化 BS框架 多平台切换 BS框架 OpenApi服务 BS框架 富文本控件集成了百度开源项目 参与人员: 王金斗.王翰智 3月份升级内容: CS框架 规则引擎 BS框架 规则引擎 参与人员: 王金斗.石瑀.张晓波 2月份升级内容: 代码生成器 BS选择控件代码生成 代码生成器 支持视图代码生成 代码生成器 增加数据库连接的配置功能 1月份升级内容: C

SNF开发平台WinForm之十-Excel导入-SNF快速开发平台3.3-Spring.Net.Framework

7.1运行效果: 2.Excel导入开发实现 2.1. 创建窗体,修改命名空间 新增的窗体命名“FrmImport表名”,这个导入窗口比较其它窗口会特殊一些,需要继承BaseFormImport父级窗体 2.2.在新建窗体中写方法 构造方法,是用来设置 导入的窗体名称,和下载导入模版名称,指定必填列. 2.3.AddItem在“导入数据”事件时会被调用,并且每一行数据转换成实体对象过来,我们可以对实体对象进行操作保存或者其它处理. 2.4.添加导入按钮 2.5.在调用按钮事件写入调用导入窗体代码

SNF快速开发平台MVC-EasyQuery-拖拽生成SQL脚本

在之前介绍一下EasyQuery工具SNF开发平台WinForm-EasyQuery统计分析-效果-非常牛逼的报表查询工具 Winform开发框架之图表报表在线设计器-报表-SNF.EasyQuery项目--SNF快速开发平台3.3-+Spring.Net.Framework Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework 本月在此组件上增加了新的功能,就是在数据源配置那里写SQL脚本时,可