Winform/Sunny.UI的DataGridView数据展示、uiPagination分页
一准备1数据库CREATE DATABASE lwq; --创建数据库 USE lwq; --使用数据库 --创建表 CREATE TABLE diviceinfo ( id INT IDENTITY(1,1) NOT NULL, -- 主键 diviceName NVARCHAR(100) NOT NULL, -- 设备名称 status TINYINT NOT NULL, -- 设备状态(0:运行,1故障,2:待机,3:维修中) location NVARCHAR(200) NULL, -- 设置位置 manufacturer NVARCHAR(100) NULL, -- 制造商 purchaseDate DATETIME NULL, -- 购买日期 diviceTypeId INT NOT NULL, -- 设备类型Id CONSTRAINT PK_diviceinfo PRIMARY KEY CLUSTERED (id) );2框架搭建框架MODEL、DAL、BLL、UI如图。右键解决方案点击添加新建项目选择类库命名为MODEL、DAL、BLL然后右键解决方案点击添加新建项目选择Windows窗体应用命名为UI。3控件3.1安装依赖包右键点击UI选择NuGet包安装Sunny.UI包3.2控件布局在UI里面自带的Form1里面选择控件uiDataGridView数据展示、uiPagination分页控件。点击uiDataGridView控件右上角的三角形。1.选择添加列并且设置页眉文本为数据库对应的列名这只是一个文本展示随意取但是为了方便辨认使用与数据库字段对应的列名编号、名称、状态、位置、厂商、日期、类型2.选择编辑列将所有列的DataPropertyName改为对应英文同理随意但是需要与后面的model属性相同。二Model在MODEL里面添加类namespace MODEL { public class DiviceInfoMODEL { public int ID { get; set; } public string diviceName { get; set; } public int status { get; set; } public string location { get; set; } public string manufacturer { get; set; } public DateTime purchaseDate { get; set; } public int diviceTypeId { get; set; } } }三DAL在DAL里面添加类里面需要进行两个方法的编写:获取所有数据、获取所有数据数量using MODEL; using UTIL; namespace DAL { public class DiviceInfoDAL { //获取数据 public ListDiviceInfoMODEL GetDiviceInfo(int Page,int PageSize ) { DAO d new DAO(); try { ListDiviceInfoMODEL diviceInfoMODELs new ListDiviceInfoMODEL(); string sql $select * from diviceinfo order by ID offset {(Page - 1) * PageSize} rows fetch next {PageSize} rows only; SqlDataReader r d.query(sql); while (r.Read()) { diviceInfoMODELs.Add(new DiviceInfoMODEL { //一定判断是否存在数据库内容为nullDBnull ID r[0] DBNull.Value ? 0 : Convert.ToInt32(r[0]), diviceName r[1] DBNull.Value ? : r[1].ToString(), status r[2] DBNull.Value ? 0 : Convert.ToInt32(r[2]), location r[3] DBNull.Value ? 没有 : r[3].ToString(), manufacturer r[4] DBNull.Value ? 没有 : r[4].ToString(), purchaseDate r[5] DBNull.Value ? DateTime.Now : Convert.ToDateTime(r[5]), diviceTypeId r[6] DBNull.Value ? 0 : Convert.ToInt32(r[6]) }); } return diviceInfoMODELs; } catch (Exception e) { Console.WriteLine(e.Message); return new ListDiviceInfoMODEL(); } finally { d.close(); } } //获取总数 public int GetDiviceCount() { DAO d new DAO(); try { string sql select count(*) from diviceinfo; SqlDataReader r d.query(sql); if (r.Read()) { return Convert.ToInt32(r[0]); } return 0; } catch (Exception e) { Console.WriteLine(e.Message); return 0; } finally { d.close(); } } } }四BLL在BLL里面添加类里面也有两个方法对应DALusing DAL; using MODEL; using UTIL; namespace BLL { public class DiviceInfoBLL { private DiviceInfoDAL divicedal new DiviceInfoDAL(); //获取数据 public ListDiviceInfoMODEL GetDiviceInfo(int Page, int PageSize) { return divicedal.GetDiviceInfo(Page, PageSize); } //获取总数 public int GetDiviceCount() { return divicedal.GetDiviceCount(); } } }五UI双击Form1.cs设计的uiPagination控件进入UI界面代码编写using BLL; using MODEL; using Sunny.UI; namespace UI { public partial class Form1 : UIForm { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } //在设计页面属性选择事件选择shown表示页面加载完成后执行 private void Form1_Shown(object sender, EventArgs e) { GetDiviceInfo(); } //获取diviceinfo所有消息 private DiviceInfoBLL divicebll new DiviceInfoBLL(); private int Page 1; private int PageSize 3; private int Total 0; public void GetDiviceInfo() { ListDiviceInfoMODEL d divicebll.GetDiviceInfo(Page, PageSize); Total divicebll.GetDiviceCount(); uiDataGridView1.AutoGenerateColumns false;//确保不会自动生成列名 uiPagination1.PageSize PageSize;//初始化分页控件的每页数量 uiPagination1.TotalCount Total;//初始化分页控件的总数 //页数等于总数除每页数量所以不需要初始化 uiDataGridView1.DataSource null;//首先清空数据防止刷新导致数据堆积 uiDataGridView1.DataSource d;//加入数据 } private void uiPagination1_PageChanged(object sender, object pagingSource, int pageIndex, int count) { int newpage uiPagination1.ActivePage; Page newpage; GetDiviceInfo(); } } }六易错点1.MODEL的属性与uidatagridview的列属性datapropettyname不一致导致数据无法映射2.uidatagridview没禁止自动添加列导致列翻倍。uiDataGridView1.AutoGenerateColumns false3.没有初始化分页控件导致虽然数据成功展示但是显示了总共有50页数据。4.DAl里面应该判断数据是否等于DBNULL.VALUE然后使用三元运算符进行数据选择否者会导致数据没有添加5.每个类库、windows窗体应用间互相引用时using MODEL...需要右键项目的引用点击添加引用选择需要的项目。

相关新闻

第08篇-Workspace与上下文文件

第08篇-Workspace与上下文文件

【OpenClaw 从入门到精通】第 8 篇:Workspace 与上下文文件 本系列定位:零基础入门,从安装配置到高级架构全覆盖。无论你是开发者、运维工程师、还是技术爱好者,本系列带你彻底掌握 OpenClaw。 本篇你将学到 Workspace 概念与目录…

2026/11/7 16:31:55 阅读更多 →
第10篇-通道架构与Telegram配置

第10篇-通道架构与Telegram配置

【OpenClaw 从入门到精通】第 10 篇:通道架构概览与 Telegram 配置 本系列定位:零基础入门,从安装配置到高级架构全覆盖。无论你是开发者、运维工程师、还是技术爱好者,本系列带你彻底掌握 OpenClaw。 本篇你将学到 OpenClaw 25 …

2026/10/25 17:11:21 阅读更多 →
把浏览器搬进 Agent 沙箱:Lexmount 在 CubeSandbox 上的一线实战

把浏览器搬进 Agent 沙箱:Lexmount 在 CubeSandbox 上的一线实战

作者|Lexmount 揽岳智能全栈工程师 熊袖璋编者按| Agent 浏览器运行时是一个"复合工作负载"。它对AI Agent沙箱的运行有四个核心层面的硬需求:出站网络能否连到真实互联网、批量拉起时的启动时序稳不稳、每个沙箱的运行时状态能否…

2026/11/2 5:53:12 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