`

Asp.Net实现列定制

阅读更多

在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()+ "&nbsp;</td>");

 

Response.Write("<td align='left' " + FieldVisual[A.Field.COL2] + ">" + dr[A.Field.COL2].ToString()+ "&nbsp;</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--我认为ASP.NET比ASP难很多,希望大家做好准备

    在ASP.NET里面,数据库还是这两个但是常用的语言多了一个C#,也是微软推荐的语言,为.NET平台定制的语言。这样ASP.NET就有四种组合:VB+ACCESS,VB+SQL,C#+ACCESS,C#+SQL,本教程会使用C#+ACCESS,兼顾四种来写,...

    asp.net知识库

    HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的...

    asp.net教学讲义

    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.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的...

    ASP.NET4高级程序设计(第4版) 3/3

     《ASP.NET 4高级程序设计(第4版)》是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的建议。书中还深入讲述了其他ASP.NET图书...

    计算机专业毕设ASP.NET技术在网站开发设计中的研究与开发(论文+源代码+开题报告).rar

    学生可以通过阅读和分析这些代码,深入了解ASP.NET技术在网站开发中的具体实现细节。 **开题报告部分**: 开题报告详细介绍了本项目的选题背景、研究意义、研究目标和研究方法。它还列出了项目的主要任务、预期...

    UltraWebChart--服务器端-基于ASP.NET的图表控件

    提供了ASP.NET 基于会话的安全性,从而保证了显示的图表数据,使所有敏感图表非常安全。 强大的美学增强 图表不仅仅采用点阵表示,最重要的是数据的外观显示。为了轻松的显示您的图表,UltraWebChart提供了内置的...

    asp.net网络选课系统

    asp.net网络选课系统 系统分析 在本系统中,有三类用户:系统管理员,教师和学生。三种不同的用户所具有的操作权限以及操作内容均不一样。 本选课系统给予教师很大的自主权,系统管理员只负责向系统中添加学生和...

    动软.Net代码生成器 v2.76

    自动生成ASP.NET页面及后台代码. 自动生成增、删、改、查的存储过程和数据记录的SQL脚本. 完全可以自定制的开源代码生成模板组件管理. 多种类型数据库集中管理器 可支持SQL Server、Oracle、MySQL、OleDb、...

    计算机专业毕设精选-ASP网络购物系统(源代码+论文+开题报告+答辩PPT).rar

    **源代码**:基于ASP.NET框架开发,采用C#编程语言,实现了用户注册、登录、浏览商品、购物车管理、订单处理等核心功能。源代码结构清晰,注释详细,便于学生理解和二次开发。 **论文**:详细阐述了该网络购物系统...

    UltraWinChart--Visual Studio .NET环境下丰富的客户端图表

    摘要 UltraWinChart与ASP.NET 中UltraWebChart 一样,提供了丰富的对象模块,可视化的显示大量以及各种分类信息,为Windows Forms应用程序带来前所未有的方便。UltraWinChart内置了大量的图形备选项,包含了设计时...

    asp文件查询excel表格中的内容

    此系统可以比较灵活的运用于各种查询,有问题和需要定制请联系:admin@ewuyi.net 注意:excel中每列的格式要一致,建议都设置为文本。 如果遇到格式不统一,请尝试以下操作: 1.新建excel文件:新建book1.xls文件-...

    AspNetPager.dll

    分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,...

    计算机专业毕设ASP+ACCESS教学评估系统毕业设计(源代码+论文+任务书).rar

    3. 任务书:任务书详细列出了项目的目标和任务,包括系统设计、数据库设计、功能实现、测试和调试等方面的具体要求,为学生提供了一个明确的项目实施指南。 该项目具有以下特点: 1. 易于理解和学习:该项目采用了...

Global site tag (gtag.js) - Google Analytics