.net软件开发脚本规范V1.0

软件日常开发规范文本

一、基本标准
1.代码和SQL脚本均不要出现无意义的空格和空行。
2.所有SQL脚本确保可以重复运行不出错,添加数据的脚本重复运行不会重复添加数据。
3.能用一行代码或脚本解决的不要写出两行,能用一个方法解决的不要写出两个方法,提高代码的利用率,减少冗余代码。
4.任何地方变量命名不使用无意义的a、b等名称,如人员编号uId,姓名name。
5.SQL脚本中的关键字统一使用大写,如INT,VARCHAR,DECLARE,SELECT等。
6.接到需求后复述一遍,然后写出解决方案步骤。
7.如果新需求为新模块,需要写出此模块的数据库设计表、视图、存储过程,画出流程图,写出页面需求分析。
8.页面排版,如果页面上控件较少,使用两列排版,列宽:20%、80%。如果较多使用四列排版,列宽:20%、30%、20%、30%。特殊情况再略调整列宽。
9.控件命名规则,由控件缩写加上列名简单英文翻译,例:姓名文本框txtName
控件缩写规则:TextBox-txt;Label-lbl;RadioButton-rdo;DropDownList-drp;CheckBok-chk; LinkButton-btn; HiddenField-hf; FileUpload-fld。
10.文件命名规则,简单英文翻译加上页面标识,例:工作计划列表WorkPlanList、工作计划新增WorkPlanAdd、工作计划查询WorkPlanSearch、工作计划浏览WorkPlanView。
11.SQL脚本命名规则,表格使用简拼字母大写加上表格名称,例“GZJH_工作计划”,视图以V开头,例“V_工作计划”,存储过程使用表名加功能,例“GZJH_工作计划新增”、“GZJH_工作计划审核”等。
12.JS命名规则,同使用此JS的文件名,如工作计划的JS脚本为“WorkPlan.js”。
13.新增、删除、修改、审核、提交操作都需要记录操作日志,所有操作如果出错要记录错误日志。操作日志调用方法BLL.WriteOperatLog(模块, 流水号, 名称, 操作) ,模块一般同存储过程名称,注意操作日志保存在一个表中,需要使用流水号来区分不可以使用编号,操作包含“添加”、“修改”、“审核”、“删除”、“提交”。
14.界面上的样式与js脚本对齐格式要注意,用不到的样式与js不要调用。
二、SQL脚本标准
1.各文件夹存放的脚本说明
存储过程:除“基础_”开头的所有存储过程,包含新增、修改、删除、列表、提交、审核。
基础数据:“基础_”开头的存储过程,用于下拉列表的数据加载公共方法。
函数:视图与存储过程中使用到的函数,如获取简拼等。
其他脚本:存放新增表、新增列等脚本,命名规则:
1)新增表,例:XB_学报_新增表
2)新增列,例:XB_学报_新增列
3)修改表,对表格某一列的数据类型修改,例:XB_学报_修改表
4)数据修改,对表中数据的UPDATE、DELETE、INSERT操作,例:XB_学报_数据修改
5)添加菜单,例:QX_模块_添加菜单_学报
6)修改菜单,所有对菜单的UPDATE操作放在此脚本内,修改模块名称、模块地址、上级模块等,例:QX_模块_修改菜单
7)删除菜单,所有删除菜单脚本放在此脚本内,例:QX_模块_删除菜单
8)删除废弃脚本,所有的需要删除的脚本放在此脚本内,脚本用于数据库中执行,需要同时删除脚本文件。
2.新增表脚本
1)命名规则,表格名称前面需要加上中文缩写,以便于数据库中操作时快速找到表,创建之前需要判断是否存在,如果存在则先删除再创建。
2)创建方法:以此为模板复制粘贴另存到项目的其他脚本文件夹中,修改表名,以及除[编号]之外的列名字段类型即可。
IF OBJECT_ID(‘GZJH_工作计划’,‘U’) IS NOT NULL
BEGIN
DROP TABLE [dbo].[GZJH_工作计划]
END

CREATE TABLE [dbo].[GZJH_工作计划](
[编号] [int] IDENTITY(1,1) NOT NULL,
[工作计划编号] varchar NULL,
[工作计划分类] [int] NULL,
[开始学年] [int] NULL,
[结束学年] [int] NULL,
[学期] [int] NULL,
[组名] varchar NULL,
[申报人员] varchar NULL,
[申报日期] [datetime] NULL,
[审核状态] [int] NULL,
[审核意见] varchar NULL,
[附件名称] varchar,
[附件路径] varchar,
PRIMARY KEY ([编号])
)
3.视图脚本
1)命名规则,“V_”加上表格名称
2)在适当的位置换行,每行需要差不多长短,换行需要缩进且逗号在前
3)在视图中编辑好关联性字段编号和名称,命名规则示例:“工作计划分类编号”,“工作计划分类”
4)需要在界面上显示的日期需要转换为“2016-10-09”格式,命名规则示例:“申报日期_显示”,不需要在界面上显示的不要添加。
5)有审核状态的使用函数DBO.XT_获取审核状态(1,A.审核状态),从XT_审核状态表中查询,1代表通用,用途最广,如有特殊情况需要在审核状态表中新增类别。
6)创建方法:以此为模板复制粘贴另存到项目的视图文件夹中,修改视图名称,修改查询脚本,注意换行与缩进格式。
IF OBJECT_ID(‘V_工作计划’,‘V’) IS NOT NULL
BEGIN
DROP VIEW [dbo].[V_工作计划]
END
GO

CREATE VIEW [dbo].[V_工作计划]
WITH ENCRYPTION
AS
SELECT A.编号,A.工作计划编号,A.工作计划分类 AS 工作计划分类编号,C.名称 AS 工作计划分类,A.开始学年,A.结束学年,A.学期 AS 学期编号
,D.名称 AS 学期,A.组名,A.申报人员 AS 申报人员编号,B.姓名 AS 申报人员,B.所属单位,A.申报日期,CONVERT(VARCHAR(10),A.申报日期,120) AS 申报日期_显示
,A.审核状态 AS 审核状态编号, DBO.XT_获取审核状态(1,A.审核状态) AS 审核状态,A.审核意见,A.附件名称,A.附件路径
FROM dbo.GZJH_工作计划 AS A
LEFT JOIN dbo.V_职工信息 AS B ON A.申报人员 = B.人员编号
LEFT JOIN dbo.GZJH_工作计划分类 AS C ON A.工作计划分类 = C.编号
LEFT JOIN dbo.ZG_学期 AS D ON A.学期 = D.编号
4.新增存储过程
1)命名规则,表格名称加上“新增”
2)如果列名较多在适当的位置换行,每行需要差不多长短,换行需要缩进且逗号在前
3)参数后数据类型需要对齐,使用TAB键,以最长的参数名隔一个TAB键为准,如此例中@工作计划编号TAB键VARCHAR(30)。
4)如果是有审核状态的表单,新增的时候默认为5待完善状态。
5)创建方法:以此为模板复制粘贴另存到项目的存储过程文件夹中,修改存储过程名称,修改表名列名参数名,注意换行与缩进格式。
IF OBJECT_ID(‘GZJH_工作计划新增’,‘P’) IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[GZJH_工作计划新增]
END
GO

CREATE PROCEDURE [dbo].[GZJH_工作计划新增]
@工作计划编号 VARCHAR(30),
@工作计划分类 INT,
@开始学年 INT,
@结束学年 INT,
@学期 INT,
@组名 VARCHAR(40),
@申报人员 VARCHAR(50),
@申报日期 DATETIME,
@审核意见 VARCHAR(400),
@附件名称 VARCHAR(50),
@附件路径 VARCHAR(100)
WITH ENCRYPTION
AS
INSERT INTO GZJH_工作计划(工作计划编号,工作计划分类,开始学年,结束学年,学期,组名,申报人员,申报日期,审核状态,附件名称,附件路径)
VALUES(@工作计划编号,@工作计划分类,@开始学年,@结束学年,@学期,@组名,@申报人员,@申报日期,5,@附件名称,@附件路径)

IF @@ERROR <> 0
BEGIN
RETURN(-1)
END
ELSE
BEGIN
RETURN(@@IDENTITY)
END
5.修改存储过程
1)命名规则,表格名称加上“修改”
2)如果列名较多在适当的位置换行,每行需要差不多长短,换行需要缩进且逗号在前,字段与字段之间逗号之后空一格
3)参数后数据类型需要对齐,使用TAB键,以最长的参数名隔一个TAB键为准,如此例中@工作计划编号TAB键VARCHAR(30)。
4)如果是有审核状态的表单,如果是5待完善状态修改之后还是为5待完善状态,否则修改为0待审核状态,用于审核不通过后重新修改保存后校级审核角色重新审核。
5)创建方法:以此为模板复制粘贴另存到项目的存储过程文件夹中,修改存储过程名称,修改表名列名参数脚本,注意换行与缩进格式。
IF OBJECT_ID(‘GZJH_工作计划修改’,‘P’) IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[GZJH_工作计划修改]
END
GO

