`
Everyday都不同
  • 浏览: 723718 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

根据用户查询选择动态显示表的数据列

阅读更多
有的时候,当用户选择查询条件时碰到查询结果列表字段太多时,常常会想要选择性地只显示部分由自己选择的字段.现在为了达到根据用户选择动态显示查询结果的列的效果,可以在查询条件上构建一个checkboxlist,当用户勾选某几个字段时,查询结果的列只显示用户选中的这几个字段.另外,为了达到友好的用户体验,如果用户一个字段都没选中,会有提示的效果.
(注:本实例只给出部分关键的代码)

step1.部分关联的jsp页面代码
<tr>
			<td  class="td_title" nowrap="nowrap">统计显示列<font color="red">*</font></td>
			<td class="detail">
				<input type="checkbox" name="reportSearchVO.rowFields" value="<%=RowFieldVO.ROW_FIELD_DATE %>" />日期 
				<input type="checkbox" name="reportSearchVO.rowFields" value="<%=RowFieldVO.ROW_FIELD_SP %>" />运营商
				<input type="checkbox" name="reportSearchVO.rowFields" value="<%=RowFieldVO.ROW_FIELD_CP %>" checked="checked"/>合作商
				<input type="checkbox" name="reportSearchVO.rowFields" value="<%=RowFieldVO.ROW_FIELD_SERVICE %>"/>业务
				<input type="checkbox" name="reportSearchVO.rowFields" value="<%=RowFieldVO.ROW_FIELD_PROVINCE %>"/>省份
				<input type="checkbox" name="reportSearchVO.rowFields" value="<%=RowFieldVO.ROW_FIELD_FLAG %>"/>明细
			</td>
		</tr>
			<tr align="center">
			<td colspan="2" nowrap="nowrap" align="center">
				<span style="PADDING-RIGHT: 10px;">
					<input class=button type=submit value="查询" onclick="return Verfidy();"/>
		   			<input class=button type=button onclick="removeall()" value="清空" /></span></td>
		</tr>


注:比如选择运营商、业务、省份,则reportSearchVO.rowFields={2,4,5}

step2.相关的js代码
function Verfidy() {		
		var tmp = document.getElementsByName("reportSearchVO.rowFields");
		var field=null;
		for (var i=0;i<tmp.length; i++) {
			if (tmp[i].checked){
				field=tmp[i].value;
				break;
			}
		}
		alert("field:" + field);
		if (field==null){
			alert("请至少选择一项统计列!");
			return false;
		}
		document.getElementById("reportForm").action=action;
		return true;
	}


step3.reportSearchVO对应的(相关列显示)属性如下:
 
private String[] rowFields;
  private RowFieldVO rowFieldVO = new RowFieldVO();

其中,RowFieldVO:
  public static final int ROW_FIELD_DATE = 1;
	public static final int ROW_FIELD_SP=2;
	public static final int ROW_FIELD_CP=3;
	public static final int ROW_FIELD_SERVICE=4;
	public static final int ROW_FIELD_PROVINCE = 5;
	public static final int ROW_FIELD_FLAG =6;




	/**
	 * 0: 不显示;1: 显示
	 */
	private int isShowDate = 0;
	private int isShowProvince = 0;
	private int isShowSP=0;
	private int isShowCP = 0;
	private int isShowService =0;
	private int isShowFlag =0;
	
	/**
	 * 判断并获得要统计显示的列
	 * @param rowFields
	 * @return
	 */
	public void setShowRowField(String[] rowFields){
		for (String rowField : rowFields) {
			int rowValue = Integer.valueOf(rowField);
			if (rowValue == RowFieldVO.ROW_FIELD_DATE) {
				isShowDate = 1;
			}else if (rowValue == RowFieldVO.ROW_FIELD_PROVINCE) {
				isShowProvince = 1;
			}else if(rowValue == RowFieldVO.ROW_FIELD_SP){
				isShowSP = 1;
			}else if (rowValue ==RowFieldVO.ROW_FIELD_CP){
				isShowCP = 1;
			}else if (rowValue ==RowFieldVO.ROW_FIELD_SERVICE) {
				isShowService = 1;
			}else if (rowValue ==RowFieldVO.ROW_FIELD_FLAG) {
				isShowFlag = 1;
			}
		}
	}


step4.查询的action和service
action:
reportResultVOList = reportService.getReportList(reportSearchVO);


service:
reportSearchVO.getRowFieldVO().setShowRowField(reportSearchVO.getRowFields());//引用step3中rowFieldVO的setShowRowField方法判断哪些字段是需要显示的


step5.查询的sql语句(ibatis)
SELECT '0',
				<isEqual property="rowFieldVO.isShowDate" compareValue="1">
				b.dates,
				</isEqual>
				<isEqual property="rowFieldVO.isShowDate" compareValue="0">
				      null dates,
			    </isEqual>
			    <isEqual property="rowFieldVO.isShowSP" compareValue="1">
				b.spId,
				</isEqual>
				<isEqual property="rowFieldVO.isShowSP" compareValue="0">
				      null spId,
			    </isEqual>
			    <isEqual property="rowFieldVO.isShowCP" compareValue="1">
				b.cpId,
				cp.username cpName,
				</isEqual>
				
			    <isEqual property="rowFieldVO.isShowCP" compareValue="0">
			          null cpId ,
				      null cpName,
			    </isEqual>
			    
				<isEqual property="rowFieldVO.isShowService" compareValue="1">
				b.serviceCode,
				service.name serviceName,
				</isEqual>
				
				<isEqual property="rowFieldVO.isShowService" compareValue="0">
				null serviceCode,
				null serviceName,
				</isEqual>
				<isEqual property="rowFieldVO.isShowProvince" compareValue="1">
				b.provinceId,
				province.provinceName,
				</isEqual>
				<isEqual property="rowFieldVO.isShowProvince" compareValue="0">
				null provinceId,
				null provinceName,
			    </isEqual>
FROM XXX WHERE 
				 b.dates BETWEEN #beginDate# AND #endDate#		             
				
				 <isGreaterThan property="spId" compareValue="0">
						AND b.spId=#spId#
				</isGreaterThan>
				<isGreaterThan property="cpId" compareValue="0">
						AND b.cpId=#cpId#
				</isGreaterThan>	
				<isGreaterThan property="serviceCode" compareValue="0">
						AND b.serviceCode=#serviceCode#
				</isGreaterThan>
				<isNotEmpty property="provinceId" >
						AND b.provinceId=#provinceId#
				</isNotEmpty>


step6.动态显示查询结果的页面
表头:
<s:if test="reportSearchVO.rowFieldVO.isShowDate==1"><td class="td_title" nowrap="nowrap">日期</td></s:if>
				<s:if test="reportSearchVO.rowFieldVO.isShowSP==1"><td class="td_title" nowrap="nowrap">运营商</td></s:if>
				<s:if test="reportSearchVO.rowFieldVO.isShowCP==1"><td class="td_title" nowrap="nowrap">合作商</td></s:if>
	      		<s:if test="reportSearchVO.rowFieldVO.isShowService==1"><td class="td_title" nowrap="nowrap">业务</td></s:if>
				<s:if test="reportSearchVO.rowFieldVO.isShowProvince==1"><td class="td_title" nowrap="nowrap">省份</td></s:if>
(注:表中省略):


这样,就达到了由用户选择动态显示所选字段的效果.step3是本业务的核心代码.另外注意<s:if test/>标签的使用.
  • 大小: 24.7 KB
分享到:
评论

相关推荐

    vue根据数据动态展示页面

    vue根据数据动态展示页面,动态组件,动态表格,动态弹窗等,仅供静态数据进行页面展示。vue根据数据动态展示页面,动态组件,动态表格,动态弹窗等,仅供静态数据进行页面展示。vue根据数据动态展示页面,动态组件...

    Finereport数据集参数实现动态列报表模板 + 函数JS代码

    通过设置数据集参数,我们可以将用户的选择(比如需要显示的列)作为输入,动态地调整数据集的查询语句。在“实现动态列sql.txt”文件中,应该包含了根据参数构建SQL查询的逻辑。通常,这会涉及到字符串拼接或者使用...

    pb 动态创建数据窗口列

    pb 动态创建数据窗口列,只要修改sql语句就可可以了

    jgrid实现列的动态

    本文将深入探讨如何在jGrid中实现列的动态显示和配置,这是在处理复杂数据展示时非常有用的功能。 ### jGrid中的动态列显示 动态列显示意味着根据特定条件或用户选择来调整表格中显示的列。这不仅提高了用户体验,...

    grid数据窗口选择显示列

    - 在某些情况下,你可能希望根据用户的选择动态显示或隐藏列。为此,可以编写事件处理程序,例如在“BeforeOpen”或“AfterOpen”事件中,根据条件设置列的可见性。 4. 示例代码: ```pb // 获取数据窗口对象 ...

    SpringMVC实现动态加表及字段并显示数据

    总结起来,使用SpringMVC实现动态加表及字段并显示数据,需要理解SpringMVC的工作原理,掌握数据库操作和表单设计。在实际开发中,还需要关注性能优化、安全性等方面的问题,以确保系统稳定可靠。这是一项涉及多方面...

    delphi动态配置DBgrid列显示类

    通过以上讲解,我们可以看到,动态配置DBgrid列显示类是将用户界面的定制能力与数据存储技术相结合,提高了应用程序的灵活性和用户体验。理解并掌握这一知识点,对于开发复杂的Delphi数据驱动应用至关重要。

    qt TableView显示数据库表中的数据

    在Qt框架中,显示数据库表中的数据通常涉及到多个步骤,包括连接数据库、执行查询语句、将查询结果映射到TableView组件以及自定义数据模型。以下是对这些关键知识点的详细说明: 1. **Qt与数据库连接**:Qt提供了一...

    PB 动态设置数据窗口列隐藏和显示的例子

    PB 动态设置数据窗口列隐藏和显示的例子,用PB8写的,因用户要求在网上没有找到,自己写了一个。 写得比较粗糙,但能看得懂。

    GridView动态显示列

    本主题将深入探讨如何实现GridView动态显示列,即根据用户需求或特定条件在页面加载时或运行时自定义列显示。JavaScript的引入使得这种动态调整无需页面刷新,提升了用户体验。 首先,了解GridView的基本结构。...

    spring boot框架layui前端,table拓展,支持动态表头和数据展示,支持table表数据编辑

    1. **动态加载列头和数据**:这是一个高级的前端特性,允许表格在运行时根据后端返回的数据动态生成列头和填充数据。这样可以应对数据结构多变的情况,例如,不同的用户角色可能看到的列不同,或者某些数据只有在...

    MVC中根据数据库中显示多行多列

    通过以上步骤,我们可以在MVC应用中实现根据数据库内容动态显示固定行数的数据,无论数据量多大,始终保持显示的行数不变。这不仅提高了用户体验,也减轻了服务器的压力。在实际项目中,还需要结合具体需求和环境...

    FineReport 实现动态列报表

    根据所给的部分内容中的描述,可以推断出FineReport在设计动态列报表时,可以通过编写SQL查询语句来从数据库中获取数据,并将这些数据以动态列的形式展现。例如,代码段 "ds1=split($p1,",")" 可能指的是通过某种...

    qt快速加载并动态显示大容量数据能够加载千万行量级的数据

    4. **动态显示**:描述中提到的“根据鼠标事件显示不同内容”可能是指行或列的详细信息。可以添加鼠标事件监听器,当用户点击某一行或某一单元格时,获取相关数据并显示在单独的对话框或详细视图中。这可以通过重写`...

    ireport固定表头隐藏列

    其次,**隐藏列**是根据需求动态显示或隐藏报表中的特定列。在ireport中,可以通过编程方式或用户交互来控制列的可见性。在设计阶段,可以先将所有可能需要的列都设计好,然后在运行时根据条件决定哪些列的`print...

    layui异步加载table表中某一列数据的例子

    在本篇文章中,介绍了如何利用layui框架实现异步加载table表中某一列数据的示例。layui是一个轻量级的前端UI框架,提供了一整套的解决方案,方便前端开发者快速构建界面。本文将重点阐述如何在layui框架下,利用异步...

    在DataGrid控件中动态隐藏显示指定列

    本文将深入探讨如何在DataGrid控件中动态隐藏或显示指定列,以便根据用户需求或应用程序逻辑调整界面展示。 首先,我们要了解DataGrid控件的基本结构。DataGrid通常与数据源绑定,例如DataTable、DataSet或Binding...

    通用查询GRID风格数据窗口要显示的列

    在实际开发中,"find"功能通常涉及数据过滤和查找,与通用查询GRID风格数据窗口显示的列密切相关,可能涉及到如何根据用户输入的条件动态改变显示的列。 综上所述,通用查询GRID风格数据窗口要显示的列涉及到数据库...

    动态列生成报表

    1. 数据库查询:通过SQL语句动态构造查询,根据用户选择的字段决定查询哪些列。 2. 报表设计工具:使用支持动态列的报表设计工具,如Microsoft的 Reporting Services (SSRS) 或者RDLC(Report Definition Language ...

    oracle查询表的所有列并用逗号隔开

    1. **查询表元数据**:首先,我们需要通过查询`USER_TAB_COLUMNS`视图来获取表的列信息。 2. **使用 WM_CONCAT 函数**:接着,我们将使用`WM_CONCAT`函数来连接查询结果中的列名,并在每个列名之间插入逗号作为分隔...

Global site tag (gtag.js) - Google Analytics