(C#)DataGrid实现自定义分页,鼠标移至变色,删除确认、可编辑,可删除

漂亮的datagridviewC#皮肤 漂亮的datagridview C#皮肤很不错的源代码 立即下载

先在数据库中定义存储过程,轻易实现百万级数据分页:

//@PageSize:分页大小,PageIndex:页号,@PageCount:总页数,@recordCount:记录数

CREATE PROCEDURE GetCustomDataPage @pageSize int, @pageIndex int, @pageCount int output, @recordCount int output AS

declare @SQL varchar(1000)

select @recordCount=count(*) from products

set @pageCount=ceiling(@recordCount*1.0/@pageSize)

if @pageIndex = 0 or @pageCount<=1

 set @SQL='select top '+str(@pageSize)+' productID,productName, unitPrice from products order by productID asc'

else if @pageIndex = @pageCount -1

 set @SQL='select * from ( select top '+str(@recordCount - @pageSize * @pageIndex)+' productID,productName, unitPrice from products order by productID desc) TempTable order by productID asc'

else  set @SQL='select top '+str(@pageSize) +' * from ( select top '+str(@recordCount - @pageSize * @pageIndex)+' productID,productName, unitPrice from products order by productID desc) TempTable order by productID asc'

exec(@SQL)

GO

好了,存储过程建好了,那么如何在.Net中使用呢?请看以下代码:

        private uint pageCount;  //总页数

        private uint recordCount;  //总记录数

 

        private DataSet GetPageData(uint pageSize, uint pageIndex)

        {

            string strConn = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];           

            SqlConnection conn = new SqlConnection(strConn);

 

            conn.Open();

 

            SqlCommand command = new SqlCommand("GetCustomDataPage",conn);  //第一个参数为存储过程名

            command.CommandType = CommandType.StoredProcedure;   //声明命令类型为存储过程

 

            command.Parameters.Add("@pageSize",SqlDbType.Int);

            command.Parameters["@pageSize"].Value = pageSize;

 

            command.Parameters.Add("@pageIndex",SqlDbType.Int);

            command.Parameters["@pageIndex"].Value = pageIndex;

 

            command.Parameters.Add("@pageCount",SqlDbType.Int);

            command.Parameters["@pageCount"].Value = pageCount;

            command.Parameters["@pageCount"].Direction = ParameterDirection.Output;  //存储过程中的输出参数

 

            command.Parameters.Add("@recordCount",SqlDbType.Int);

            command.Parameters["@recordCount"].Value = recordCount;

            command.Parameters["@recordCount"].Direction = ParameterDirection.Output; //存储过程中的输出参数

 

            SqlDataAdapter adapter = new SqlDataAdapter(command);

            DataSet ds = new DataSet();

            adapter.Fill(ds);           

 

            //获得输出参数值

            pageCount = Convert.ToUInt32(command.Parameters["@pageCount"].Value);

            recordCount = Convert.ToUInt32(command.Parameters["@recordCount"].Value);

           

            conn.Close();

            return ds;

        }

 

        //绑定数据到DataGrid中

        private void BindDataGrid()

        {

            DataSet ds = GetPageData((uint)dgProduct.PageSize,(uint)dgProduct.CurrentPageIndex);

            dgProduct.VirtualItemCount = (int)recordCount;

            dgProduct.DataSource = ds;

            dgProduct.DataBind();

        }

 

        //页面加载时就绑定DataGrid

        private void Page_Load(object sender, System.EventArgs e)

        {

            if(!Page.IsPostBack)

            {

               BindDataGrid();

            }

        }

        //用户翻页时事件处理

        private void dgProduct_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)

        {

            dgProduct.CurrentPageIndex = e.NewPageIndex;

            BindDataGrid();

        }

 

        //用户单击编辑按纽时事件处理

        private void dgProduct_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

        {

            dgProduct.EditItemIndex = e.Item.ItemIndex;

            BindDataGrid();

        }

 

        //用户单击取消按纽时事件处理

        private void dgProduct_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

        {

            dgProduct.EditItemIndex = -1;

            BindDataGrid();

        }

 

        //用户单击更新按纽时事件处理

        private void dgProduct_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

        {

            string strConn = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];           

            SqlConnection conn = new SqlConnection(strConn);

 

            conn.Open();

            //string strSQL = "update from products set productName=@productName, set unitPrice=@unitPrice where productID=@productID";

            string strSQL = "update products set productName=@productName where productID=@productID";

            SqlCommand command = new SqlCommand(strSQL,conn);

 

            command.Parameters.Add("@productName",SqlDbType.NVarChar,40);

            command.Parameters["@productName"].Value = ((TextBox)(e.Item.Cells[1].Controls[0])).Text.Trim();

 

            //command.Parameters.Add("@unitPrice",SqlDbType.Int);

            //command.Parameters["@unitPrice"].Value = Convert.ToInt32(((TextBox)(e.Item.Cells[2].Controls[0])).Text.Trim());

 

            command.Parameters.Add("@productID",SqlDbType.Int);

            command.Parameters["@productID"].Value = dgProduct.DataKeys[e.Item.ItemIndex];

 

            command.ExecuteNonQuery();

            conn.Close();

 

            dgProduct.EditItemIndex = -1;

            BindDataGrid();

        }

 

       //用户单击删除按纽时事件处理

        private void dgProduct_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

        {

            string strConn = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];

            SqlConnection conn = new SqlConnection(strConn);

 

            conn.Open();

            SqlCommand command = new SqlCommand("DeleteProduct",conn);

            command.CommandType = CommandType.StoredProcedure;

           

            command.Parameters.Add("@productID",SqlDbType.Int);

            command.Parameters["@productID"].Value = dgProduct.DataKeys[e.Item.ItemIndex];

 

            command.ExecuteNonQuery();

            BindDataGrid();

        }

 

        //实现删除确认及颜色交替显示功能

        private void dgProduct_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

        {

            if(e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)

            {

               Button btnDelete = (Button)(e.Item.Cells[4].Controls[0]);

               btnDelete.Attributes.Add("onClick","JavaScript:return confirm('确定删除?')");

 

               e.Item.Attributes.Add("onMouseOver","this.style.backgroundColor='#FFCC66'");

               e.Item.Attributes.Add("onMouseOut","this.style.backgroundColor='#ffffff'");

            }

        }


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C#DataGridView分页显示功能实现 DataGridView分页显示功能的实现,文件的只需修改命名空间便可以移植到其他WinForm项目中。 立即下载