CREATE PROCEDURE [dbo].[GZJH_工作计划修改]
@编号 INT,
@工作计划编号 VARCHAR(30),
@工作计划分类 INT,
@开始学年 INT,
@结束学年 INT,
@学期 INT,
@组名 VARCHAR(40),
@申报人员 VARCHAR(50),
@申报日期 DATETIME,
@审核意见 VARCHAR(400),
@附件名称 VARCHAR(50),
@附件路径 VARCHAR(100)
WITH ENCRYPTION
AS
UPDATE GZJH_工作计划 SET 开始学年=@开始学年, 结束学年=@结束学年, 学期=@学期, 组名=@组名,审核状态=(CASE WHEN 审核状态=5 THEN ‘5’ ELSE ‘0’ END)
,审核意见=@审核意见, 附件名称=@附件名称, 附件路径=@附件路径 WHERE 编号=@编号

IF @@ERROR <> 0
BEGIN
RETURN(-1)
END
ELSE
BEGIN
RETURN(1)
END
6.删除存储过程
1)命名规则,示例为通用删除存储过程,适用于系统中大部分表格的删除功能,如遇特殊情况需要单独创建,命名为表格名称加上“删除”
2)是否删除判断:如果有数据关联性删除前需要进行判断是否被使用;涉及到权限需要根据当前的审核状态判断角色级别是否有权限删除
3)参数后数据类型需要对齐,使用TAB键,以最长的参数名隔一个TAB键为准。
4)成功删除返回值为1,否则为0,执行出错返回-1。
5)创建方法:以此为模板复制粘贴另存到项目的存储过程文件夹中,修改存储过程名称,修改删除脚本,注意空行格式。
IF OBJECT_ID(‘XT_通用删除’,‘P’) IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[XT_通用删除]
END
GO

CREATE PROCEDURE [dbo].[XT_通用删除]
@表名 VARCHAR(50),
@角色级别 VARCHAR(50),
@编号 INT
WITH ENCRYPTION
AS
SET NOCOUNT ON
DECLARE @sql NVARCHAR(1000)
DECLARE @申报审核状态 INT

SET @sql = N'SELECT @申报审核状态=审核状态 FROM ' + @表名 + N' WHERE 编号=' + CONVERT(VARCHAR,@编号);
EXEC sp_executesql @sql, N'@申报审核状态 INT OUTPUT', @申报审核状态 OUTPUT

DECLARE @rValue INT
SET @rValue=0

SET @sql = 'DELETE FROM ' + @表名 + ' WHERE 编号=' + CONVERT(VARCHAR,@编号)

IF @角色级别='校级'
BEGIN
	SET @rValue=1
	EXEC(@sql)
END
ELSE IF @角色级别='院系级'
BEGIN
	IF @申报审核状态 NOT IN (2,4)
	BEGIN
		SET @rValue=1
		EXEC(@sql)
	END
END
ELSE IF @角色级别='个人级'
BEGIN
	IF @申报审核状态 IN (0,5)
	BEGIN
		SET @rValue=1
		EXEC(@sql)
	END
END

IF @@ERROR <> 0
BEGIN
RETURN(-1)
END
ELSE
BEGIN
RETURN(@rValue)
END
GO
7.浏览存储过程
1)命名规则,表格名称加上“浏览”
2)参数固定为编号
3)创建方法:以此为模板复制粘贴另存到项目的存储过程文件夹中,修改存储过程名称,修改视图名称。
IF OBJECT_ID(‘GZJH_工作计划浏览’,‘P’) IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[GZJH_工作计划浏览]
END
GO

CREATE PROCEDURE [dbo].[GZJH_工作计划浏览]
@编号 INT
WITH ENCRYPTION
AS
SELECT * FROM V_工作计划 WHERE 编号 = @编号
GO
8.列表存储过程
1)命名规则,表格名称加上“列表”
2)固定参数,如果需要分页第一个为@RecordCount最后四个为@排序字段、@排序模式、@PageSize、@PageNum,如果涉及到权限第二到第四为@角色级别、@人员编号、@所属单位,顺序保持不变,其他参数按照页面上的顺序写。
3)创建方法:以此为模板复制粘贴另存到项目的存储过程文件夹中,修改存储过程名称,修改视图名称,修改参数,修改查询条件,姓名标题之类用LIKE,数值日期范围用BETWEEN,其他大部分用等于,少量需要用到CHARINDEX判断是否包含某字符串,例CHARINDEX(’’’+@作者姓名+’’’,作者) > 0。
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N’[dbo].[GZJH_工作计划列表]’) AND type in (N’P’, N’PC’))
DROP PROCEDURE [dbo].[GZJH_工作计划列表]
GO

CREATE PROCEDURE [dbo].[GZJH_工作计划列表]
@RecordCount INT OUTPUT,
@角色级别 VARCHAR(50),
@人员编号 VARCHAR(50),
@所属单位 VARCHAR(50),
@工作计划分类 INT,
@开始学年 INT,
@结束学年 INT,
@学期 INT,
@组名 VARCHAR(40),
@申报人员 VARCHAR(50),
@申报日期1 VARCHAR(50),
@申报日期2 VARCHAR(50),
@审核状态 INT,
@排序字段 VARCHAR(50),
@排序模式 VARCHAR(50),
@PageSize INT,
@PageNum INT
WITH ENCRYPTION
AS
DECLARE @PRESQL VARCHAR(1000)
DECLARE @SUFSQL VARCHAR(8000)

SELECT @PRESQL='SELECT * FROM ('
SELECT @PRESQL=@PRESQL+'SELECT Row_Number() OVER ('
IF @排序字段<>'' AND @排序模式<>''
BEGIN
	SELECT @PRESQL=@PRESQL+'ORDER BY '+@排序字段+' '+@排序模式+') as row_num,'
END
ELSE
BEGIN
	SELECT @PRESQL=@PRESQL+'ORDER BY 编号 desc) as row_num,'
END

SELECT @PRESQL=@PRESQL+'*'
SELECT @SUFSQL=' FROM V_工作计划 WHERE 1=1'

IF @角色级别='个人级'
BEGIN
	SELECT @SUFSQL=@SUFSQL+' AND 申报人员编号='''+@人员编号+''''
END
  
IF @角色级别='院系级'
BEGIN
	SELECT @SUFSQL=@SUFSQL+' AND 所属单位='''+@所属单位+''''
END

IF @所属单位<>''
BEGIN
	SELECT @SUFSQL=@SUFSQL+' AND 所属单位='''+@所属单位+''''
END

IF @工作计划分类 > 0
BEGIN
    SELECT @SUFSQL=@SUFSQL+' AND 工作计划分类编号=' + CONVERT(VARCHAR,@工作计划分类)
END

IF @开始学年 > 0
BEGIN
	SELECT @SUFSQL=@SUFSQL+' AND 开始学年=' + CONVERT(VARCHAR,@开始学年)
END  

IF @结束学年 > 0
BEGIN
	SELECT @SUFSQL=@SUFSQL+' AND 结束学年=' + CONVERT(VARCHAR,@结束学年)
END  

IF @学期 > 0
BEGIN
	SELECT @SUFSQL=@SUFSQL+' AND 学期=' + CONVERT(VARCHAR,@学期)
END  

IF @组名<>''
BEGIN
	SELECT @SUFSQL=@SUFSQL+' AND 组名 LIKE ''%'+@组名+'%'''
END  

IF @申报人员<>''
BEGIN
	SELECT @SUFSQL=@SUFSQL+' AND 申报人员 LIKE ''%'+@申报人员+'%'''
END

