C#使用Nvelocity、Json、Ajax读取.csv文件Datatable分页

版权声明:本文为博主原创文章,未经博主允许也可以转载,但是烦请标明博客来源,谢谢。https://blog.csdn.net/qq_40128550/article/details/88638881


引用dll文件:Ajax.dll;Jayrock.Json.dll;NVelocity.dll;NVelocityTemplateEngine.dll
.csv表格数据600多条,这里直截图样式

在这里插入图片描述

**

aspx.cs类

**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Jayrock.Json;
using NVelocityTemplateEngine.Interfaces;
using NVelocityTemplateEngine;
using Jayrock.Json.Conversion;
using System.Collections;
using System.Data;
namespace Dome
{
    public partial class _Defualt : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            Ajax.Utility.RegisterTypeForAjax(typeof(_Defualt));
        }
        /// <summary>
        /// </summary>
        /// <param name="page">每页的数据</param>
        /// <returns></returns>
        [Ajax.AjaxMethod()]
        public string GetList(int page)
        {
            //调用构造函数
            var myinfodal = new InfoModel();
            var data = myinfodal.GetList(page);
            JsonTextWriter writer = new JsonTextWriter();
            Jayrock.Json.Conversion.JsonConvert.Export(data, writer);
            string jsonStr = writer.ToString();
            jsonStr = "{\"list\":" + jsonStr + "}";

            //引用模板
            INVelocityEngine fileEngine = NVelocityEngineFactory.CreateNVelocityFileEngine(Server.MapPath("~/Model/"), true);
            JsonObject jsonObj = (JsonObject)JsonConvert.Import(jsonStr);
            JsonArray jagroup = (JsonArray)jsonObj["list"];
            IDictionary ht = new Hashtable();
            ht.Add("infos", jagroup);
            //ht.Add("Common", new Common());
            string multiJsonResult = fileEngine.Process(ht, "index.htm");
            return multiJsonResult;
        }
        [Ajax.AjaxMethod()]
        public int GetCount()
        {
            string file = "C:\\Users\\mt\\Desktop\\Dome\\Dome\\Model\\Data.csv";
            //调用构造函数
            InfoModel cv = new InfoModel();
            DataTable dt = cv.Csv(file);
            //查询总数
            int count = Convert.ToInt32(dt.Rows.Count);
            return count;
        }
    }
}
**

Info.cs

**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Text.RegularExpressions;
using System.IO;

namespace Dome
{

    [Serializable]
    public class _Info
    {
        
        private int _id;
        private string _name;
        DateTime _createtime;
        /// <summary>
        /// 
        /// </summary>
        public int id
        {
            set { _id = value; }
            get { return _id; }
        }
        /// <summary>
        /// 
        /// </summary>
        public string name
        {
            set { _name = value; }
            get { return _name; }
        }

