基于ASP.net的动态统计指标表单的设计与实现

时间:2022-10-30 08:25:19

基于ASP.net的动态统计指标表单的设计与实现

[摘 要] 本文通过分析动态表单的实现原理和运行机制,采用MVC架构,利用技术,研究基于Web的贵州省中药现代化产业报表制度统计系统动态表单统计,满足贵州省中药现代化产业主管单位对贵州省中药现代化报表制度统计系统中统计指标频繁变化的需求。

[关键词] 中药现代化产业报表制度; 统计; 动态表单;

doi : 10 . 3969 / j . issn . 1673 - 0194 . 2013 . 16. 047

[中图分类号] TP399 [文献标识码] A [文章编号] 1673 - 0194(2013)16- 0074- 03

0 引 言

在开发基于Web的数据统计系统时,经常会遇到对各种各样统计指标输入表单的处理。通常设计者都会根据用户的统计指标需求设计输入界面,但随着社会和经济的发展,很多指标是动态变化的,这就导致以前设计的统计指标录入界面不能满足用户的需求。这种情况在中药材统计中较为明显,比如贵州省中药现代化产业统计中“典型药品批发和零售企业主要经济指标”这一统计表单下有统计指标主营业务成本、主营业务税金及附加、主营业务利润、其他业务利润、营业费用、管理费用、财务费用、营业利润、利润总额等28个。随着社会、经济和科技的发展,每年各单位都会对统计指标进行修改,这导致每年的统计指标不同。比如当要在“典型药品批发和零售企业主要经济指标”这一统计表单下增加工业生产总值、中成药工业生产总值、中成药主营业务利润等指标或删减其中的一些统计指标时,会导致系统的数据库、业务逻辑、界面显示等发生变化,要让系统适应新的统计指标要求,需要专业的软件人员进行修改,将会消耗很大的人力、物力、财力来对系统进行修改。从长远来看不是一个切实可行的办法。如何设计一个动态表单页面,使其能随着统计指标的变化而变化成为当前统计系统要解决的首要问题。动态表单技术可以通过Web页面方便地对表单进行管理,通过一次配置即可生成表单,数据库表以及动态查询页面。并且可以在后台管理这些表单,进行必要的修改和删除操作。

通过认真分析和中药现代化产业统计工作的实际,作者发现,这些动态变化的统计指标完全可以用 .net和数据库来实现,在数据库中采用一个分类表来对每年所涉及的统计表进行分类并记录统计表所使用的字段信息,相当于建一个二级数据库,.net通过读取分类表中表的字段,根据所选择的数据表的字段自动生成统计表 .aspx文件和处理 .aspx表单的CS文件。

1 相关技术

1.1 技术

是一种动态网页技术,很多程序都是在服务器端执行,通常返回给用户一个HTML文本,因此,客户端只要有浏览器就可以浏览。利用技术,动态信息由扩展名为.aspx的页面表现,业务逻辑可由VisualMicrosoftC++、 Visual MicrosoftVB、C#等开发语言实现。

1.2 MVC设计模式

MVC是一种设计模式,它由模型(Mode1)、视图(View)和控制器(Controller) 3部分组成。MVC模式把数据处理、程序输入输出控制以及数据表示分离开来,并且描述了不同部分的对象之间的通信方式,使它们不必卷入彼此的数据模型和方法中,使程序结构变得清晰而灵活。MVC架构是一种广泛使用的交互式应用程序的架构方式,它将之前和现在所涉及的数据对象按功能划分,以尽量减少对象之间的耦合度。MVC体系结构将传统应用任务(输入、处理和输出)转化为图形化用户交互模型,已逐渐应用于基于Web的多层次企业应用领域。

2 动态表单的设计

动态表单编辑器能够根据用户的需要,随意设计出想要的表单结构,包括表单的样式排版及标签的增减和更改,并能通过设计好的动态表单,实现采集信息的功能、数据处理等简单功能。根据贵州省中药现代化产业统计工作的实际需要,本文设计了一个动态表单的实现过程及其实现原理,如图1所示,其方法步骤为:

第一步:将信息对象进行归类,对于系统中没有的分类,建立分类;

第二步:建立分类后,在该分类下定义数据表字段信息;

第三步:依据定义好的数据表字段信息,创建数据库表;

第四步:根据分类和数据库定义的字段内容,打开动态表单编辑器,绘制所需的表单数据;

第五步:根据动态表单的Form控件标签对应的字段信息,保存表单内容信息至数据库中,并结合Script技术生成 .aspx文件;

第六步:户在设计好的表单中录入编辑信息,并保存入库。

