动态生成数据--零散烈士陵园【广宁县】

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
    }
}


效果图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值