        public DateTime createtime
        {
            set { _createtime = value; }
            get { return _createtime; }
        }
    }
    public class InfoModel
    {
        public List<_Info> GetList(int n)
        {
            List<_Info> info = new List<_Info>();
            string file = "C:\\Users\\mt\\Desktop\\Dome\\Dome\\Model\\Data.csv";
            DataTable st = Csv(file);
            //获取数据总条数
            int count = Convert.ToInt32(st.Rows.Count);
            //每页10条数据获取总页数
            int pagecount = count / 10;
            //如果有一页不满10条数据自动加一页
            if (count % 10 != 0)
            {
                pagecount++;
            }
            //该页面最后一条显示的数据
            int a = n * 10;
            //该页面第一条显示的数据
            int b = (n - 1) * 10;
            DataTable dt = new DataTable();
            //克隆表结构
            dt = st.Clone();
            //如果总页数大于输入的页数
            if (pagecount >= n)
            {
                if (a > count)
                {   //循环添加最后一页的数据
                    for (int i = b; i < count; i++)
                    {
                        //将最后的几条的数据复制到新的datatable里面
                        dt.ImportRow(st.Rows[i]);
                    }
                }
                else
                {
                    //循环添加指定的行数信息
                    for (int i = b; i < a; i++)
                    {   //将指定条数的数据复制到新的datatable里面
                        dt.ImportRow(st.Rows[i]);
                    }
                }
            }
           
            //将datatable中的数据循环放在inface类的list数组中
            foreach (DataRow item in dt.Rows)
            {
                _Info fc = new _Info();
                fc.id = Convert.ToInt32(item["ID"]);
                fc.name = Convert.ToString(item["Name"]);
                fc.createtime = Convert.ToDateTime(item["Createtime"]);
                info.Add(fc);
            }
            //返回筛选好的inface类的list数组
            return info;

        }
        /// <summary> 
        /// 读取Csv文件返回DataSet 
        /// </summary> 
        /// <returns>Csv内容</returns> 
        public DataTable Csv(string filePath)
        {
            filePath = "C:\\Users\\mt\\Desktop\\Dome\\Dome\\Model\\Data.csv";
            int n = 0;
            DataTable dt = new DataTable();
            String csvSplitBy = "(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)";
            //读取文件
            StreamReader reader = new StreamReader(filePath, System.Text.Encoding.Default, false);
            int i = 0, m = 0;
            //返回下一个字符
            reader.Peek();
            //如果返回的下一个字符大于零
            while (reader.Peek() > 0)
            {   //m自身加一
                m = m + 1;
                //读取一行数据
                string str = reader.ReadLine();
                //如果m大于等于n+1
                if (m >= n + 1)
                {
                    if (m == n + 1) //如果是字段行,则自动加入字段。  
                    {
                        MatchCollection mcs = Regex.Matches(str, csvSplitBy);
                        foreach (Match mc in mcs)
                        {
                            dt.Columns.Add(mc.Value); //增加列标题  
                        }
                    }
                    else
                    {
                        MatchCollection mcs = Regex.Matches(str, "(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)");
                        i = 0;
                        System.Data.DataRow dr = dt.NewRow();
                        foreach (Match mc in mcs)
                        {
                            dr[i] = mc.Value;
                            i++;
                        }
                        dt.Rows.Add(dr);  //DataTable 增加一行       
                    }
                }
            }
            return dt;
        }
    }
}

**

Nvelocity模板获取数据

**

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>无标题页</title>

    <link href="../js/pagination.css" rel="stylesheet" type="text/css" />