IF @申报日期1<>'' AND @申报日期2<>''
BEGIN
	SELECT @SUFSQL=@SUFSQL+' AND 申报日期 BETWEEN '''+@申报日期1+''' AND '''+@申报日期2+''''
END

IF @审核状态>0
BEGIN
	SELECT @SUFSQL=@SUFSQL+' AND 审核状态 ='  + CONVERT(VARCHAR,@审核状态)
END  

DECLARE @SQL VARCHAR(8000)
EXEC GetPagingStr @PRESQL,@SUFSQL,@SQL OUT,@PageSize,@PageNum,@RecordCount OUT
EXEC (@SQL)

9.提交与审核存储过程
1)命名规则,示例为通用审核存储过程,适用于系统中大部分表格的审核功能,即XT_审核状态表中1通用类别的6个审核状态(0未审核1院系通过2学校通过3院系不通过4学校不通过5待完善),如遇特殊情况需要单独创建,命名为表格名称加上“审核”或“提交”,特殊审核状态的同样需要在XT_审核状态表中添加此类别的审核状态。
2)参数,@是否通过为固定3种,0不通过、1通过、2提交
3)通过与不通过,需要根据当前的审核状态判断角色级别是否有权限删除,通过时院级只能将0未审核与3院系不通过两个状态修改为1院系通过,校级不限制;不通过时院级只能将0未审核与1院系通过两个状态修改为3院系不通过,校级不限制。
4)提交,只有状态为5待完善时才改变状态为0未审核。
5)参数后数据类型需要对齐,使用TAB键,以最长的参数名隔一个TAB键为准。
6)成功修改状态后返回值为1,否则为0,执行出错返回-1。
7)创建方法:以此为模板复制粘贴另存到项目的存储过程文件夹中,修改存储过程名称,修改参数及执行脚本,注意空行格式。
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N’[dbo].[XT_通用审核]’) AND type in (N’P’, N’PC’))
DROP PROCEDURE [dbo].[XT_通用审核]
GO

CREATE PROCEDURE [dbo].[XT_通用审核]
@表名 VARCHAR(50),
@角色级别 VARCHAR(50),
@编号 INT,
@是否通过 INT --0不通过,1通过,2提交
WITH ENCRYPTION
AS
SET NOCOUNT ON
DECLARE @sql NVARCHAR(1000)
DECLARE @申报审核状态 INT
DECLARE @审核状态 INT
SET @sql = N’SELECT @申报审核状态=审核状态 FROM ’ + @表名 + N’ WHERE 编号=’ + CONVERT(VARCHAR,@编号);
EXEC sp_executesql @sql, N’@申报审核状态 INT OUTPUT’, @申报审核状态 OUTPUT

IF @是否通过=0 AND @申报审核状态 <> 5
BEGIN
	IF @角色级别='校级'
	BEGIN
		SET @审核状态 = 4
	END
	IF @角色级别='院系级'
	BEGIN
		IF @申报审核状态 IN (0,1)
		BEGIN
			SET @审核状态 = 3
		END
	END
END

IF @是否通过=1 AND @申报审核状态 <> 5
BEGIN
	IF @角色级别='校级'
	BEGIN
		SET @审核状态 = 2
	END
	IF @角色级别='院系级'
	BEGIN
		IF @申报审核状态 IN (0,3)
		BEGIN
			SET @审核状态 = 1
		END
	END
END

IF @是否通过=2
BEGIN
	IF @申报审核状态 = 5
	BEGIN  
		SET @审核状态 = 0
	END
END  

DECLARE @rValue INT
SET @rValue=0

IF @审核状态 IS NOT NULL
BEGIN
	SET @rValue=1
	SET @sql = 'UPDATE ' + @表名 + ' SET 审核状态=' + CONVERT(VARCHAR,@审核状态) + ' WHERE 编号=' + CONVERT(VARCHAR,@编号)
	EXEC(@sql)
END

IF @@ERROR <> 0
BEGIN
RETURN(-1)
END
ELSE
BEGIN
RETURN(@rValue)
END
GO
10.基础存储过程
1)命名规则,以基础开头加上表格中文名称,如XM_成果形式为“基础_成果形式”
2)创建方法:以此为模板复制粘贴另存到项目的基础数据文件夹中,修改存储过程名称,修改视表格名称。
IF OBJECT_ID(‘基础_成果形式’,‘P’) IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[基础_成果形式]
END
GO

CREATE PROCEDURE [dbo].[基础_成果形式]
WITH ENCRYPTION
AS
BEGIN
SET NOCOUNT ON

SELECT * FROM dbo.XM_成果形式

END
三、代码标准
1.列表界面
1.1前台代码
1)样式与js脚本,UI.css为界面样式,Font.css为字体样式,Common.js为通用基础js脚本,基本所有页面都需要,如果有需要新增的复制一行,修改href与src中的路径即可,保持统一格式,脚本的type在前src在后,样式的type与rel在前href在后。
2)列表上方按钮:提交、新增、删除、查询、通过、不通过、导出Excel,根据需求减少按钮,顺序保持不变。
3)底部的class为paging_table的表格为分页使用,如果不需要分页的列表,删除此表格,并删除后台对应的上一页btnPrePage_Click下一页btnNextpage_Click跳转到某一页drpGo_SelectedIndexChanged三个方法。
4)注意列宽度分配美观性,宽度百分比加起来要为100%,第一列CHECKBOX固定为5%,操作列固定为10%,除非操作中包含多个按钮宽度不够时额外添加。
5)CHECKBOX后的第一列通常为标题,需要加上popWindow2弹出浏览页面,在此js方法中可以定义弹出页面的宽度与高度。
6)创建步骤:
复制,完全复制替换新页面第一行以下的所有代码,并删除此页面中的第一行<%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“WorkPlanList.aspx.cs” Inherits=“OfficeWork_WorkPlanList” %>。
修改文字,修改页面中的文字“工作计划”为新页面名称,包含头部“工作计划列表”与按钮的需要选择提醒“请先选择工作计划”,后台代码同样需要修改,使用替换功能替换前台与后台的“工作计划”为新页面名称。
修改按钮,根据需求减少列表上方的按钮,同时要删除相应的后台代码。
修改需要显示的列名。
修改与列对应的字段名,即视图中的字段名称,一般与列名相同,遇到日期转换的要注意加上“_显示”。
<%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“WorkPlanList.aspx.cs” Inherits=“OfficeWork_WorkPlanList” %>

工作计划列表

工作计划列表

提交 新增 删除 查询 通过 不通过 导出Excel
学年学期组名申报人附件审核状态操作
<%# DataBinder.Eval(Container.DataItem, "开始学年")%>~<%# DataBinder.Eval(Container.DataItem, "结束学年")%><%# DataBinder.Eval(Container.DataItem, "学期")%><%# DataBinder.Eval(Container.DataItem, "组名")%><%# DataBinder.Eval(Container.DataItem, "申报人员")%><%# DataBinder.Eval(Container.DataItem, "审核状态")%> [编辑]
<%# DataBinder.Eval(Container.DataItem, "开始学年")%>~<%# DataBinder.Eval(Container.DataItem, "结束学年")%><%# DataBinder.Eval(Container.DataItem, "学期")%><%# DataBinder.Eval(Container.DataItem, "组名")%><%# DataBinder.Eval(Container.DataItem, "申报人员")%><%# DataBinder.Eval(Container.DataItem, "审核状态")%> [编辑]
【当前页:  】    【共  页】    【共  条信息】   【上一页】    【下一页】
 
1.2后台代码 1)Page_Load方法,基本不需要修改,dlbind为数据绑定方法调用,RankHander为权限控制调用,如果不需要分页,删除页数定义;如果没有权限控制删除RankHander调用。 2)RankHander方法,权限控制,个人级的时候不显示通过与不通过按钮。 3)btnAdd_Click方法,对应【新增】按钮,跳转到新增页面,修改链接即可,一般情况下直接使用替换功能,比如新列表为工作总结命名为WorkSummary,将“WorkPlan”全部替换为“WorkSummary”即可。此示例中有type参数用于多菜单对应同页面不同类别功能,其他情况下不需要参数。 4)btnEdit_Click方法,对应列表中的【编辑】按钮,使用Session保存查询条件,修改链接即可(批量替换)。 5)btnDel_Click方法,对应【删除】按钮,修改参数@表名的参数值,修改提示文字(批量替换),如果是特殊情况不使用通用删除存储过程则需要修改存储过程名称以及参数,第一个@ReturnValue参数保持不变,根据返回值判断统计没有被删除的个数,如果大于0则弹出提醒。成功删除的需要记录操作日志,日志需要流水号,所以在前台的HiddenField中使用逗号拼接编号与流水号两个字符串,编号用于删除传参数,流水号用于记录日志。 6)btnPass_Click方法,对应【通过】按钮,修改参数@表名的参数值,修改提示文字(批量替换),成功审核的需要记录操作日志。 7)btnNotPass_Click方法,对应【不通过】按钮,修改参数@表名的参数值,修改提示文字(批量替换),成功审核的需要记录操作日志。 8)btnUp_Click方法,对应【提交】按钮,修改参数@表名的参数值,修改提示文字(批量替换),成功提交的需要记录操作日志。 9)btnSearch_Click方法,对应【查询】按钮,修改链接(批量替换),注意同新增大部分情况下不需要参数。 10)btnExcel_Click方法,对应【Excel导出】按钮,修改存储过程名称,修改表格名称(批量替换),注意如果存储过程中没有row_num列需要删除ds.Tables[0].Columns.Remove("row_num")。 11)dlbind方法,列表绑定方法,修改存储过程名称(批量替换),如果不需要分页,删除以下分页段代码。 Paging p = new Paging(); p.RecordCount = Convert.ToInt32(sqlparam[0].Value); p.PageSize = 10; p.DoPaging(curpage, this.lblReturnMsg, this.lblCurPage, this.lblAllpage, this.lblAlldata, this.btnPrePage, this.btnNextpage, this.drpGo); 12)btnPrePage_Click方法,对应分页中的【上一页】按钮,固定方法不需要修改。 13)btnNextpage_Click方法,对应分页中的【下一页】按钮,固定方法不需要修改。 14)drpGo_SelectedIndexChanged方法,对应分页中的页数下拉列表,切换后跳转到选定页,固定方法不需要修改。 15)list_ItemDataBound方法,对应前台代码中的列表绑定事件,一般用于【编辑】按钮的颜色控制点击控制,此示例中还包含附件判断,如果附件不为空显示附件名称并点击后打开附件浏览页面。如果列表绑定时不需要特殊操作则删除此方法,并删除前台列表绑定事件中的OnItemDataBound事件。 16)getParam方法,返回存储过程的参数组织,根据存储过程来设定参数,顺序需要与存储过程中相同,如果存储过程中是INT或DATETIME类型的需要使用IsNullToDBNull转换为DBNull.Value。 17)创建步骤: 复制命名空间引用完全替换原命名空间。 复制所有方法完全替换原空文件中的方法。 批量替换 “工作计划”为新页面名称,批量替换前缀“GZJH_”。 对应前台按钮,如果需要减少方法删除相应的按钮和方法即可,注意所有方法顺序保持不变。 修改存储过程参数。 using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;

public partial class OfficeWork_WorkPlanList : System.Web.UI.Page
{
DataBase db = new DataBase();
protected void Page_Load(object sender, EventArgs e)
{
if (Session[“uid”] == null)
{
Response.Write(“”);
}
else
{
if (!IsPostBack)
{
this.lblCurPage.Text = “1”;
if (Request[“curPage”] != null && Request[“curPage”] != “”)
{
this.lblCurPage.Text = Request[“curPage”].ToString();
}
dlbind();
RankHander();
}
}
}

private void RankHander()
{
    Cookie ck = new Cookie();
    if (ck.GetCookie("u_level") == "个人级")
    {
        imgPass.Visible = false;
        btnPass.Visible = false;
        imgNotpass.Visible = false;
        btnNotPass.Visible = false;
    }
    ck = null;
}

protected void btnAdd_Click(object sender, EventArgs e)
{
    Response.Redirect("WorkPlanAdd.aspx?type=" + Request["type"], true);
}

protected void btnEdit_Click(object sender, EventArgs e)
{
    BLL.setSearchSession(Request.QueryString.ToString());

    LinkButton lbn = (LinkButton)sender;
    string id = lbn.CommandName.ToString();
    Response.Redirect("WorkPlanAdd.aspx?act=edit&id=" + id + "&type=" + Request["type"] + "&curPage=" + this.lblCurPage.Text.ToString());
}

protected void btnDel_Click(object sender, EventArgs e)
{
    try
    {
        int n = 0;
        Cookie ck = new Cookie();
        for (int i = 0; i < this.list.Items.Count; i++)
        {
            CheckBox chk = (CheckBox)this.list.Items[i].FindControl("chkbox");
            if (chk.Checked == true)
            {
                HiddenField hfId = (HiddenField)this.list.Items[i].FindControl("hfId");
                string[] str = hfId.Value.Split(',');
                string id = str[0];
                string code = str[1];

                List<SqlParameter> sqlparam = new List<SqlParameter>();
                SqlParameter param = new SqlParameter("@ReturnValue", SqlDbType.Int);
                param.Direction = ParameterDirection.ReturnValue;
                sqlparam.Add(param);
                sqlparam.Add(new SqlParameter("@表名", "GZJH_工作计划"));
                sqlparam.Add(new SqlParameter("@角色级别", ck.GetCookie("u_level")));
                sqlparam.Add(new SqlParameter("@编号", id));

                string rValue = db.ReturnValue("XT_通用删除", sqlparam.ToArray());
                
                if (rValue == "1")
                {
                    BLL.WriteOperatLog("工作计划删除", code, "", "删除");
                }
                else
                {
                    n++;
                }
            }
        }

        if (n <= 0)
        {
            Response.Write("<script>alert('工作计划删除成功');</script>");
        }
        else
        {
            Response.Write("<script>alert('操作成功!其中有" + n + "个工作计划没有权限删除');</script>");
        }
        dlbind();
    }
    catch (Exception ex)
    {
        BLL.WriteErrorLog("工作计划删除", ex);
        Response.Write("<script>alert('操作发生错误');</script>");
    }
}

protected void btnPass_Click(object sender, EventArgs e)
{
    try
    {
        int n = 0;
        Cookie ck = new Cookie();
        for (int i = 0; i < this.list.Items.Count; i++)
        {
            CheckBox chk = (CheckBox)this.list.Items[i].FindControl("chkbox");
            if (chk.Checked == true)
            {
                HiddenField hfId = (HiddenField)this.list.Items[i].FindControl("hfId");
                string[] str = hfId.Value.Split(',');
                string id = str[0];
                string code = str[1];

                List<SqlParameter> sqlparam = new List<SqlParameter>();
                SqlParameter param = new SqlParameter("@ReturnValue", SqlDbType.Int);
                param.Direction = ParameterDirection.ReturnValue;
                sqlparam.Add(param);
                sqlparam.Add(new SqlParameter("@表名", "GZJH_工作计划"));
                sqlparam.Add(new SqlParameter("@角色级别", ck.GetCookie("u_level")));
                sqlparam.Add(new SqlParameter("@编号", id));
                sqlparam.Add(new SqlParameter("@是否通过", 1));

                string rValue = db.ReturnValue("XT_通用审核", sqlparam.ToArray());

                if (rValue == "1")
                {
                    BLL.WriteOperatLog("工作计划审核通过", code, "", "审核");
                }
                else
                {
                    n++;
                }
            }
        }
        if (n <= 0)
        {
            Response.Write("<script>alert('操作成功');</script>");
        }
        else
        {
            Response.Write("<script>alert('操作成功!其中有" + n + "个工作计划没有权限审核或是待完善状态');</script>");
        }
        dlbind();
    }
    catch (Exception em)
    {
        BLL.WriteErrorLog("工作计划审核通过", em);
        Response.Write("<script>alert('操作发生错误');window.location.href='WorkPlanList.aspx?type=" + Request["type"] + "';</script>");
    }
    finally
    {
        db = null;
        GC.Collect();
    }
}

protected void btnNotPass_Click(object sender, EventArgs e)
{
    try
    {
        int n = 0;
        Cookie ck = new Cookie();
        for (int i = 0; i < this.list.Items.Count; i++)
        {
            CheckBox chk = (CheckBox)this.list.Items[i].FindControl("chkbox");
            if (chk.Checked == true)
            {
                HiddenField hfId = (HiddenField)this.list.Items[i].FindControl("hfId");
                string[] str = hfId.Value.Split(',');
                string id = str[0];
                string code = str[1];

                List<SqlParameter> sqlparam = new List<SqlParameter>();
                SqlParameter param = new SqlParameter("@ReturnValue", SqlDbType.Int);
                param.Direction = ParameterDirection.ReturnValue;
                sqlparam.Add(param);
                sqlparam.Add(new SqlParameter("@表名", "GZJH_工作计划"));
                sqlparam.Add(new SqlParameter("@角色级别", ck.GetCookie("u_level")));
                sqlparam.Add(new SqlParameter("@编号", id));
                sqlparam.Add(new SqlParameter("@是否通过", "0"));

                string rValue = db.ReturnValue("XT_通用审核", sqlparam.ToArray());

                if (rValue == "1")
                {
                    BLL.WriteOperatLog("工作计划审核不通过", code, "", "审核");
                }
                else
                {
                    n++;
                }
            }
        }
        if (n <= 0)
        {
            Response.Write("<script>alert('操作成功');</script>");
        }
        else
        {
            Response.Write("<script>alert('操作成功!其中有" + n + "个工作计划没有权限审核或是待完善状态');</script>");
        }
        dlbind();
    }
    catch (Exception em)
    {
        BLL.WriteErrorLog("工作计划审核不通过", em);
        Response.Write("<script>alert('操作发生错误');window.location.href='WorkPlanList.aspx?type=" + Request["type"] + "';</script>");
    }
    finally
    {
        db = null;
        GC.Collect();
    }
}

protected void btnUp_Click(object sender, EventArgs e)
{
    DataBase db = new DataBase();
    Cookie ck = new Cookie();

    try
    {
        int n = 0;
        for (int i = 0; i < this.list.Items.Count; i++)
        {
            CheckBox chk = (CheckBox)this.list.Items[i].FindControl("chkbox");
            if (chk.Checked == true)
            {
                HiddenField hfId = (HiddenField)this.list.Items[i].FindControl("hfId");
                string[] str = hfId.Value.Split(',');
                string id = str[0];
                string code = str[1];

                List<SqlParameter> sqlparam = new List<SqlParameter>();
                SqlParameter param = new SqlParameter("@ReturnValue", SqlDbType.Int);
                param.Direction = ParameterDirection.ReturnValue;
                sqlparam.Add(param);
                sqlparam.Add(new SqlParameter("@表名", "GZJH_工作计划"));
                sqlparam.Add(new SqlParameter("@角色级别", ck.GetCookie("u_level")));
                sqlparam.Add(new SqlParameter("@编号", id));
                sqlparam.Add(new SqlParameter("@是否通过", 2));

                string rValue = db.ReturnValue("XT_通用审核", sqlparam.ToArray());

                if (rValue == "1")
                {
                    BLL.WriteOperatLog("工作计划提交", code, "", "提交");
                }
                else
                {
                    n++;
                }
            }
        }
        if (n <= 0)
        {
            Response.Write("<script>alert('操作成功');</script>");
        }
        else
        {
            Response.Write("<script>alert('操作成功!其中有" + n + "个工作计划不是待完善状态');</script>");
        }
        dlbind();
    }
    catch (Exception em)
    {
        BLL.WriteErrorLog("工作计划提交", em);
        Response.Write("<script>alert('操作发生错误');window.location.href='WorkPlanList.aspx?type=" + Request["type"] + "';</script>");
    }
    finally
    {
        db = null;
        GC.Collect();
    }
}

protected void btnSearch_Click(object sender, EventArgs e)
{
    Response.Redirect("WorkPlanSearch.aspx?type=" + Request["type"]);
}

protected void btnExcel_Click(object sender, EventArgs e)
{
    List<SqlParameter> sqlparam = getParam(-1, -1);
    DataSet ds = new DataSet();
    DataBase db = new DataBase();
    db.RunProc("GZJH_工作计划列表", sqlparam.ToArray(), ds);
    ds.Tables[0].Columns.Remove("row_num");
    ExportExcel.Export("工作计划", ds);
}

private void dlbind()
{
    DataBase db = new DataBase();
    try
    {
        int curpage = int.Parse(this.lblCurPage.Text);
        List<SqlParameter> sqlparam = getParam(10, curpage);
        DataSet ds = new DataSet();
        db.RunProc("GZJH_工作计划列表", sqlparam.ToArray(), ds);

        Paging p = new Paging();
        p.RecordCount = Convert.ToInt32(sqlparam[0].Value);
        p.PageSize = 10;
        p.DoPaging(curpage, this.lblReturnMsg, this.lblCurPage, this.lblAllpage, this.lblAlldata, this.btnPrePage, this.btnNextpage, this.drpGo);

        this.list.DataSource = ds;
        this.list.DataBind();
    }
    catch (Exception ex)
    {
        BLL.WriteErrorLog("工作计划列表数据绑定", ex);
    }
    finally
    {
        db = null;
        GC.Collect();
    }
}

protected void btnPrePage_Click(object sender, EventArgs e)
{
    this.lblCurPage.Text = Convert.ToString(Convert.ToInt32(this.lblCurPage.Text) - 1);
    drpGo.SelectedValue = this.lblCurPage.Text;
    dlbind();
}

protected void btnNextpage_Click(object sender, EventArgs e)
{
    this.lblCurPage.Text = Convert.ToString(Convert.ToInt32(this.lblCurPage.Text) + 1);
    drpGo.SelectedValue = this.lblCurPage.Text;
    dlbind();
}

protected void drpGo_SelectedIndexChanged(object sender, EventArgs e)
{
    this.lblCurPage.Text = drpGo.SelectedValue.ToString();
    dlbind();
    drpGo.SelectedValue = this.lblCurPage.Text;
}

protected void list_ItemDataBound(object sender, DataListItemEventArgs e)
{
    try
    {
        if (e.Item.DataItem != null)
        {
            if (e.Item.FindControl("btnUpfile") != null)
            {
                if (DataBinder.Eval(e.Item.DataItem, "附件路径").ToString() != "")
                {
                    string fileUrl = Convert.ToString(DataBinder.Eval(e.Item.DataItem, "附件路径"));
                    string fileName = fileUrl.Substring(fileUrl.LastIndexOf("/") + 1).Replace("pdf", "swf");
                    fileUrl = fileUrl.Substring(0, fileUrl.LastIndexOf("/") + 1).Replace("Pdf", "Swf");
                    ((LinkButton)e.Item.FindControl("btnUpfile")).OnClientClick = "popWindow2('../../PDFView/ShowAttachment.aspx?title=工作计划&path=" + fileUrl + "&fileName=" + fileName + "',800,700);return false;";
                    ((LinkButton)e.Item.FindControl("btnUpfile")).Text = Convert.ToString(DataBinder.Eval(e.Item.DataItem, "附件名称"));
                }
            }

            
            if (e.Item.FindControl("btnEdit") != null)
            {
                string rstate = DataBinder.Eval(e.Item.DataItem, "审核状态编号").ToString();
                Cookie ck = new Cookie();
                if (ck.GetCookie("u_level") == "个人级" || ck.GetCookie("u_level") == "院系级")
                {
                    if (rstate == "1" || rstate == "2")
                    {
                        ((LinkButton)e.Item.FindControl("btnEdit")).Enabled = false;
                        ((LinkButton)e.Item.FindControl("btnEdit")).Style.Add("color", "#9c9c9c");
                    }
                }
                else if (ck.GetCookie("u_level") == "校级")
                {
                    if (rstate == "2")
                    {
                        ((LinkButton)e.Item.FindControl("btnEdit")).Enabled = false;
                        ((LinkButton)e.Item.FindControl("btnEdit")).Style.Add("color", "#9c9c9c");
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        BLL.WriteErrorLog("工作计划列表绑定", ex);
    }
}   

protected List<SqlParameter> getParam(int pageSize, int curPage)
{
    Cookie ck = new Cookie();

    string depart = "";
    if (ck.GetCookie("u_level") == "院系级")
    {
        depart = ck.GetCookie("u_department");
    }
    else if (ck.GetCookie("u_level") == "校级")
    {
        depart = string.IsNullOrEmpty(Request["department"]) ? "" : Request["department"];
    }
    List<SqlParameter> sqlparam = new List<SqlParameter>();
    SqlParameter param = new SqlParameter("@RecordCount", SqlDbType.Int);
    param.Direction = ParameterDirection.Output;
    sqlparam.Add(param);
    sqlparam.Add(new SqlParameter("@角色级别", ck.GetCookie("u_level")));
    sqlparam.Add(new SqlParameter("@人员编号", Session["uid"].ToString()));
    sqlparam.Add(new SqlParameter("@所属单位", depart));
    sqlparam.Add(new SqlParameter("@工作计划分类", string.IsNullOrEmpty(Request["type"]) ? "" : Request["type"]));
    sqlparam.Add(new SqlParameter("@开始学年", string.IsNullOrEmpty(Request["drpStartYear"]) ? "" : Request["drpStartYear"]));
    sqlparam.Add(new SqlParameter("@结束学年", string.IsNullOrEmpty(Request["drpEndYear"]) ? "" : Request["drpEndYear"]));
    sqlparam.Add(new SqlParameter("@学期", string.IsNullOrEmpty(Request["drpTerm"]) ? "" : Request["drpTerm"]));
    sqlparam.Add(new SqlParameter("@组名", string.IsNullOrEmpty(Request["zm"]) ? "" : Request["zm"]));
    sqlparam.Add(new SqlParameter("@申报人员", string.IsNullOrEmpty(Request["applicant"]) ? "" : Request["applicant"]));
    sqlparam.Add(new SqlParameter("@申报日期1", string.IsNullOrEmpty(Request["requestDate1"]) ? "" : Request["requestDate1"]));
    sqlparam.Add(new SqlParameter("@申报日期2", string.IsNullOrEmpty(Request["requestDate2"]) ? "" : Request["requestDate2"]));
    sqlparam.Add(new SqlParameter("@审核状态", string.IsNullOrEmpty(Request["checkState"]) ? "" : Request["checkState"]));
    sqlparam.Add(new SqlParameter("@排序字段", string.IsNullOrEmpty(Request["sortfield"]) ? "" : Request["sortfield"]));
    sqlparam.Add(new SqlParameter("@排序模式", string.IsNullOrEmpty(Request["sortmode"]) ? "desc" : Request["sortmode"]));
    sqlparam.Add(new SqlParameter("@PageSize", pageSize));
    sqlparam.Add(new SqlParameter("@PageNum", curPage));
    return sqlparam;
} 

}
2.新增界面
2.1前台代码
1)样式与js脚本,UI.css为界面样式,Font.css为字体样式,Common.js为通用基础js脚本,VerifyInput.js为控件验证通用脚本,包含是否为空、是否合格的数字类型日期类型等类型判断、是否正确的数值或日期范围判断,两个样式与两个js脚本基本所有页面都需要,Calender.js为日期插件,用于日期选择,如果界面上没有日期录入框则不需要,如果有自有js脚本如WorkPlan.js则放在最后一行。使用到jQuery脚本则放在倒数第二行。
2)表单上方与上方均有三个按钮:保存、重置、返回,用于如果表单内容较多不需要再拉到最上方保存。
3)如果是需要审核的表单,suggestPanel保持不变,要注意新表单如果是两列,要删审核意见的colspan属性。
4)一般使用4列排版,如果内容较少使用两列排版。
5)必填项在文字后面加红色*号。
6)控件命名使用列名的英文简单翻译,尽量简短但能一看就明白。
7)创建步骤:
复制,完全复制替换新页面第一行以下的所有代码,并删除此页面中的第一行<%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“WorkPlanAdd.aspx.cs” Inherits=“OfficeWork_WorkPlanAdd” %>。
修改文字,使用替换功能替换“工作计划”为新页面名称。
修改表单内容,修改基本信息行以下的内容。
<%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“WorkPlanAdd.aspx.cs” Inherits=“OfficeWork_WorkPlanAdd” %>

工作计划

工作计划

保存 重置 返回
【基本信息】
工作计划流水号 申报日期 *
学年度 * ~ 学期 *
申报人员
附件文件描述:  格式:PDF;大小:20M
审核意见:
保存 重置 返回
 
2.2后台代码 1)Page_Load方法,下拉列表数据均从BaseData类中调用,修改状态如果不是个人级则显示审核意见录入框,流水号统一使用Label控件,名称为lblCode,使用getCode方法赋值,修改简拼同数据库表简拼,BaseData.getCode("GZJH", lblCode)。 2)BindData方法,用于修改时候加载原数据,修改浏览存储过程名称,再修改控件赋值段落。 3)btnSave_Click方法,对应【保存】按钮,少量新增修改有差异的参数赋值写在各自存储过程调用之前,如示例中的@附件路径参数,修改存储过程名称,修改提示信息即可。注意修改状态中的pagestr与search参数赋值段不可删除,用于编辑后依然保留在原页面。 4)getParam方法,返回存储过程的参数组织,根据存储过程来设定参数,顺序需要与存储过程中相同,如果存储过程中是INT或DATETIME类型的需要使用IsNullToDBNull转换为DBNull.Value。 5)创建步骤: 复制命名空间引用完全替换原命名空间。 复制所有方法完全替换原空文件中的方法。 批量替换 “工作计划”为新页面名称,批量替换前缀“GZJH_”,再替换一遍“GZJH”。 修改基础数据加载段,即页面上的DropDownList,RadioButtonList等控件的数据加载功能。 修改BindData数据加载绑定方法中的控件名称及赋值。 修改存储过程参数。 using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;

public partial class OfficeWork_WorkPlanAdd : System.Web.UI.Page
{
DataBase db = new DataBase();
protected void Page_Load(object sender, EventArgs e)
{

    if (Session["uid"] == null)//判断用户是否超时
    {
        Response.Write("<script>parent.location='../index.html';</script>");
    }
    else
    {
        if (!IsPostBack)
        {
            BaseData.BindYear(drpStartYear, DateTime.Now);
            BaseData.BindYear(drpEndYear, DateTime.Now);
            BaseData.Term(drpTerm, true, true);
            switch (Request["type"])
            {
                case "1":
                    txtZm.Visible = true;
                    lblColName.Text = "学科组";
                    break;
                case "3":
                    txtZm.Visible = true;
                    lblColName.Text = "备课组";
                    break;
                case "5":
                    txtZm.Visible = true;
                    lblColName.Text = "班务";
                    break;
            }

            Cookie ck = new Cookie();

            if (Request["act"] == "edit")
            {
                if (ck.GetCookie("u_level") != "个人级")
                {
                    suggestPanel.Visible = true;
                }
                lblTitle.Text = "修改";
                BindData(Request["id"]);
            }
            else
            {
                lblTitle.Text = "新增";
                txtApplicant.Text = ck.GetCookie("u_showname");
                hfApplicant.Value = Convert.ToString(Session["uid"]);
                txtRequestDate.Text = DateTime.Now.ToString("yyyy-MM-dd");
                BaseData.getCode("GZJH", lblCode);
            }
        }
    }
}

protected void BindData(string id)
{
    DataBase db = new DataBase();
    try
    {
        if (Session["uid"] != null)
        {
            List<SqlParameter> sqlparam = new List<SqlParameter>();
            sqlparam.Add(new SqlParameter("@编号", id));

            DataSet ds = new DataSet();
            db.RunProc("GZJH_工作计划浏览", sqlparam.ToArray(), ds);

            if (ds != null)
            {
                if (ds.Tables[0].Rows.Count > 0)
                {
                    hfId.Value = id;
                    lblCode.Text = ds.Tables[0].Rows[0]["工作计划编号"].ToString();
                    drpStartYear.SelectedValue = ds.Tables[0].Rows[0]["开始学年"].ToString();
                    drpEndYear.SelectedValue = ds.Tables[0].Rows[0]["结束学年"].ToString();
                    drpTerm.SelectedValue = ds.Tables[0].Rows[0]["学期编号"].ToString();
                    txtApplicant.Text = ds.Tables[0].Rows[0]["申报人员"].ToString();
                    hfApplicant.Value = ds.Tables[0].Rows[0]["申报人员编号"].ToString();
                    txtZm.Text = ds.Tables[0].Rows[0]["组名"].ToString();
                    txtFileName.Text = Convert.ToString(ds.Tables[0].Rows[0]["附件名称"]);
                    hfFileUrl.Value = Convert.ToString(ds.Tables[0].Rows[0]["附件路径"]);
                    txtRequestDate.Text = Convert.ToString(ds.Tables[0].Rows[0]["申报日期"]);
                    txtSuggest.Text = ds.Tables[0].Rows[0]["审核意见"].ToString();
                    ds = null;
                }
                else
                {
                    Response.Write("<script>alert('没有数据');window.location='WorkPlanList.aspx';</script>");
                }
            }
        }
        else
        {
            Response.Write("<script>parent.location='../index.html';</script>");
        }
    }
    catch (Exception ex)
    {
        BLL.WriteErrorLog("获取工作计划浏览数据", ex);
    }
    finally
    {
        db = null;
        GC.Collect();
    }
}

protected void btnSave_Click(object sender, EventArgs e)
{
    try
    {
        string fileUrl = UploadFile.UpFileToSwf(fldFile, UpFileType.OfficeWork);
        if (fileUrl == "1")
        {
            Response.Write("<script language='javascript'>alert('支持格式:|pdf|');</script>");
        }
        else if (fileUrl == "2")
        {
            Response.Write("<script language='javascript'>alert('你的文件已经超过20M的大小!');</script>");
        }
        else
        {
            List<SqlParameter> sqlparam = getParam();
            if (Request["act"] == "edit")
            {
                sqlparam.Add(new SqlParameter("@附件路径", (fileUrl == "") ? hfFileUrl.Value : fileUrl));
                db.RunProc("GZJH_工作计划修改", sqlparam.ToArray());
                BLL.WriteOperatLog("工作计划修改", lblCode.Text.Trim(), txtApplicant.Text.Trim(), "修改");
                
                string pagestr = "", search = "";
                if (Request["curPage"] != null && Request["curPage"] != "")
                {
                    pagestr = "curPage=" + Request["curPage"].ToString();
                }
                if (Session["search"] != null && Session["search"].ToString() != "")
                {
                    search = Session["search"].ToString();
                    Session.Remove("search");
                }
                Response.Write("<script>alert('工作计划修改成功');window.location='WorkPlanList.aspx?" + search + "&" + pagestr + "';</script>");
            }
            else
            {
                sqlparam.Add(new SqlParameter("@附件路径", fileUrl));
                db.RunProc("GZJH_工作计划新增", sqlparam.ToArray());
                BLL.WriteOperatLog("工作计划新增", lblCode.Text.Trim(), txtApplicant.Text.Trim(), "新增");
                Response.Write("<script>alert('工作计划新增成功');window.location='WorkPlanList.aspx?type=" + Request["type"] + "';</script>");
            }
        }
    }
    catch (Exception ex)
    {
        if (Request["act"] == "edit")
        {
            BLL.WriteErrorLog("工作计划修改", ex);
            Response.Write("<script>alert('修改工作计划失败');window.location='WorkPlanList.aspx?type=" + Request["type"] + "';</script>");
        }
        else
        {
            BLL.WriteErrorLog("工作计划新增", ex);
            Response.Write("<script>alert('新增工作计划失败');window.location='WorkPlanAdd.aspx?type=" + Request["type"] + "';</script>");
        }
    }
}

protected List<SqlParameter> getParam()
{
    List<SqlParameter> sqlparam = new List<SqlParameter>();
    if (Request["act"] == "edit")
    {
        sqlparam.Add(new SqlParameter("@编号", hfId.Value));
    }
    sqlparam.Add(new SqlParameter("@工作计划编号", lblCode.Text));
    sqlparam.Add(new SqlParameter("@工作计划分类", Request["type"]));
    sqlparam.Add(new SqlParameter("@开始学年", drpStartYear.SelectedValue));
    sqlparam.Add(new SqlParameter("@结束学年", drpEndYear.SelectedValue));
    sqlparam.Add(new SqlParameter("@学期", drpTerm.SelectedValue));
    sqlparam.Add(new SqlParameter("@组名", txtZm.Text));
    sqlparam.Add(new SqlParameter("@申报人员", hfApplicant.Value));
    sqlparam.Add(new SqlParameter("@申报日期", txtRequestDate.Text));
    sqlparam.Add(new SqlParameter("@审核意见", txtSuggest.Text));
    sqlparam.Add(new SqlParameter("@附件名称", txtFileName.Text));
    return sqlparam;
}

}
3.浏览界面
3.1前台代码
1)样式与js脚本,UI.css为界面样式,Font.css为字体样式,Common.js为通用基础js脚本,OperationTrack.js为操作追踪通用脚本,操作追踪脚本使用到jQuery框架。
2)表单排版需要与新增界面一摸一样,控件大部分为Label,命名与新增界面一致,前缀由txt、drp、rdo等改为lbl,如“txtName”改为“lblName”。
3)如果是不需要审核的表单,删除意见信息模块。
4)创建步骤:
复制,完全复制替换新页面第一行以下的所有代码,并删除此页面中的第一行。
修改文字,使用替换功能替换“工作计划”为新页面名称。
修改表单内容,可以从新增界面中复制,批量替换控件,“TextBox”、“DropdownList”等为“Label”,批量替换前缀“txt”、“drp”等为“lbl”,少量特殊控件另外修改。
<%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“WorkPlanView.aspx.cs” Inherits=“OfficeWork_WorkPlanView” %>

工作计划浏览 "); } } 4)创建步骤: 复制命名空间引用完全替换原命名空间。 复制所有方法完全替换原空文件中的方法。 批量替换 “工作计划”为新页面名称,批量替换前缀“GZJH_”。 修改BindData方法中,从新增页面中赋值,替换控件前缀“txt”、“drp”等为“lbl”,原来读取编号的去掉“编号”两字,附件类似的赋值另外写。 using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;

public partial class OfficeWork_WorkPlanView : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session[“uid”] == null)
{
Response.Write(“”);
}
else
{
if (!IsPostBack)
{
switch (Request[“type”])
{
case “1”:
lblzm.Visible = true;
lblColName.Text = “学科组”;
break;
case “3”:
lblzm.Visible = true;
lblColName.Text = “备课组”;
break;
case “5”:
lblzm.Visible = true;
lblColName.Text = “班务”;
break;
}

            BindData(Request["id"]);
        }
    }
}

private void BindData(string id)
{
    DataBase db = new DataBase();
    try
    {
        if (Session["uid"] != null)
        {
            List<SqlParameter> sqlparam = new List<SqlParameter>();
            sqlparam.Add(new SqlParameter("@编号", id));
            DataSet ds = new DataSet();
            db.RunProc("GZJH_工作计划浏览", sqlparam.ToArray(), ds);

            if (ds != null)
            {
                if (ds.Tables[0].Rows.Count > 0)
                {                       
                    lblCode.Text = ds.Tables[0].Rows[0]["工作计划编号"].ToString();
                    lblStartYear.Text = ds.Tables[0].Rows[0]["开始学年"].ToString();
                    lblEndYear.Text = ds.Tables[0].Rows[0]["结束学年"].ToString();
                    lblTerm.Text = ds.Tables[0].Rows[0]["学期"].ToString();
                    lblApplicant.Text = ds.Tables[0].Rows[0]["申报人员"].ToString();
                    lblzm.Text = ds.Tables[0].Rows[0]["组名"].ToString();
                    if (!string.IsNullOrEmpty(ds.Tables[0].Rows[0]["附件路径"].ToString()))
                    {
                        hlFile.Text = "<img src='../../IMG/ico/down.jpg' border='0' />" + ds.Tables[0].Rows[0]["附件名称"].ToString();
                        hlFile.NavigateUrl = "../" + ds.Tables[0].Rows[0]["附件路径"].ToString();
                    }
                    lblSuggest.Text = ds.Tables[0].Rows[0]["审核意见"].ToString();
                    txtSuggest.Text = ds.Tables[0].Rows[0]["审核意见"].ToString();

                    Cookie ck = new Cookie();
                    string state = ds.Tables[0].Rows[0]["审核状态编号"].ToString();
                    string ulevel = ck.GetCookie("u_level");
                    if (ulevel == "个人级" || (ulevel == "校级" && state == "2") || (ulevel == "院系级" && state == "1"))
                    {
                        lblSuggest.Visible = true;
                    }
                    else
                    {
                        txtSuggest.Visible = true;
                        btnSaveSuggest.Visible = true;
                    }
                    ck = null;
                    ds = null;
                }
                else
                {
                    Response.Write("<script>alert('没有数据');window.location='WorkPlanList.aspx';</script>");
                }
            }
        }
        else
        {
            Response.Write("<script>parent.location='../index.html';</script>");
        }
    }
    catch (Exception ex)
    {
        BLL.WriteErrorLog("工作计划浏览", ex);
    }
    finally
    {
        db = null;
        GC.Collect();
    }
}

protected void btnSaveSuggest_Click(object sender, EventArgs e)
{
    if (txtSuggest.Text.Trim() != "")
    {
        string sql = "UPDATE GZJH_工作计划 SET 审核意见='" + txtSuggest.Text + "' WHERE 编号=" + Request["id"];
        DataBase db = new DataBase();
        db.RunProc(sql);
        Response.Write("<script>alert('保存成功');</script>");
    }
    else
    {
        Response.Write("<script>alert('您没有填写意见');</script>");
    }
}

}
4.查询界面
4.1前台代码
1)样式与js脚本同新增界面,新增界面检查表单填写调用checkForm方法,查询界面检查表单填写调用checkSearchForm方法。
2)表单排版顺序需要与新增界面一摸一样,新增界面上除了描述之类的都要做为查询条件,另外加上条件所属单位,审核状态。
3)数值与日期使用一个范围,一个填写则另一个必须填写。
4)排序字段与列表中显示的列对应。
5)创建步骤:
复制,完全复制替换新页面第一行以下的所有代码,并删除此页面中的第一行。
修改文字,使用替换功能替换“工作计划”为新页面名称。
修改表单内容,可以从新增界面中复制,再做修改。
<%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“WorkPlanSearch.aspx.cs” Inherits=“OfficeWork_WorkPlanSearch” %>

工作计划查询

工作计划查询

查找 返回
【查询条件】
申报时间
学年度 ~ 学期
申报人 组名
所属单位 审核状态
【排序条件】
排序字段: 请选择 工作计划编号 开始学年 结束学年 学期 申报人员 所属单位 审核状态 排序方式: 请选择 升序 降序
查找 返回
 
4.2后台代码 1)Page_Load方法,需要修改其中的下拉基础数据加载方法,同新增页面。 2)btnSearch_Click方法,修改其中的链接页面与参数,参数名称与列表的getParam方法中完全一致。 3)创建步骤: 复制命名空间引用完全替换原命名空间。 复制所有方法完全替换原空文件中的方法。 复制新增页面中的基础数据加载方法。 修改链接页面与参数。 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;

public partial class OfficeWork_WorkPlanSearch : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session[“uid”] == null)
{
Response.Write(“”);
}
else
{
if (!IsPostBack)
{
BaseData.BindYear(drpStartYear, DateTime.Now);
BaseData.BindYear(drpEndYear, DateTime.Now);
BaseData.Term(drpTerm, true, true);
BaseData.CheckState(drpCheckState, 1);
BaseData.Depart(drpDepart, false, true);
}
}
}

protected void btnSearch_Click(object sender, EventArgs e)
{
    string urlstr = "WorkPlanList.aspx?type=" + Request["type"] + "&drpStartYear=" + drpStartYear.SelectedValue + "&drpEndYear=" + drpEndYear.SelectedValue
        + "&drpTerm=" + drpTerm.SelectedValue + "&applicant=" + txtApplicant.Text.Trim() + "&zm=" + txtZm.Text.Trim()
        + "&department=" + drpDepart.SelectedValue + "&checkState=" + drpCheckState.SelectedValue
        + "&requestDate1=" + txtRequestDate1.Text.Trim() + "&requestDate2=" + txtRequestDate2.Text
        + "&sortfield=" + drpOrderfiled.Text + "&sortmode=" + drpOrdermodel.Text;
    Response.Redirect(urlstr);
}

}
四、JS标准
1.新增页面表单检查方法名称固定为checkForm。
2.查询页面表单检查方法名称固定为checkSearchForm。
3.检查表单方法checkForm与checkSearchForm固定放在第一和第二。
function checkForm() {
var fg = true;
if (!error) {
fg = verifyInput(“txtRequestDate”, “申报日期”, “NO”, “”, “”, “”, “”);
}
if (!error) {
fg = verifyInput(“drpStartYear”, “开始学年”, “NO”, “”, “”, “”, “”);
}
if (!error) {
fg = verifyInput(“drpEndYear”, “结束学年”, “NO”, “”, “”, “”, “”);
}
if (!error) {
fg = verifyInput(“drpTerm”, “学期”, “NO”, “”, “”, “”, “”);
}
if (!error) {
fg = isRange(“学年度”, “drpStartYear”, “drpEndYear”, “NUM”);
}
error = false;
return fg;
}

function checkSearchForm() {
var fg = true;
if (!error) {
fg = isRange(“申报日期”, “txtRequestDate1”, “txtRequestDate2”, “DATE”);
}
error = false;
return fg;
}
4.进入页面加载方法放在最底部,如果新增或查询页面只有一个页面需要,则写在需要的页面的js调用下方。
$(function () {
acFZRSetting();
})

<script type="text/javascript">
    $(function () {
        acFZRSetting();
    })
</script>

5.使用ajax方法的时候,使用本文件夹中的handler,如果本文件夹中没有调用最上层的对应MainHandler.cs的handler.ashx。
五、SVN标准
1)提交代码前先获取最新代码
2)提交时需要填写信息,填写任务Excel中的修改内容列,如以下任务填写“业绩考核-工作量管理”,如果发生修改再次提交,在其后加上修改原因,例“业绩考核-工作量管理(脚本错误修改)”。

提交时不可以合并任务提交,一个任务改了哪些文件提交哪部分文件,不可以混合,需要非常清楚自己一个任务改了哪些代码脚本。尽量做到一个任务一个SVN版本。
六、日报与会议规范
1.工作日报
1.1每日下班前通过钉钉发送工作日报,采用的是KPTP的模式来落实工作日志:
K:keep,今天做了哪些工作;
P:problem,遇到了哪些问题;
T:try,计划如何尝试解决这些问题;
P:plan,明天的计划是什么。
日报中列出当日任务清单,列出标题即可,已完成的标黄色底色,次清单保存为图片通过附件发送,另在审核内容中说明未完成任务进度及延期原因,和共延期多久,还需要多少时间完成。做的过程中遇到的问题,是否解决,已解决说明解决方案,未解决说明还需要多少时间解决,明日计划。
业绩考核-绩分标准
业绩考核-菜单修改
绩分计算-计算函数
2.工作周报
每周五下班后通过钉钉发送工作周报,详细填写个人周报文档通过附件发送。
3.工作月报
每月底根据通知通过钉钉发送工作月报,详细填写个人月报文档通过附件发送,
4.月度会议
每月开会讨论,总结各自任务完成情况。
七、其他
1)界面新增一项任务举例:
需求:著作界面上增加“是否规划教材”
解决方案:
1.在著作表中新增一列;
2.修改著作视图,修改著作的新增、修改、浏览、列表存储过程;
3.著作新增页面前台增加radiolistbutton控件;
4.修改新增页面后台代码,调用存储过程时增加新参数,修改著作绑定数据的时候为新增的控件赋值;
5.在浏览页面前台增加Label控件,后台绑定数据的时候为新增的控件赋值;6.在查询页面增加DropdownList控件,后台代码加入该查询条件;
7.修改列表页面后台代码,调用存储过程时增加新参数;
8.新增、修改测试,浏览页面测试、查询测试。
2)新模块需求分析示例
工作量标准
表名:GZLBZ_工作量标准
存储过程:GZLBZ_工作量标准列表、GZLBZ_工作量标准修改、GZLBZ_工作量标准浏览
GZLBZ_工作量标准
字段名称 字段类型 字段长度 备注 是否为空
编号 int 标识ID N
职称 int 30 与ZG_职称表关联 Y
档位 int 30 与ZG_档位表关联 Y
系数 Decimal 18,1 Y
聘任条件 varchar 50 Y
工作量 int Y
工作量标准
List:列表调用GZLBZ_工作量标准列表存储过程,显示所有的工作量标准,不分页,列表上方显示Excel导出按钮,显示列:职称、档位、系数、聘任条件、工作量、操作(编辑)。
Edit:点击列表中的编辑按钮,调用GZLBZ_工作量标准浏览存储过程,绑定数据,只有工作量可以修改。点击保存调用GZLBZ_工作量标准修改存储过程,完成修改。

以上规范作为员工绩效考核内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Script.NET是通用的脚本语言开发平台,目前支持Tcl、Python、Lua、NSIS脚本开发,支持脚本语言的开发、运行、调试、编译、生成可执行文件等功能。Script.NET采用类似于Eclipse的插件化开发方式,大部分功能都以插件的形式提供,可以灵活扩展,除了用于脚本开发之外,也可以扩展为各种富客户端应用程序。<br>Script.NET从2000年开始开发,发布过V1.0和V2.0两个大版本,经过8年的不断优化完善,目前在架构方面已经比较合理,完善的插件机制,使得Script.NET平台可以非常容易的扩展更多的功能。可以访问主页 http://www.blueantstudio.net 了解更多信息。<br><br>Script.NET V2.0.2版本开始将基础平台和脚本开发包分离,此处下载的是基础运行平台,要使用某种脚本语言的开发功能,可以到蓝蚂蚁工作室网站下载相应语言的开发包,下载地址:<br>http://www.blueantstudio.net/scriptnet/download/download.htm<br><br>Script.NET主要功能特性如下: <br>1、编辑、调试、运行tcl、python、lua脚本; <br>2、脚本的编译/加密和生成可执行文件(每种脚本语言支持的程度不同); <br>3、效率分析等辅助功能(目前只有tcl脚本支持了此功能); <br>4、关键字帮助,通过F1键或鼠标移动到关键字上,获取详细的帮助信息; <br>5、收集了较多的脚本扩展包、帮助文档和演示程序,目前tcl的扩展包收集较多,其他脚本也正在收集完善,除了常用的tk、wx、pmw,还有图象、多媒体、界面库等很多各种各样的扩展包,以后我们打算通过在线更新的方式使用户可以更方便的获取到各种扩展包; <br>6、附带了ftp、代码统计、正则表达式等一些扩展工具; <br>7、采用灵活的可扩展架构,整个系统可以灵活的扩展各种解释器、界面组件、工具、工程、界面风格等; <br>8、支持控制台功能(目前仅有tcl控制台、telnet控制台、串口控制台可用,其他脚本控制台正在开发); <br>9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; <br>10、封装的TclFace页面扩展包,可以通过面向对象的tcl脚本生成各种平台的页面功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值