datatable、sql转list加分页

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Test.DButility
{
    public class DatableToList<T> where T : new()
    {
        public static List<T> ToList(string sql)
        {
            DBHelperSQL db = new DBHelperSQL();
            DataTable dt = db.fsQuery(sql);
            List<T> list = new List<T>();
            if (dt != null && dt.Rows.Count > 0)
            {
                T t = new T();
                PropertyInfo[] propertys = t.GetType().GetProperties();
                foreach (DataRow dr in dt.Rows)
                {
                    t = new T();
                    foreach (PropertyInfo pi in propertys)
                    {
                        if (dt.Columns.Contains(pi.Name))
                        {
                            if (!pi.CanWrite) continue;
                            object value = dr[pi.Name];
                            if (value != DBNull.Value)
                                pi.SetValue(t, value, null);
                        }
                    }
                    list.Add(t);
                }
            }
            return list;
        }

        public async static Task<List<T>> ToListAsync(string sql)
        {
            DataTable dt = await DBHelperSQL.QuerySqlAsync(sql);
            List<T> list = new List<T>();
            if (dt != null && dt.Rows.Count > 0)
            {
                T t = new T();
                PropertyInfo[] propertys = t.GetType().GetProperties();
                foreach (DataRow dr in dt.Rows)
                {
                    t = new T();
                    foreach (PropertyInfo pi in propertys)
                    {
                        if (dt.Columns.Contains(pi.Name))
                        {
                            if (!pi.CanWrite) continue;
                            object value = dr[pi.Name];
                            if (value != DBNull.Value)
                                pi.SetValue(t, value, null);
                        }
                    }
                    list.Add(t);
                }
            }
            return list;
        }

        public static T ToModel(string sql)
        {
            DBHelperSQL db = new DBHelperSQL();
            T t = new T();
            DataTable dt = db.fsQuery(sql);
            if (dt != null && dt.Rows.Count > 0)
            {
                PropertyInfo[] propertys = t.GetType().GetProperties();
                foreach (DataRow dr in dt.Rows)
                {
                    t = new T();
                    foreach (PropertyInfo pi in propertys)
                    {
                        if (dt.Columns.Contains(pi.Name))
                        {
                            if (!pi.CanWrite) continue;
                            object value = dr[pi.Name];
                            if (value != DBNull.Value)
                                pi.SetValue(t, value, null);
                        }
                    }
                }
            }
            return t;
        }

        public static List<T> ToList(string sql, int pageindex, int pagesize, out int sumcount, out decimal PageCount)
        {
            DBHelperSQL db = new DBHelperSQL();
            sumcount = db.fsQuery(sql).Rows.Count;
            if (pageindex > 0 && pagesize > 0)
            {
                int startIndex = (pageindex - 1) * pagesize;
                sql = sql + $" limit {startIndex} , {pagesize}";
                PageCount = Math.Ceiling(Convert.ToDecimal(sumcount) / Convert.ToDecimal(pagesize));
                if (pageindex < 1) pageindex = 1;
                if (pageindex > PageCount && PageCount > 0) pageindex = Convert.ToInt32(PageCount);
            }
            else
            {
                PageCount = 1m;
            }

            DataTable dt = db.fsQuery(sql);
            List<T> list = new List<T>();
            if (dt != null && dt.Rows.Count > 0)
            {
                T t = new T();
                PropertyInfo[] propertys = t.GetType().GetProperties();
                foreach (DataRow dr in dt.Rows)
                {
                    t = new T();
                    foreach (PropertyInfo pi in propertys)
                    {
                        if (dt.Columns.Contains(pi.Name))
                        {
                            if (!pi.CanWrite) continue;
                            object value = dr[pi.Name];
                            if (value != DBNull.Value)
                                pi.SetValue(t, value, null);
                        }
                    }
                    list.Add(t);
                }
            }
            return list;
        }

        public static ResultModelNew<PageModelNew<List<T>>> ToPageList(String sql, int PageIndex, int PageSize)
        {
            ResultModelNew<PageModelNew<List<T>>> request = new ResultModelNew<PageModelNew<List<T>>>();
            PageModelNew<List<T>> pagemode = new PageModelNew<List<T>>();
            try
            {
                var returnlist = ToList(sql, PageIndex, PageSize, out int sumcount, out decimal PageCount);
                pagemode.Count = sumcount;
                pagemode.ListData = returnlist;
                pagemode.PageCount = PageCount;
                request.ResultData = pagemode;
                request.code = 1;
                request.Message = "成功";
            }
            catch (Exception e)
            {
                request.code = 0;
                request.Message = "分页异常:";
                return request;
            }
            return request;
        }

        public static async Task<ResultModelNew<PageModelNew<List<T>>>> ToPageListAsync(String sql, int PageIndex, int PageSize)
        {
            ResultModelNew<PageModelNew<List<T>>> request = new ResultModelNew<PageModelNew<List<T>>>();
            PageModelNew<List<T>> pagemode = new PageModelNew<List<T>>();
            try
            {
                var returnlist = ToList(sql, PageIndex, PageSize, out int sumcount, out decimal PageCount);
                pagemode.Count = sumcount;
                pagemode.ListData = returnlist;
                pagemode.PageCount = PageCount;
                request.ResultData = pagemode;
                request.code = 1;
                request.Message = "成功";
            }
            catch (Exception e)
            {
                request.code = 0;
                request.Message = "分页异常:";
                return request;
            }
            return request;
        }

        public static ResultModelNew<PageModelNew<List<T>>> ToPageSkipList(List<T> list, int PageIndex, int PageSize)
        {
            ResultModelNew<PageModelNew<List<T>>> request = new ResultModelNew<PageModelNew<List<T>>>();
            PageModelNew<List<T>> pagemode = new PageModelNew<List<T>>();
            try
            {
                pagemode.Count = list.Count;
                if (PageIndex == null || PageSize == null || PageIndex == 0 || PageSize == 0)
                {
                    pagemode.ListData = list;
                }
                else
                {
                    pagemode.PageCount = Math.Ceiling(Convert.ToDecimal(pagemode.Count / PageSize));
                    pagemode.ListData = list.Skip((PageIndex - 1) * PageSize).Take(PageSize).ToList();
                }
                request.ResultData = pagemode;
                request.code = 1;
                request.Message = "成功";
            }
            catch (Exception e)
            {
                request.code = 0;
                request.Message = "分页异常:";
                return request;
            }
            return request;
        }


        public static ResultModelNew<PageModelNew<List<T>>> ToPageSkipList(string sql, int PageIndex, int PageSize)
        {
            ResultModelNew<PageModelNew<List<T>>> request = new ResultModelNew<PageModelNew<List<T>>>();
            PageModelNew<List<T>> pagemode = new PageModelNew<List<T>>();
            try
            {
                var list = ToList(sql, PageIndex, PageSize, out int sumcount, out decimal PageCount);
                pagemode.Count = list.Count;
                if (PageIndex == null || PageSize == null || PageIndex == 0 || PageSize == 0)
                {
                    pagemode.ListData = list;
                }
                else
                {
                    pagemode.PageCount = Math.Ceiling(Convert.ToDecimal(pagemode.Count / PageSize));
                    pagemode.ListData = list.Skip((PageIndex - 1) * PageSize).Take(PageSize).ToList();
                }
                request.ResultData = pagemode;
                request.code = 1;
                request.Message = "成功";
            }
            catch (Exception e)
            {
                request.code = 0;
                request.Message = "分页异常:";
                return request;
            }
            return request;
        }


    }
}

 转换后使用返回数据类型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test.DButility
{
    class ToPageListModel
    {
    }
    [Serializable]
    public class ResultModelNew
    {
        /// <summary>
        /// 消息
        /// </summary>
        public string Message { get; set; }

        /// <summary>
        /// 成功状态0查询成功,1失败
        /// </summary>
        public int code { get; set; }
        public string data { get; set; }
    }
    [Serializable]
    public class ResultModelNew<T> : ResultModelNew
    {
        //需要返回前端的数据
        public T ResultData { get; set; }
    }
    [Serializable]
    public class QueryPollingResultModelNew<T> : ResultModelNew
    {
        //需要返回的数据
        public T ResultData { get; set; }
        public string Sign { get; set; }
        public string Ratio { get; set; }
    }
    [Serializable]
    public class PageModelNew<T>
    {
        public Decimal PageCount { get; set; }
        public Decimal Count { get; set; }

        public T ListData { get; set; }

    }
}