<style type="text/css">
body{font-size:84%; color:#333333; line-height:1.4;}
a{color:#34538b;}
#Searchresult{width:300px; height:100px; padding:20px; background:#f0f3f9;}
</style>


    <script src="jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

</script> 
</head>
<body>

<!--begin main--> 
<div id="main">

<div class="list"> 
    <ul> 
  <b>  </b>   
  #set( $pagesize = 10 )
   #foreach($info in $infos)
<li>$info.id $info.name $info.createtime.substring(0,10)</li>
##
#set($value = $velocityCount) 
#end 
    </ul>
</div>  
 
</div>
	
<!--end main-->
 </body>
</html> 

**

前台分页及获取数据

**

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Defualt.aspx.cs" Inherits="Dome._Defualt" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>ajax分页</title>  
<style type="text/css">  
.pagination {font-family: Tahoma;font-size: 12px;height: 22px;margin: 5px 10px;text-align: left;}  
.pagination a,.page-cur,.page-start,.page-end,.page-disabled,.page-skip {  
height:22px;line-height:22px;margin:0 3px 0 0;text-align:center;vertical-align:middle;white-space:nowrap;}  
.pagination input {border-width: 1px;}  
.page-start, .pagination a, .page-end, .page-disabled {border: 1px solid #CCCCCC;padding: 0 5px;}  
.pagination a {text-decoration: none;}  
.page-cur {background-color: #FFEDE1;border: 1px solid #FD6D01;color: #FD6D01;font-weight: 700;padding: 0 5px;}  
.page-disabled {color: #CCCCCC;}  
.page-skip {color: #666666;padding: 0 3px;}  
</style>  
</head>  
<body>
<form id="Form1" runat="server">
  <h3>Nvelocity、Json、Ajax读取.csv分页</h3>  
<div id="list"  ></div>
<div id="pageNav"></div>
</form>
</body>   
</html>
 <script type="text/javascript" language="javascript">
     //同步调用
     function Getjson(curPage) {
         var _data = _Defualt.GetList(curPage).value;
         document.getElementById("list").innerHTML = _data;
     }
     //异步调用
     function GetPageList(curPage) {
         _Defualt.GetList(curPage, callback);
     }
     function callback(responseObj) {
         //渲染到dom中  
         document.getElementById("list").innerHTML = responseObj.value;

     }
       
    </script>
<script type="text/javascript">
    testPage(1);
    function testPage(curPage) {
        var count = _Defualt.GetCount().value;
        var pageSize = 10;
        GetPageList(curPage);
        supage('pageNav', 'testPage', '', curPage, count, pageSize);
        //  alert(count);
    }
    /**  
    * @param {String} divName 分页导航渲染到的dom对象ID 
    * @param {String} funName 点击页码需要执行后台查询数据的JS函数 
    * @param {Object} params 后台查询数据函数的参数,参数顺序就是该对象的顺序,当前页面一定要设置在里面的 
    * @param {String} total 后台返回的总记录数 
    * @param {Boolean} pageSize 每页显示的记录数,默认是10 
    */
    function supage(divId, funName, params, curPage, total, pageSize) {
        var output = '<div class="pagination">';
        var pageSize = parseInt(pageSize) > 0 ? parseInt(pageSize) : 10;
        if (parseInt(total) == 0 || parseInt(total) == 'NaN') return;
        var totalPage = Math.ceil(total / pageSize) + 1;
        var curPage = parseInt(curPage) > 0 ? parseInt(curPage) : 1;

        //从参数对象中解析出来各个参数  
        var param_str = '';
        if (typeof params == 'object') {
            for (o in params) {
                if (typeof params[o] == 'string') {
                    param_str += '\'' + params[o] + '\',';
                }
                else {
                    param_str += params[o] + ',';
                }
            }
            //alert(111);  
        }
        //设置起始页码  
        if (totalPage > 10) {
            if ((curPage - 5) > 0 && curPage < totalPage - 5) {
                var start = curPage - 5;
                var end = curPage + 5;
            }
            else if (curPage >= (totalPage - 5)) {
                var start = totalPage - 10;
                var end = totalPage;
            }
            else {
                var start = 1;
                var end = 10;
            }
        }
        else {
            var start = 1;
            var end = totalPage;
        }

        //首页控制  
        if (curPage > 1) {
            output += '<a href="javascript:' + funName + '(' + param_str + '1);" title="第一页" class="page-first">首页</a>';
        }
        else {
            output += '<span class="page-disabled">首页</span> ';
        }
        //上一页菜单控制  
        if (curPage > 1) {
            output += '<a href="javascript:' + funName + '(' + param_str + (curPage - 1) + ');" title="上一页" class="page-previous">上一页</a>';
        }
        else {
            output += '<span class="page-disabled">上一页</span>';
        }

        //页码展示  
        for (i = start; i <= end; i++) {
            if (i == curPage) {
                output += '<a href="javascript:;" class="page-cur">' + curPage + '</a>';
            }
            else {
                output += '<a href="javascript:' + funName + '(' + param_str + i + ');">' + i + '</a>';
            }
        }
        //下一页菜单控制  
        if (totalPage > 1 && curPage < totalPage) {
            output += '<a title="下一页" href="javascript:' + funName + '(' + param_str + (curPage + 1) + ');" class="page-next">下一页</a>';
        }
        else {
            output += '<span class="page-disabled">下一页</span>';
        }
        //最后页控制  
        if (curPage < totalPage) {
            output += '<a title="最后页" href="javascript:' + funName + '(' + param_str + totalPage + ');" class="page-end">末页</a>';
        }
        else {
            output += '<span class="page-disabled">末页</span>';
        }

        output += '</div>';
        //渲染到dom中  
        document.getElementById(divId).innerHTML = output;
    };  
</script> 

只要头发在,代码不停敲。

猜你喜欢

转载自blog.csdn.net/qq_40128550/article/details/88638881
今日推荐