总之,动态表单的设计首先根据对象信息的属性设计好数据库表,然后把对象信息的属性描述为表单属性,最后表单把某一类对象的信息存入相应的数据库表中。

3 设计与实现

3.1 数据库设计

在数据库中,设计二级数据库表,名称为Two_DataBase,字段包括Table_Name(表名)、Field_Name(字段名),Field_Type(字段类型)、Field_Size(字段宽度)、Y_N_Prime_Key(是否为主键)、Decimal_Number(小数位数)、Table_Use_Year(表的使用年份)、Y_N_I horizontal(是否为横向)、Default_Value(默认值)、Fields_Control_Type(字段所使用的控件类型)、Chinese_Notes(中文注释)。

3.2 统计表字段信息录入

当用户对要创建的统计表进行字段输入,系统根据输入的内容,在.net中采用SQL中的Insert命令把统计表的字段信息录入数据库表Two_DataBase。创建表的界面如图2所示。.Net中录入统计指标字段信息的语句如下:

Insertinto Two_DataBase(Table_Name,

Field_Name,Field_Type,Field_Size,

Y_N_Prime_Key,Decimal_Numbler,Fields_Control_Type,Chinese_Notes,Table_User_year)value(

this.Table_Name.Text.ToString().Trim(),

this.Field_Name.Text.ToString().Trim(),

this.Field_Type.Text.ToString().Trim(),

this.Field_Size.Text.ToString().Trim(),

this.Y_N_Prime_Key.Text.ToString().Trim(),

this.Decimal_Number.Text.ToString().Trim(),

this.Fields_Control_Type.ToString().Trim(),

this.Chinese_Notes.Text.ToString().Trim(),

this.Table_Use_Year.Text.ToString().Trim())

3.3 统计表的创建

根据Two_DataBase中的内容,创建统计指标数据表,假设要创建的统计表名为Statiscs_Table1,创建表的部分核心代码如下。

StringBuilder strSql=new StringBuilder();

