在Web上实现对Table中显示的列为用户可定制
本人结合在一个DoNet项目中的应用,讨论一实现方式
要求: 数据库中A表 有col1,col2,col3,col4,col5,col6
在列表界面上,可以通过点击"定制"按钮 来指定界面需要显示的column
本人在项目中的实现方式(附上了项目中部分代码供参考):
1.建立一张PLT_FIELDVISUAL表
字段:
OID
EntityType 可存储实体对象标识或表名或View的名称
FieldName
Tag 显示/隐藏标记 本人实践中是将 style='display:none' 写入
2.IBEntity 接口中增加
string[] getFieldsCN(); //字段对应的中文名
针对有些列始终不需要在List界面上显示,比如OID列,Contents列等那么可以采用如下的定义
columnsCN[0] = "[OID]"; 即加上[] 来表示不进行定制的列,始终不显示
string getEntityName(); //返回实体的名称
//虽然有getTableName()方法,但考虑到有些情况表名与Entity的名是不同的
//如表名:PLT_UserInfo 而Entity名为:UserInfo
3.具体的Entity类中对getFieldsCN(),getEntityName()方法做实现
4.列的选择(可重用)
显示:ShowColumn.aspx
获取实体类路径
根据实体类路径,构造对象
取得到传入实体的字段名
取得到传入实体的字段中文名
循环显示
checkbox value="列名" 列中文名
注意判断
if (columnCNName[i].IndexOf("[")>-1) //始终不在列表界面上显示的列
{
//只显示,没有checkbox
Response.Write("<td>" + StringLang.getEmptyString(columnName[i]) + "</td>");
Response.Write("<td>" + StringLang.getEmptyString(columnCNName[i]) + "</td>");
}
处理:Action.aspx
获取实体类路径
根据实体类路径,构造实体对象
得到传入实体的字段名
得到选中(指定显示)的字段名
首先清除PLT_FIELDVISUAL表中EntityType=实体对象标识的数据
condition1: 如果选择了显示列,将实体的字段名与选中的字段名比较,将没有选中的字段名写入
condition2: 如果没有选择显示列,则将实体的所有字段名写入PLT_FIELDVISUAL表
ShowColumn.aspx
//获取参数
strEntityPath = StringLang.getEmptyString(Request["entitypath"]).Trim();
entity = (IBEntity)CommonLang.getObject(strEntityPath);
columnName = entity.getFields(); //得到传入实体的字段名
columnCNName = entity.getFieldsCN(); //得到传入实体的字段中文名
5.List界面上显示的处理
利用.Net的Page可继承的机制
在IndexBasePage页面中根据不同的entity来构造其各列的显示状态
public Hashtable FieldVisual = null; //字段显示状态
/// <summary>
/// 将Entity的所有字段,放入Hashtable,以字段名为key,以字段的显示状态为value
/// 如果字段在PLT_FIELDVISUAL表中存在,则value取对应的PLT_FIELDVISUAL.Tag字段值
/// </summary>
/// <param name="entity"></param>
public void InitFieldVisual(IBEntity entity)
{
FieldVisual = new Hashtable();
string sSQL = "select * from PLT_FIELDVISUAL where EntityType=" + DBLang.getSqlStr(entity.getEntityName());
DataTable dt = DBFacade.RunSQLReturnDT(sSQL);
string strFieldKey = "";
string strTag = "";
for (int i = 0; i < entity.getFields().Length - 1; i++)
{
strFieldKey = entity.getFields()[i];
strTag = "";
for (int j = 0; j < dt.Rows.Count; j++)
{
if (dt.Rows[j]["FieldName"].Equals(strFieldKey))
{
strTag = StringLang.getEmptyString(dt.Rows[j]["Tag"]).Trim();
break;
}
}
FieldVisual.Add(strFieldKey, strTag);
}
}
这样可以在不同模块的Index.aspx中调用InitFieldVisual方法,传入不同的entity
A entity = new A();
InitFieldVisual(entity);
当然此处的Index.aspx 需要继承IndexBasePage
6.List界面的显示:
标题列
<td id='Title_col1' <%=FieldVisual[A.Field.COL1]%>>列名1</td>
<td id='Title_col1' <%=FieldVisual[A.Field.COL2]%>>列名2</td>
................
Value列
Response.Write("<td align='left' " + FieldVisual[A.Field.COL1] + ">" + dr[A.Field.COL2].ToString()+ " </td>");
Response.Write("<td align='left' " + FieldVisual[A.Field.COL2] + ">" + dr[A.Field.COL2].ToString()+ " </td>");
7.定制按钮客户端实现
<input type="button" value="定制" onclick="return(doConfigColumn('实体类路径,程序集名'));"/>
使用showModalDialog打开定制界面ShowColumn.aspx
//定制
function doConfigColumn(s_EntityPath){
var strReturnValue="";
strReturnValue=showModalDialog("ColumnVisual/ShowColumn.aspx?entitypath=" + s_EntityPath,"","dialogWidth:350px;dialogHeight:450px;center:yes;resizable:no;status:no;help:no");
if(strReturnValue=="ok"){
location.reload(); //回刷本页,同时更新显示的列
}
}
本功能的实现主要借助了PLT_FIELDVISUAL表,将不显示的列写入该表内,并在Tag字段写入HTML隐藏标签
分享到:
相关推荐
在ASP.NET里面,数据库还是这两个但是常用的语言多了一个C#,也是微软推荐的语言,为.NET平台定制的语言。这样ASP.NET就有四种组合:VB+ACCESS,VB+SQL,C#+ACCESS,C#+SQL,本教程会使用C#+ACCESS,兼顾四种来写,...
HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的...
Asp.net教学讲义 1 讲义内容 6 第一章:asp.net和web窗体 6 1.1 NET应用开发架构简介 6 1.1.1. NET框架结构 6 1.1.2 http协议简介 6 1.1.3 静态网页与动态网页 8 1.1.4 客户端代码与服务器端代码 8 1.1.5 ASP.NET...
ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的...
《ASP.NET 4高级程序设计(第4版)》是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的建议。书中还深入讲述了其他ASP.NET图书...
学生可以通过阅读和分析这些代码,深入了解ASP.NET技术在网站开发中的具体实现细节。 **开题报告部分**: 开题报告详细介绍了本项目的选题背景、研究意义、研究目标和研究方法。它还列出了项目的主要任务、预期...
提供了ASP.NET 基于会话的安全性,从而保证了显示的图表数据,使所有敏感图表非常安全。 强大的美学增强 图表不仅仅采用点阵表示,最重要的是数据的外观显示。为了轻松的显示您的图表,UltraWebChart提供了内置的...
asp.net网络选课系统 系统分析 在本系统中,有三类用户:系统管理员,教师和学生。三种不同的用户所具有的操作权限以及操作内容均不一样。 本选课系统给予教师很大的自主权,系统管理员只负责向系统中添加学生和...
自动生成ASP.NET页面及后台代码. 自动生成增、删、改、查的存储过程和数据记录的SQL脚本. 完全可以自定制的开源代码生成模板组件管理. 多种类型数据库集中管理器 可支持SQL Server、Oracle、MySQL、OleDb、...
**源代码**:基于ASP.NET框架开发,采用C#编程语言,实现了用户注册、登录、浏览商品、购物车管理、订单处理等核心功能。源代码结构清晰,注释详细,便于学生理解和二次开发。 **论文**:详细阐述了该网络购物系统...
摘要 UltraWinChart与ASP.NET 中UltraWebChart 一样,提供了丰富的对象模块,可视化的显示大量以及各种分类信息,为Windows Forms应用程序带来前所未有的方便。UltraWinChart内置了大量的图形备选项,包含了设计时...
此系统可以比较灵活的运用于各种查询,有问题和需要定制请联系:admin@ewuyi.net 注意:excel中每列的格式要一致,建议都设置为文本。 如果遇到格式不统一,请尝试以下操作: 1.新建excel文件:新建book1.xls文件-...
分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,...
3. 任务书:任务书详细列出了项目的目标和任务,包括系统设计、数据库设计、功能实现、测试和调试等方面的具体要求,为学生提供了一个明确的项目实施指南。 该项目具有以下特点: 1. 易于理解和学习:该项目采用了...