C#动态生成数据篇:
第一篇:测试动态生成数据(测试篇):
TODO:
关于测试篇:主要讲解理清业务思路,下一篇:动态生成数据(依据业务需求):
TODO:
1,输入生成数据
2,两种方式生成动态数据(这里采用服务器端应用程序生成数据)
讲解篇:1,服务端aspx,2,服务端后台
1,服务端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号 电话:0758-8635060<br /> 技术支持:<a href="http://www.jqsoft.net" target="_blank">合肥晶奇电子科技有限公司</a> </div> </div> </form> </body> </html>
2,服务端后台
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 } }
时间: 2024-10-10 14:47:20