相关推荐

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码)

本文详细介绍了如何使用Python爬虫快速抓取东方财富网的股票数据,包括环境配置、API分析、核心代码实现及优化技巧。通过简单的requests和pandas库,5分钟内即可获取高质量股票数据,适合量化交易和数据分析初学者。

weixin_29040367的博客 1187

DataGridView翻页(WinForm)

思想: 将DataGridView界面设置成显示固定条数的大小,比如要显示10条数据,就将DataGridView设成只能显示10条数据的大小。根据设置FirstDisplayedScrollingRowIndex属性,实现翻页效果。(实际上,这种实现方式只是将数据隐藏了,翻页时将要显示的数据放到第一行的位置,让人看起来就像是翻页了……) FirstDisplayedScrollingRo...

weixin_30525825的博客 1712

2023-11-20 MySQL ARM64 银河麒麟

背景 MySQL是常用数据库,Windows安装比较容易,笔者也有记录。现在国产化系统银河麒麟中安装,不同的是软件安装包不容易下载。一是安装的方式,再一个是MySQL本身的版本,网上很多文档说明其实都是对的,但是为什么那么多都不一样呢?就是MySQL本身的版本差异比较大,这些差异笔者也不是很清楚,但是不要用8和5.7的差异非常大,8即使安装的很顺利,在使用过程也会很多坑,导致我宁愿卸载8,也要重新...

jxmh1991@163.com 812

datagridview可直接使用的美观方法

                      如何设定和控制c#中DataGrid的列宽1、新建立一个  DataGridTableStyle      DataGridTableStyle dtstyle= new DataGridTableStyle();2、绑定数据源      dtstyle.MappingName=TableName;3、设定      dg.Tab

yixian2007的专栏 2889

VisionPro动态坐标系构建:CogFixtureTool与CogFixtureNPointToNPointTool实战解析

本文深入解析了VisionPro中动态坐标系构建的核心技术,重点对比了CogFixtureTool与CogFixtureNPointToNPointTool的原理与应用。通过实战案例,阐述了如何利用坐标跟随(Fixturing)技术解决工业视觉检测中因零件位置偏移导致的测量不准问题,实现从“固定”到“随动”的思维跃迁,从而构建稳定、精准的检测程序。

weixin_29207439的博客 565

[Ethernet in CANoe]2--如何在CANoe中去仿真CP版本的SOME/IP通信