3.swagger返回参数类型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Test.DButility
{
    public class PatientResponse
    {

    }

    /// <summary>
    /// 获取授权入参
    /// </summary>
    public sealed class ResponseBasic
    {
        /// <summary>
        /// 成功
        /// </summary>
        /// <param name="t"></param>
        /// <param name="code"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public static ResponseBasic ToSuccess(dynamic t, string code = "1", string message = "成功") =>
        new ResponseBasic()
        {
            data = t,
            code = code,
            message = message,
        };

        /// <summary>
        /// 异常
        /// </summary>
        /// <param name="code"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public static ResponseBasic ToError(string code = "0", string message = "异常") =>
        new ResponseBasic()
        {
            data = null,
            code = code,
            message = message
        };
        /// <summary>
        /// 失败
        /// </summary>
        /// <param name="t"></param>
        /// <param name="code"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public static ResponseBasic ToSuccessFalse(dynamic t, string code = "1", string message = "未查询到数据") =>
        new ResponseBasic()
        {
            data = t,
            code = code,
            message = message
        };
        /// <summary>
        /// 失败
        /// </summary>
        /// <param name="t"></param>
        /// <param name="code"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public static ResponseBasic ToFalse(string message, dynamic t = null, string code = "0") =>
        new ResponseBasic()
        {
            data = t,
            code = code,
            message = message
        };

        public string message { get; set; }

        public string code { get; set; }

        public dynamic data { get; set; }
    }

    public class RepNameAttribute : Attribute
    {
        /// <summary>
        /// 显示的名称
        /// </summary>
        public string Name { get; set; }
        public RepNameAttribute(string Name)
        {
            this.Name = Name;
        }

        /// <summary>
        /// 利用特性给实体赋值
        /// </summary>
        /// <typeparam name="T">返回实体</typeparam>
        /// <typeparam name="S"></typeparam>
        /// <param name="s"></param>
        /// <param name="name">特性对应属性名称</param>
        /// <returns></returns>
        public static List<T> PatReqMod<T, S>(S s, string attrName)
        {

            List<T> tlist = new();
            Type t = typeof(T);
            PropertyInfo[] pc = t.GetProperties();//获取到泛型所有属性的集合
            Type objType = typeof(S);
            foreach (PropertyInfo propInfo in objType.GetProperties())
            {
                //取属性上的自定义特性
                object[] objAttrs = propInfo.GetCustomAttributes(typeof(RepNameAttribute), true);
                if (objAttrs.Length > 0)
                {
                    var value = propInfo.GetValue(s);
                    RepNameAttribute attr = objAttrs[0] as RepNameAttribute;
                    T _obj = Activator.CreateInstance<T>();
                    foreach (PropertyInfo pi in pc)
                    {
                        if (pi.PropertyType.Equals(typeof(string)))//判断属性的类型是不是String
                        {
                            if (pi.Name == attrName)
                                pi.SetValue(_obj, attr.Name, null);//特性名称赋值
                            else
                                pi.SetValue(_obj, value, null);//其他属性赋值
                        }
                    }
                    tlist.Add(_obj);
                }
            }
            return tlist;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
再次声明 千万不要把XiaoQi.dll 跟 XiaoQi.XML 给分开 添的时候 一定要引用 不要直接复制DLL 不然没有方法注释 最强大分分页控件 华丽的分页控件 实用的分页控件 有最新最实用的方法 联系小柒 下面是 AspNetHelp 类 方法概述 ///Show()弹出对话框 ///重载Show()弹出对话框 并且跳界面 ///ShowJavascript()执行javascript脚本 ///FileDelete()给出文件虚拟路径删除文件 ///FileSize()获取上传文件大小 ///FileUpload()文件上传 路径upload/ 自动重命名 ///FileDownload()文件下载 调用方法如 FileDownload(Response,Server,文件虚拟路径) ///FileTxtWrite()写入TXT文本 给出要创建Txt 文本的地址 ///FileTxtReader()读取TXT文本 Txt 文本的地址 返回一个数组 每一行为数组里的一个元素 ///StringEncrypt() DES字符串密中文不可以密 ///StringDecrypt()DES解密字符串 ///StringMD5Encrypt()MD5密 ///StringPYChar()单个汉字返回该汉字首字母 ///StringRandom()生成指定位数的随机数 ///StringEdit()给出指定字符串长度多少位后用点显示... ///StringReplaceSpace()替换文本中的空格和换行 ///StringColor()改变字的颜色 ///StringNull()当对象是空的时候 为空字符串 ///StringConvert()汉字拼音 ///StringNumber()数字换中文 ///StringRep()url参数为中文时候密 ///StringRes()url参数为中文时候换解密 ///ShowWindowForm()弹出新窗口页面 ///ShowFormModalDialog()弹出模式窗口页面 ///SqlGetMaxID()给出表名列名 int类型 查询出最大列值+1 适用于主键 ///SqlGetSingle()执行一条计算查询结果语句,返回查询结果(object)。 ///SqlExecute()执行SQL语句,返回影响的记录数 ///SqlRunStr()执行SQL语句,不返回影响的记录数 ///SqlRunReturn()执行SQL语句,并返回第一行第一列结果 ///SqlGetReader()获得SqlDataReader对象 使用完须关闭DataReader,关闭数据库连接 ///SqlGetTable()执行查询语句,返回DataTable ///SqlDataSet()执行查询语句,返回DataSet ///SqlIsCunZai()执行Sql 语句查询是否有数据 如果没有返回假 ///SqlRunProc()执行存储过程 ///DataBindDropDownListDefault()DropDownList控件绑定 带默认选择项 如"请选择" ///DataBindDropDownList()DropDownList控件绑定 不带默认选择项 ///DataBindRadioButtonList()RadioButtonList控件绑定 默认第一个选中 ///DataBindCheckBoxList()CheckBoxList控件绑定 ///ElseIpAddr()调用此方法 返回当前登录的省市IP地址 ///ElseDataTimeIng()返回本地电脑的当前日期的年月日时分秒 动态的显示 JS实现 ///ElsePageLoad()页面载数据载完成呈现页面 ///ElseCkeck()返回页面验证码图片 使用方法:单独创建一个页面 在首次载事件里写 AspNetHelp.ElseCkeck(Page); 在使用验证码的页面直接写 img src="这个页面的路径" 注意验证码保存在 Session["CheckCode"]中 这里是区分大小写的 ///ElseColorRGB()由于QQ截图的取色会出现RGB的颜色 这里能换成16进制 分页控件详情请看内置文档
 JSF2.xdatatable分页控件与左侧菜单最简单应用   JSF2.x,功能强大,使用方便。全世界使用JSF的人越来越多。而且也有很多很好的控件给发出来了,如:richfaces、primefaces、myfaces等,就日前来讲primefaces功能很强大,控件很多,但有一点不好就是不支持IE6,特别是下拉列表,p:dialog等,其它的分页p:datatable实际使用起来总有不如意的地方。richfaces还支持可视化开发,可惜就是控件开发进度相比其它的慢了很多。下面帖我的控件的使用方法:   下载地址:http://download.csdn.net/detail/ptianfeng/4802713 一、分页具体使用方法如下(不多说,直接给你些颜色看看): 1. xhtml文件:    <html xmlns:ems="http://www.ems.com.cn" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:dataTable id="tableId" value="#{userlogMBean.defaultDataModel}" var="var" rows="10"> <h:column> <f:facet name="header"> <h:outputText value="" /> </f:facet> <h:outputText value="#{var.sqlid}" /> </h:column> </h:dataTable> <ems:page id="pageId" for="tableId" maxPage="5" /> 2. 相应的Managedbean: [java] view plaincopy /** * EMS 11185 限时未达邮费奉还 * @author 螃蟹 */ @SuppressWarnings(value = "serial") @ManagedBean(name = "userlogMBean") @ViewScoped() public class UserlogMBean extends PageListBaseBean implements Serializable { public PagedListDataModel getDefaultDataModel() { if (defaultDataModel == null) { defaultDataModel = new PagedListDataModel(pageSize) { public DataPage fetchPage(int startRow, int pageSize) { ArrayList<UserlogVo> dataList = new ArrayList<UserlogVo>(); List<Userlog> list = dao.getObjectList(jpql, pageSize, startRow); if (list != null) { for (Userlog u : list) { UserlogVo vo = new UserlogVo(); vo.setSqlid(u.getSqlid()); vo.setCode(u.getCode()); vo.setDate(u.getDate()); vo.setStation(u.getStation()); vo.setUserid(u.getUserid()); vo.setText(u.getText()); dataList.add(vo); } } int size = dao.getCountOption(jpql); DataPage dataPage = new DataPage(size, startRow, dataList); return dataPage; } }; } return defaultDataModel; } } 提示:关于PageListBaseBean更多的信息,可以参阅我在百度的blog(百度改版后,让我很QF,所以到CSDN来了): http://hi.baidu.com/kittopang/item/19af4e37c6ede2fae6bb7a11   至此,分页已经实现。下面是使用截图:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值