C#编程-81:DataGridView常用操作综合实例

简介: C#编程-81:DataGridView常用操作综合实例

image.png

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DataGridViewLastTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        DataTable dt;
        int valTotal = 500;//总数量       
        int valPerPage = 9;//每页条数
        int pageNum = 0;//总页数
        int currentPage = 1;//当前页
        int valCurrent = 0;//当前条数
        int valStartIndex = 0;//每页起始条数
        int valEndIndex = 0;//当前页终止条数
        //生成数据表
        private void GenerageData()
        {
            dt = new DataTable("ClerkSalary");
            dt.Columns.Add("姓名", Type.GetType("System.String"));
            dt.Columns.Add("姓别", Type.GetType("System.String"));
            dt.Columns.Add("工资", Type.GetType("System.Int32"));
            string familyName = "赵钱孙李周吴郑冯陈褚卫蒋沈韩杨朱秦尤许何吕施张";
            string lastName=@"那日丹桂梢头缀黄花绽竹篱抛情引墨顿成诗情也依依爱也依依
                            天涯两相望月人独伤悲红笺小字寄相思情也难追爱也难追
                            聊期花共月闲看绿着珠滴水涌泉歌诗儒词也狂书笔也狂书
                            瑶琴闲置久知音日渐疏往事思来总不如词也成枯笔也成枯";
            string gender = "男女";
            Random random = new Random();
            for (int i = 0; i < valTotal; i++)
            {
                //新增行方法一:
                //DataRow dr = dt.NewRow();
                //dr[0] = familyName[random.Next(0, familyName.Length)].ToString()
                //    + lastName[random.Next(0, lastName.Length)].ToString()
                //    + lastName[random.Next(0, lastName.Length)].ToString();
                //dr[1] = gender[random.Next(0, gender.Length)].ToString();
                //dr[2] = random.Next(1800, 10000);
                //dt.Rows.Add(dr);
                //新增行方法二:
                string name = familyName[random.Next(0, familyName.Length)].ToString()
                    +lastName[random.Next(0, lastName.Length)].ToString() 
                    +lastName[random.Next(0, lastName.Length)].ToString();
                string Gender=gender[random.Next(0,gender.Length)].ToString();
                int salary = random.Next(1800,10000);
                dt.Rows.Add(new object[] { name,Gender,salary});
            }
        }
        //加载当前页的数据
        private void LoadData()
        {
            DataTable dtTemp = dt.Clone();
            //只有一页
            if (currentPage == pageNum) valEndIndex = valTotal - 1;
            //不止一页
            else valEndIndex = currentPage * valPerPage;
            valStartIndex = valCurrent;
            //更新显示
            txtCurrentPage.Text = currentPage.ToString();
            lblTotalPage.Text = "/" + Convert.ToString(pageNum);
            //从数据表中读取当前数据
            for (int i = valStartIndex; i <= valEndIndex; i++)
            {
                dtTemp.ImportRow(dt.Rows[i]);
                valCurrent++;
            }
            //通过bindingSource1作为桥梁绑定数据
            bindingSource1.DataSource = dtTemp;
            bindingNavigator1.BindingSource = bindingSource1;
            dataGridView1.DataSource = bindingSource1;
            //设置不同行显示背景
            dataGridView1.RowsDefaultCellStyle.BackColor = Color.Pink;
            dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Violet;
        }
   private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                GenerageData();
                pageNum = (valTotal % valPerPage == 0) ? (valTotal / valPerPage) : (valTotal / valPerPage + 1);
                LoadData();
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            //绘制行号
            Rectangle rect = new Rectangle(e.RowBounds.Location.X,e.RowBounds.Location.Y,dataGridView1.RowHeadersWidth,e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics,(e.RowIndex+1+valStartIndex).ToString(),dataGridView1.RowHeadersDefaultCellStyle.Font,rect,dataGridView1.RowHeadersDefaultCellStyle.ForeColor,TextFormatFlags.VerticalCenter|TextFormatFlags.Right);
            //选中时显示不同的背景
            if (e.RowIndex >= dataGridView1.Rows.Count - 1) return;
            var row =dataGridView1.Rows[e.RowIndex];
            Color oldForeColor = new Color();
            Color oldBackColor = new Color();
            if (row == dataGridView1.CurrentRow)
            {
                if (row.DefaultCellStyle.ForeColor != Color.White)
                {
                    oldForeColor = row.DefaultCellStyle.ForeColor;
                    row.DefaultCellStyle.ForeColor = Color.White;
                }
                if (row.DefaultCellStyle.BackColor != Color.Blue)
                {
                    oldBackColor = row.DefaultCellStyle.BackColor;
                    row.DefaultCellStyle.BackColor = Color.Blue;
                }
            }
            else
            {
                row.DefaultCellStyle.ForeColor = oldForeColor;
                row.DefaultCellStyle.BackColor = oldBackColor;
            }
        }
        private void bindingNavigator1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (e.ClickedItem.Text == "上一页")
            {
                currentPage--;
                if (currentPage <= 0)
                {
                    MessageBox.Show("已经是第一页");
                    currentPage++;
                    return;
                }
                else
                { 
                    valCurrent=valPerPage*(currentPage-1);
                }
                LoadData();
            }
            if (e.ClickedItem.Text =="下一页")
            {
                currentPage++;
                if (currentPage > pageNum)
                {
                    currentPage--;
                    MessageBox.Show("已经是最后一页");
                    return;
                }
                else
                {
                    valCurrent = valPerPage * (currentPage - 1);
                }
                LoadData();
            }
        }
    }
}
相关文章
|
8天前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
8天前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
|
8天前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。
|
8天前
|
人工智能 C# 开发者
C#编程中的图形界面设计
【4月更文挑战第21天】本文探讨了C#在GUI设计中的应用,介绍了Windows Forms、WPF和UWP等常用框架,强调了简洁界面、响应式设计和数据绑定等最佳实践。通过实际案例,展示了C#在企业应用、游戏开发和移动应用中的GUI实现。随着技术发展,C#在GUI设计的未来将趋向于跨平台、更丰富的组件和AI集成,为开发者创造更多可能性。
|
8天前
|
存储 算法 C#
C#编程与数据结构的结合
【4月更文挑战第21天】本文探讨了C#如何结合数据结构以构建高效软件,强调数据结构在C#中的重要性。C#作为面向对象的编程语言,提供内置数据结构如List、Array和Dictionary,同时也支持自定义数据结构。文章列举了C#实现数组、链表、栈、队列等基础数据结构的示例,并讨论了它们在排序、图算法和数据库访问等场景的应用。掌握C#数据结构有助于编写高性能、可维护的代码。
|
8天前
|
开发框架 Linux C#
C#编程的跨平台应用
【4月更文挑战第21天】C#与.NET Core的结合使得跨平台应用开发变得高效便捷,提供统一编程模型和高性能。丰富的类库、活跃的社区支持及Visual Studio Code、Xamarin等工具强化了其优势。广泛应用在企业系统、云服务和游戏开发中,虽面临挑战,但随着技术进步,C#在跨平台开发领域的前景广阔。
|
8天前
|
人工智能 C# 云计算
C#编程的未来发展趋向
【4月更文挑战第21天】C#编程未来将深化跨平台支持,强化云计算与容器技术集成,如.NET Core、Docker。在AI和ML领域,C#将提供更丰富框架,与AI芯片集成。语言和工具将持续创新,优化异步编程,如Task、async和await,提升多核性能。开源生态的壮大将吸引更多开发者,共创更多机遇。
|
8天前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
30 0
|
8天前
|
程序员 C#
C#编程中的面向对象编程思想
【4月更文挑战第21天】本文探讨了C#中的面向对象编程,包括类、对象、封装、继承和多态。类是对象的抽象,定义属性和行为;对象是类的实例。封装隐藏内部细节,只暴露必要接口。继承允许类复用和扩展属性与行为,而多态使不同类的对象能通过相同接口调用方法。C#通过访问修饰符实现封装,使用虚方法和抽象方法实现多态。理解并应用这些概念,能提升代码的清晰度和可扩展性,助你成为更好的C#程序员。
|
8天前
|
开发框架 安全 .NET
C#编程高手的成长之路
【4月更文挑战第21天】本文揭示了成为C#编程高手的路径:牢固掌握基础知识和面向对象编程,深入了解C#特性如泛型和委托,精通ASP.NET等框架工具,养成良好编程习惯,持续学习实践并参与开源项目,勇于挑战创新。通过这些步骤,不断提升编程技能,迈向C#编程的巅峰。