C#动态生成数据篇
第一篇:测试动态生成数据(测试篇):
TODO:
关于测试篇:主要讲解理清业务思路,下一篇:动态生成数据(依据业务需求):
TODO:
1,输入生成数据
2,两种方式生成动态数据(这里采用服务器端应用程序生成数据)
讲解篇:1,服务端aspx,2,服务端后台
服务端aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LSLSM.aspx.cs" Inherits="BF.Web.lsly.LSLSM" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>广宁县零散烈士陵园</title>
<link href="../style/lingsan.css" rel="stylesheet" type="text/css" />
<script src="../../../script/jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
</script>
</head>
<body>
<form id="form1" runat="server">
<div runat="server">
<div class="lsbanner"></div>
<div class="lsdaoying"></div>
<asp:Literal ID="ltrdynamicCreation" runat="server"></asp:Literal>
<div class="lsfoot">
Copyright @ 2014 ***英烈网 All rights reserved.<br />
地址:*********南街镇车背垌达信路8号 电话:****-********<br />
技术支持:<a href="http://www.jqsoft.net" target="_blank">******有限公司</a>
</div>
</div>
</form>
</body>
</html>
服务端后台
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BF.Model;
using BF.IBLL.lsly;
using Base.Core.UnityFactory;
using System.Configuration;
using BF.Common;
using System.Diagnostics;
namespace BF.Web.lsly
{
public partial class LSLSM : BasePage
{
private Int32 DynamicCount { get; set; } //零散烈士陵园(广宁县):烈士墓数量
private string GetLSLSMkey
{
get
{
return ConfigurationManager.AppSettings["sOrgKey"].ToString();//机构编码:当前登录用户(如:广宁县机构key:5132b925-4a58-459c-8077-5ea54754d69a)
}
}
/*[编辑]使用属性SMartyrKey代替方法GetMartyrKeyBysRelationKey获取[烈士key:sMartyrKey] 2015/03/18 [方]*/
/*[编辑]属性SMartyrKey名称,书写调整(sMartyrKey变更SMartyrKey;自定义私有字段smartyrKey变更_smartyrKey) 2015/04/22 [方] */
private string _smartyrKey;//自定义私有属性_smartyrKey
public string SMartyrKey
{
get
{
if (!string.IsNullOrEmpty(_smartyrKey))
{
MartyrsAssociation modelAssoc = new MartyrsAssociation();
modelAssoc.sRelationKey = _smartyrKey;//烈士墓key:烈士key(烈士和烈士墓关联获取烈士key)
modelAssoc = iLSLSMBLL.GetModel(modelAssoc);//烈士和烈士墓关联实体
_smartyrKey = modelAssoc.sMartyrKey;//[sMartyrKey 烈士key]
}
return _smartyrKey;//这里取出私有属性_smartyrKey的值
}
}
private readonly Imemorial_MartyrTombBLL iLSMBLL = IOCFactory.GetIOCResolve<Imemorial_MartyrTombBLL>("Imemorial_MartyrTombBLL");//烈士墓接口
private readonly IMartyrsAssociationBLL iLSLSMBLL = IOCFactory.GetIOCResolve<IMartyrsAssociationBLL>("IMartyrsAssociationBLL");//烈士和烈士墓关联信息接口
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
/*[编辑]零散烈士墓方法 2015/03/18 [方]*/
DynamicCreation();
}
}
/*[新增]动态生成表格:接收一参数,实现查询数据库<获取数量> 按照现有风格排序 2015/03/10 [方]*/
/*
Tips:
1、在后台写C#程序,取得当前要操作的键值,然后根据键值查询数量[填充数据项](烈士系统中正在使用)
2、JS打印,AJAX读取数据库数据[填充数据项](暂时用不到)
* */
#region [广宁县零散烈士陵园]
public void DynamicCreation()
{
/*[测试:数据项来自于零散烈士墓信息] 根据传入条件查询[dbo.memorial_MartyrTomb]列表数据项*/
StringBuilder sb = new StringBuilder();
/*数据源:烈士墓,烈士和烈士墓*/
List<memorial_MartyrTomb> list = new List<memorial_MartyrTomb>();
memorial_MartyrTomb model = new memorial_MartyrTomb();
model.sOrgKey = GetLSLSMkey;
list = iLSMBLL.GetList(model);
if (list != null)
{
DynamicCount = list.Count() - 1;
}
/*方法实现*/
if (DynamicCount > 0)
{
int numberOfRows = DynamicCount / 20;//行数
int remainderRows = DynamicCount % 20;//行数余数
/*20 40 60,... 行数处理:行数减一,以便打印重复行*/
if (remainderRows == 0)
{
numberOfRows = numberOfRows - 1;
}
int multiple = DynamicCount / 2;//倍数
int remainder = DynamicCount % 2;//余数
/*
TODO:左边是2的奇数倍 右边是2的偶数倍[依据:倍数,余数]
20为一行[单位:行数(20一行)],
逐次计算[依据第一行],
[特殊处理]补空td
[特殊处理]合并多行一起遍历
*/
/*[编辑]动态生成表格:合并行(第一行和其它行合并) 2015/03/10 [方]*/
for (int i = 0; i <= numberOfRows; i++)//遍历行数
{
/*排版风格:依据园区英烈.html*/
sb.Append("<div class=\"hang\">");
sb.Append("<div class=\"hangname\">");
/*[编辑]动态生成表格:每一行第一列[新增]行编号 2015/03/11 [方]*/
string input = (i + 1).ToString();
input = GetRowsName(input);
sb.Append(input);
sb.Append("</div>");
sb.Append("<div class=\"yinglei\">");
sb.Append("<ul>");
for (int j = 1; j <= 20; j++)
{
/*[特殊处理]:判断当前行,当前列是否有值:有,打印td 没有,补空td*/
/*[思路]:左边,以19为单位,逐次累加20 与 当前数量比对*/
int tempOdd = 19 + (20 * i);//左边计算单位:19+20的倍数
string skey = "";//[sRelationKey 烈士墓key]
string lsm = "";//[暂时:作为烈士名 后期待调整]
string sLSSkey = "";//[sMartyrKey 烈士key]
if (j <= 10)
{
int rewritetempOdd = ((tempOdd - (2 * (j - 1))) - 1);
if (DynamicCount < rewritetempOdd)
{
sb.Append("<li>");
sb.Append("</li>");
}
else
{
sb.Append("<li>");
skey = list[rewritetempOdd].sKey;//[sRelationKey 烈士墓key]
lsm = list[rewritetempOdd].sJieS;//[暂时:作为烈士名 后期待调整]
/*[编辑]使用属性sMartyrKey代替方法GetMartyrKeyBysRelationKey获取[烈士key:sMartyrKey] 2015/03/18 [方]*/
//sLSSkey = GetMartyrKeyBysRelationKey(skey);//[sMartyrKey 烈士key]
_smartyrKey = skey;//这里给私有属性_smartyrKey赋值
sLSSkey = SMartyrKey;//这里给私有变量sLSSkey赋值(自定义属性SMartyrKey:依据烈士墓key获取烈士key的值)
sb.Append("<a href='/CemeteryWebSite/BritishListDetail.aspx?sType=6&sKey=" + sLSSkey + "' target='_parent'>");
sb.Append("<span class=\"lsmu\">" + lsm + "</span>");
sb.Append("</a>");
sb.Append("</li>");
}
}
else
{
/*[思路]:右边,以2的倍数为单位,逐次累加20 20 18 16 与 当前数量比对*/
int rewrite = j - 10;
int tempEven = (2 * rewrite) + (20 * i) - 1;//右边计算单位:2的倍数+20的倍数
if (DynamicCount < (tempEven))
{
sb.Append("<li>");
sb.Append("</li>");
}
else
{
sb.Append("<li>");
skey = list[tempEven].sKey;//[sRelationKey 烈士墓key]
lsm = list[tempEven].sJieS;//[暂时:作为烈士名 后期待调整]
/*[编辑]使用属性sMartyrKey代替方法GetMartyrKeyBysRelationKey获取[烈士key:sMartyrKey] 2015/03/18 [方]*/
//sLSSkey = GetMartyrKeyBysRelationKey(skey);//GetMartyrKeyBysRelationKey:返回烈士key [sMartyrKey 烈士key]
_smartyrKey = skey;//这里给私有属性_smartyrKey赋值
sLSSkey = SMartyrKey;//这里给私有变量sLSSkey赋值(自定义属性SMartyrKey:依据烈士墓key获取烈士key的值)
sb.Append("<a href='/CemeteryWebSite/BritishListDetail.aspx?sType=6&sKey=" + sLSSkey + "' target='_parent'>");//烈士链接(链接至:园区英烈--烈士英名录)
sb.Append("<span class=\"lsmu\">" + lsm + "</span>");//烈士姓名
sb.Append("</a>");
sb.Append("</li>");
}
}
}
sb.Append("</ul>");
sb.Append("</div>");
sb.Append("</div>");
/*[编辑]动态生成表格:10行间隔一行(<tr></tr>) 2015/03/12 [方]*/
int lineSpacing = (i + 1) % 10;//行分栏:10行添加一空行,去除第一行
if (lineSpacing == 0 && i != 1)
{
sb.Append("<div class=\"fengge\"></div>");
}
}
}
else
{
/*[新增]提示信息:暂无烈士纪念碑信息 2015/03/11 [方] */
sb.Append("<div style=\"width:1100px;height:60px;margin:0px auto;\">");
sb.Append("<span style=\"color:red;font-size:24px;font:'华文彩云,楷体,宋体';\">暂无零散烈士纪念碑信息...</span>");
sb.Append("<div>");
/*[新增]提示信息:调整页面高度,拉伸提示信息与底部的距离 2015/03/12 [方]*/
sb.Append("<div style=\"height:410px;\"></div>");
}
this.ltrdynamicCreation.Text = sb.ToString();
}
#endregion
/*[编辑]注释:通过烈士墓key(通过烈士和烈士墓关联信息)获取烈士key 2015/03/18 [方]*/
/// 通过烈士墓key(通过烈士和烈士墓关联信息)获取烈士key
/// </summary>
/// <param name="sRelationKey">烈士墓key</param>
/// <returns>烈士key</returns>
//private string GetMartyrKeyBysRelationKey(string sRelationKey)
//{
// string sLSSkey = "";//[sMartyrKey 烈士key]
// if (!string.IsNullOrEmpty(sRelationKey))
// {
// MartyrsAssociation modelAssoc = new MartyrsAssociation();
// modelAssoc.sRelationKey = sRelationKey;//烈士墓key:烈士key(烈士和烈士墓关联获取烈士key)
// modelAssoc = iLSLSMBLL.GetModel(modelAssoc);//烈士和烈士墓关联实体
// sLSSkey = modelAssoc.sMartyrKey;//[sMartyrKey 烈士key]
// }
// return sLSSkey;
//}
/*[新增]非功能性辅助方法:实现数字(0~9)转换成汉字(零~九) 2015/03/12 [方]*/
/*TODO:
非功能性辅助方法:
1、实现数字(0~9)转换成汉字(零~九)
2、2位数字:0补十
3、2位数字及以上:0补零(不变)
4、特殊行(十的整数倍行,十一~十九行) 普通行(剩余行)涉及调用方法名称:GetOneNine(string input);
*/
/*[新增]数字转换为汉字(按照现有风格) 2015/03/12 [方]*/
#region 非功能性辅助方法,数字转换为汉字(按照现有风格)方法名称:GetRowsName(string input);
private string GetRowsName(string input)
{
if (String.IsNullOrEmpty(input)) return ""; // 如果输入为空则返回空
string src = input; // 待转换字符串
string ret = ""; // 转换返回字符串
int rewrite = Convert.ToInt32(src);
if (src.Length == 2 && ((rewrite % 10) == 0))//处理10的整数倍的数字
{
switch (src[0])
{
case '1':
ret += "十行";
break;
case '2':
ret += "二十行";
break;
case '3':
ret += "三十行";
break;
case '4':
ret += "四十行";
break;
case '5':
ret += "五十行";
break;
case '6':
ret += "六十行";
break;
case '7':
ret += "七十行";
break;
case '8':
ret += "八十行";
break;
case '9':
ret += "九十行";
break;
default:
break;
}
return ret;
}
for (int i = 0; i < src.Length; i++)
{
if (src.Length == 2 && src[0] == '1' && !src.Equals("10"))//处理11~19的数字
{
ret += "十" + GetOneNine(src[1].ToString());
return ret;
}
}
ret = GetOneNine(src);//处理其它数字
return ret;
}
#endregion
/*[新增]处理11~19的数字及其它 2015/03/12 [方]*/
#region 处理11~19的数字及其它(通用方法)名称:GetOneNine(string input)
private string GetOneNine(string input)
{
if (String.IsNullOrEmpty(input)) return ""; // 如果输入为空则返回空
string src = input; // 待转换字符串
string ret = ""; // 转换返回字符串
for (int i = 0; i < src.Length; i++)
{
char output = src[i];
switch (output)
{
case '0':
ret += "零";
break;
case '1':
ret += "一";
break;
case '2':
ret += "二";
break;
case '3':
ret += "三";
break;
case '4':
ret += "四";
break;
case '5':
ret += "五";
break;
case '6':
ret += "六";
break;
case '7':
ret += "七";
break;
case '8':
ret += "八";
break;
case '9':
ret += "九";
break;
default:
break;
}
}
return ret + "行";
}
#endregion
}
}