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

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

动态生成数据--零散烈士陵园【广宁县】的相关文章

js动态生成数据列表

我们通常会使用table标签来展示数据内容,由于需要展示的数据内容是随时更换的,所以不可能将展示的数据列表写死在html写死在页面中,而是需要我们根据后台传来的数据随时更换,这个时候就需要我们使用js来动态生成表格. 首先我们需要先写好页面的样式. html部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; chars

抓取js动态生成数据

最近在抓数据,一般的网页数据抓取相对容易一些,今天在抓电视猫的节目单,发现有些数据时抓取不到的,Java端得到的HTML文件里面没有某一段代码,查了很多资料,发现说是js动态生成的数据,无法直接抓取,有一种解决方法是利用找到ajax请求地址和参数,重新抓取,该方法存在一个问题,就是当参数被加密过时,该方法就不好用了,所以,这里用了一个办法,就是利用HTMLunit来抓取(可以利用jsuop来处理HTML文件),jar包下载地址:http://download.csdn.net/detail/jo

爬虫案例(js动态生成数据)

需求:爬取https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.html页面中的新闻数据. 分析: 1.首先通过分析页面会发现该页面中的新闻数据都是动态加载出来的,并且通过抓包工具抓取数据可以发现动态数据也不是ajax请求获取的动态数据(因为没有捕获到ajax请求的数据包),那么只剩下一种可能,该动态数据是js动态生成的. 2.通过抓包工具查找到底数据是由哪个js请求产生的动态

根据类型动态生成数据 html锚点使用 分页 待完成

{ "sucess":"true", "list": [ { "id":1, "type":"common", "name":"moudule1", "children": [ { "id":2, "type":"suse", "name":&quo

东软软件动态生成对数据表更新操作的方法

1 public string CreatUpdate() 2 { 3 4 StringPlus strclass = new StringPlus(); 5 StringPlus strclass1 = new StringPlus(); 6 StringPlus strclass2 = new StringPlus(); 7 //方法注释 8 strclass.AppendSpaceLine(2, "/// <summary>"); 9 strclass.AppendS

JS动态生成表格后 合并单元格

JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单元格操作,在做之前也试着google下,但是网上没有碰到这方面的需求,所以自己写了一个简单的.用文字描述需求太费劲了,如下图所示: 1. 没有合并之前的图如下: 2. 合并之后的图如下: 如上所示:是根据相邻的编号相同 进行单元格合并. 先看看实现后的效果再聊吧! JSfiddle链接地址如下: 点

用Aspose.Words for .NET动态生成word文档中的数据表格

1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

C#动态生成Word文档并填充数据

C#也能动态生成Word文档并填充数据 http://www.cnblogs.com/qyfan82/archive/2007/09/14/893293.html 引用http://blog.csdn.net/mengyao/archive/2007/09/13/1784079.aspx using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.

python爬取ajax动态生成的数据 以抓取淘宝评论为例子

在学习python的时候,一定会遇到网站内容是通过ajax动态请求.异步刷新生成的json数据的情况,并且通过python使用之前爬取静态网页内容的方式是不可以实现的,所以这篇文章将要讲述如果在python中爬取ajax动态生成的数据. 至于读取静态网页内容的方式,有兴趣的可以查看博客内容. 这里我们以爬取淘宝评论为例子讲解一下如何去做到的. 这里主要分为了四步: 一 获取淘宝评论时,ajax请求链接(url) 二 获取该ajax请求返回的json数据 三 使用python解析json数据 四