strSql.Append("select Field_Name,Field_Type,

Field_Size,Y_N_Prime_Key,Decimal_Numbler,

Fields_Control_Type,Chinese_Notes from Two_DataBase ");

strSql.Append(" where Table_Name =@Table_Name ");

SqlParameter[] parameters = {

New SqlParameter("@Table_Name", SqlDbType.VarChar, 255)};

parameters[0].Value =” Statistics_Table1”;

DataSet ds=DbHelperSQL.Query(strSql.ToString(),

parameters);

Int i= ds.Tables[0].Rows.Count;

String[][] arr=new String[i][7];

For(int j=0;j< ds.Tables[0].Rows.Count;j++)

{For(k=0;k

{Arr[j][k]=””}}

For(int j=0;j< ds.Tables[0].Rows.Count;j++)

For(k=0;k

{

Arr[j][k]= ds.Tables[0].Rows[j][k].ToString().Trim();

}}

String str=”create ”+ ds.Tables[0].Rows[0]. Table_Name+”(”;

For(int i=0; i< ds.Tables[0].Rows.Count;i++)

{

Str=str+ ds.Tables[0].Rows[i]. Field_Name+” ”+ds.Tables[0].Rows[i].Field_Type;

If (ds.Tables[0].Rows[i]. Field_Size>0)

If(ds.Tables[0].Rows[i]. Decimal_Numbler>0)

Str=str+”(“+ ds.Tables[0].Rows[i]. Field_Size +”,”+ ds.Tables[0].Rows[i]. Decimal_Numbler+”)”;

Else

Str=str+”(“+ ds.Tables[0].Rows[i]. Field_Size+”)”;

If(Y_N_Prime_Key=.T.)

Str=str+” primary key”;

Str=str+”,”+ ds.Tables[0].Rows[i]. Fields_Control_Type;

Str=str+”,”+ ds.Tables[0].Rows[i]. Chinese_Notes+”)”;

}

SqlCommand cmd = New SqlCommand(Str);

cmd.ExecuteNonQuery();

3.4 动态统计表单的设计

由于动态表单的设计基于B/S结构的,所以不提倡安装插件的形式,而且其应用也会受到很大限制。.Net的页面表单是通过标记声明的,其中包含文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择等属性标签。系统在用户对表统计指标进行输入时,把用户对该指标要求显示的控件类型进行选择,把用户对每一个指标的详细信息存入分类数据库中,当用户点击创建表单时,系统根据用户要求创建的表名信息,在数据库中读出每个指标的详细信息,利用C#开发工具对指标信息进行分析,根据指标信息创建数构建表单创建语句。系统设计平台主要采用 .net,设计语言使用C#,网页脚本使用Script。当系统把统计指标信息读取出来后,每一个统计指标的在数据库中的字值作为该指标所对应控件的ID值和Name值的一部分。根据C#的语法特点构造表单创建字符串,最后采用C#的输入语言以Script的形式在网页上输出该构造字符串,即是统计指标的表单控件。

以单行文本和下拉框(input和select)为例,找到相应的 .aspx文件并做一定的修改,系统创建的统计表单界面截图如图3所示。统计表部分代码片段如下:

String Table_Name=ds.Tables[0].Rows[i].Table_Name;

For(int i=0; i< ds.Tables[0].Rows.Count;i++)

{

Label_name= ds.Tables[0].Rows[i]. Field_Name+”_label”;

Label_id= ds.Tables[0].Rows[i]. Field_Name+”_label”;

Label_title= ds.Tables[0].Rows[i].Chinese_Notes+”:”;

text_name= ds.Tables[0].Rows[i]. Field_Name+”_text”;

text_id= ds.Tables[0].Rows[i]. Field_Name+”_text”;

Response.Write("

if(ds.Tables[0].Rows[i]. Fields_Control_Type=1)

Response.Write(" ");

else

if(ds.Tables[0].Rows[i]. Fields_Control_Type=2)

Response.Write(" ");

}

3.5 动态统计表单数据元素的读取及存储

String[] Fields_Name=new String[i];

String[] Fields_Name_Value=new String[i];

For(int i=0; i< ds.Tables[0].Rows.Count;i++)

{

String text_fields_name= ds.Tables[0].Rows[i]. Field_Name+”_text”;

Fields_Name_Value[i]=Request.Form[text_fields_name].ToString();

Fields_Name[i]= ds.Tables[0].Rows[i]. Field_Name;

}

String str_fields_name= Fields_Name[0];

String str_fields_name_value= Fields_Name_Value[0];

For(int i=1; i< ds.Tables[0].Rows.Count;i++)

{

str_fields_name= str_fields_name+”,”+ Fields_Name[i];

str_fields_name_value= str_fields_name_value+”,”+ Fields_Name_Value[i];

}

String Sql_str=”Insert into “+Table_Name+”(”+ str_fields_name+”) Value(”+ str_fields_name_value+”)”;

SqlCommand cmd = New SqlCommand(Sql_str);

cmd.ExecuteNonQuery();

4 结 语

动态表单方式可以用于特定功能的统计系统配置。一般用于功能比较单一的统计系统,极大地方便了开发人员和维护人员的操作,大大降低了软件开发者的工作强度。虽然此系统有以上诸多优点,但是它还有一些不足和待改进之处。与其他模块有复杂的业务交叉的功能虽然也可以通过此系统实现配置。但是实际运行中将很难对数据库进行优化,数据的交叉检索难度较大,在运行中性能将很难令人满意。此系统设计思想可以作为一个原型系统开发原理来研究,通过不断的摸索与实践,可以逐步管理更多关于数据库的内容,比如建立索引、生成存储过程和建立外键关联等功能。不断改进之后,最终可将这个系统定位成中小统计系统的生产系统。

主要参考文献

[1] 任中方,张华,闫明松,等. MVC模式研究的综述[J]. 计算机应用研究,2004,21(10):1-3.

[2] 寇毅,吴力文. 基于MVC设计模式的Struts框架的应用方法[J]. 计算机应用,2003,23(11):91-92.

[3] 程永敬. ASP数据访问高级编程[M]. 董启雄,译. 北京:机械工业出版社,2001.

[4] 谭天舒,王俊柳,李伟,等. 实现对ASP程序访问控制的几种方法[J].计算机工程与科学,2002,24(6).

[5] 郑源,王加阳. 基于ASP技术的Web数据库远程维护[J]. 计算机工程与应用,2002(11).

[6] 刘友生,陈一平,胡浪. 基于数据表的动态表单处理技术[J]. 计算机工程与应用,2004(34):199-211.

[7] [美]Andrew Troelsen. C#与.NET4高级程序设计[M]. 第5版. 朱晔,译. 北京:人民邮电出版社,2011.

[8] 刘京华. Java Web 整合开发王者归来[M]. 北京:清华大学出版社,2010.

[9] 郑齐心,房大伟,刘云峰,等. 项目开发案例全程实录[M]. 第2版. 北京:清华大学出版社,2011.

[10] P A Zhilin. Dynamic Forms of Equilibrium of a Bar Com—pressed by a Dead Force[C] // Control of Oscillations and Chaos,1997.

上一篇:和谐社会背景下化工企业财务管理的创新 下一篇:浅谈任务驱动法在高职CorelDRAW教学中的应用