上篇文章()介绍了SOME/IP的两种类型的数据格式,根据作者目前的项目经验,目前在CANoe V18之前的版本,CP版本的arxml是最方便实现SOME/IP以太网仿真的。作者目前只有CANoe V17的license,所以本片文章是在CANoe 17上基于CP版本的arxml去做仿真模拟。

汽车ECU自动化测试 1767

DataGrid实现自定义分页,鼠标移至变色,删除确认、可编辑,可删除

数据库:SqlServer 2000, 数据源:系统自带的Northwind操作系统:Window XP 中文版开发平台:.Net Framework 1.1, C#语言效果预览:   好了,让我们开始奇异的Datagrid之旅吧: 先在数据库中定义存储过程,轻易实现百万级数据分页://@PageSize:分页大小,PageIndex:页号,@PageCount:总页数

jxufewbt的专栏 1131

第1章第11节:创建可容纳多行滚动文字的输入框TextEditor [SwiftUI快速入门到实战]

TextField可以让用户输入单行的文字内容,若想输入多行的文字内容,可以使用能够容纳多行滚动文字的 TextEditor。 定义一个字符串属性,用来存储用户输入的文字内容。接着定义一个布尔属性,用来标识是否弹出警告窗口,以显示用户输入的内容。 TextEditor是由UIKit中的UITextView演变而来,因此可以在init方法中,通过UITextView修改TextEditor的外观属性。 添加一个VStack视图,作为子视图的容器。 创建一个TextEditor,Te..

互动教程网[www.hdjc8.com] 832

vs.net beta 2中利用DataGrid分页详解

beta 2中利用DataGrid分页 说明: 1、本篇文章只适用于初学vs.net者,尤其对vs.net环境还不是很熟悉者。 2、需要的环境:win2000, sql server2000, vs.net beta2 步

carper的专栏 3390

一篇文章认识《双目立体视觉》

双目立体视觉,由两个摄像头组成,像人的眼睛能看到三维的物体,具有深度的信息;单目视觉只能看到二维的物体。 1)双目摄像头 2)双目相机基线 3)打开双目摄像头 4)双目测距 视差disparity、 极线约束、 极线校正/立体校正、 a.双目标定 b.双目矫正 c.立体匹配 d.双目测距(三角测量) e.测距效果 立体视觉方法评测网站

黎国溥 7964

2026星宸科技数字IC设计笔试带答案

摘要:本文包含四个计算机科学领域的编程与逻辑设计题目解析。第一部分通过C语言程序补充水仙花数判断代码,考查循环结构和函数设计;第二部分分析Verilog代码的D触发器电路,讨论时序约束与时钟频率影响;第三部分详细讲解静态时序分析中的建立/保持时间计算与违例判断;第四部分计算机体系结构题目涉及CPI、MIPS计算和性能加速比分析。最后还包含一个逻辑代数化简的示例,展示基本的布尔代数简化技巧。这些题目全面覆盖了编程基础、数字电路设计、时序分析和计算机性能评估等核心知识点。(149字)

Open 122

easyuI中datagrid控件讲解

datagrid控件:在VisualStudio中Razor视图引擎中使用datagrid控件实现对应的效果

weixin_41563376的博客 2672

File does not exist: /user/anonymous/.staging/job_1628851608378_6064/报错问题解决

user/admin/.staging/job_1571397171638_0001/job_1571397171638_0001_1.jhist 所以为什么没有下发,这里面jhist,只是被引发的错误,它还不是根本的错误。看到上面错误,我们就可以判断,这是网络问题,然而网络无非是ip地址,防火墙,端口,hosts等。我们正常的hosts是这样的。在回头复盘想想,我们找不到jhist,跟我们的网络问题二者是很难找到关联的,所以大家在遇到问题的时候,一定多排查和思考,而不是看到一个错误,就以为是它的问题。

石榴姐yyds 2170

VB.NET 给DataGrid加上右键菜单

代码如下: Dim fileName As String Dim MyXmlDataSet As New DataSet fileName = "sunhai.xml" MyXmlDataSet.ReadXml(fileName) Form1.DefInstance.DataGrid1.DataSource = MyXmlDataSet   启动程序,DataTable默认是闭合的,

1977

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: DataGrid实现自定义分页,鼠标移至变色,删除确认、可编辑,可删除
下一篇: 值得一看的Struts入门教程
JavaProgramers
博客等级 码龄22年 660粉丝 304原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值