C#对DataGridView控件的常用操作

news2024/11/17 7:55:06

  1998年我开始接触Powerbuilder 6.5之前,使用过FoxPro 2.5B和Visual Base 5,比较而言,对数据库应用的开发,FoxPro 2.5B对开发人员很友好,开发程序速度快,Visual Base 5则几乎没有多少的优势,用上Powerbuilder 6.5就觉得它真是一款神器,到目前为止,我依然认为它是最好的数据库应用开发工具,没有之一,开发起来快得不可思议。

  Powerbuilder 6.5的最大特点就是数据窗口的应用,只要你能想的到的功能几乎都可以快速实现,并且它可以做到完全的面向对象开发,唯一缺点是界面处理上,有些功能(比如多媒体处理)需要借助Windows API或者第三方插件来完成。

  比如在表格上嵌套表格,表格上嵌套复杂的下拉列表、单选、多选或者其他的选项等实现起来轻而易举,代码非常少。

  现在使用C#开发数据库应用,对比20多年前的开发,觉得微软那么多聪明绝顶的工程师们真是浪得虚名,不知道他们这些年都做了些什么?!为什么就不能借鉴一下开发出让编程人员便利的控件呢?!

  用了DataGridView,总结一下。

  一、数据加载与绑定

            try
            {
                //连接数据库提取管道信息
                using (SqlConnection SqlConn = new SqlConnection(DBConnectStr))
                {
                    SqlConn.Open();
                    SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM PRASPipeline", SqlConn);
                    DataGridViewDT = new DataTable();
                    SDA.Fill(DataGridViewDT);
                    //设置DataGridView的数据源
                    dataGridView1.DataSource = DataGridViewDT;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("初始化数据出错:"+ex.Message);
            }

  二、样式设定

                    //设置标题栏
                    dataGridView1.Columns["F01"].HeaderText = "标题1";
                    //......	
                    dataGridView1.Columns["F15"].HeaderText = "标题15";
                    dataGridView1.DefaultCellStyle.Font = new Font("宋体", 9);//设置正文的字体
                    dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 9);//设置标题栏的字体
                    dataGridView1.AutoResizeColumns();
                    dataGridView1.AutoSizeColumnsMode = (DataGridViewAutoSizeColumnsMode)DataGridViewAutoSizeColumnMode.AllCells;//设置栏目的宽度为自适应
                    dataGridView1.Columns["F01"].Width = 80;//设置栏目为固定宽度
                    dataGridView1.RowHeadersVisible = true;//显示行号
                    dataGridView1.RowHeadersDefaultCellStyle.Padding=new Padding(3);
                    dataGridView1.RowTemplate.Height = 30;
                    dataGridView1.AllowUserToAddRows = false;//最后一行不显示
                    dataGridView1.AlternatingRowsDefaultCellStyle.BackColor= Color.LightGray;//斑马线效果

  三、数据增加

            DataTable DT = (DataTable)dataGridView1.DataSource;
            DataRow NewRow=DT.NewRow();            
            DT.Rows.Add(NewRow);
            dataGridView1.Refresh();

  四、删除

            int SelectRow = dataGridView1.SelectedRows[0].Index;
            dataGridView1.Rows.RemoveAt(SelectRow);

  五、数据保存

            DataTable ChangedDT=((DataTable)dataGridView1.DataSource).GetChanges();
            //保存数据
            using(SqlConnection DBConn=new SqlConnection(DBConnectStr))
            {
                //创建Adapter对象
                using(SqlDataAdapter adapter=new SqlDataAdapter("SELECT * FROM PRASPipeline", DBConn))
                {
                    //创建SqlCommandBuilder对象,用于自动生成插入、删除和更新的SQL语句
                    using(SqlCommandBuilder SCB=new SqlCommandBuilder(adapter))
                    {
                        //设置InsertCommand、DeleteCommand、UpdateCommand的属性
                        adapter.InsertCommand=SCB.GetInsertCommand();
                        adapter.UpdateCommand=SCB.GetUpdateCommand();
                        adapter.DeleteCommand=SCB.GetDeleteCommand();
                        DBConn.Open() ;
                        adapter.Update(ChangedDT);
                        DBConn.Close();
                    }

                }

            }

  六、为列增加下拉框

  七、为列增加单选框

  八、为列增加复选框

  九、从Excel导入

  ⑴选择

            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Excel文件(*.xlsx;*.xls)|*.xlsx;*.xls";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string StrPath = openFileDialog.FileName;
                //将Excel文件记录追加到DataGridView中
                AppendExcelDataToDataGridView(StrPath);
            }

  ⑵导入

       private void AppendExcelDataToDataGridView(string StrFilePath)
        {
            try
            {
                //根据Excel文件路径和连接字符串创建连接对象
                string LinkExcelStr = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={StrFilePath};Extended Properties='Excel 12.0;HDR=YES'";
                string SQLStr = "SELECT * FROM [Sheet1$]";

                using (OleDbConnection ExcelDB = new OleDbConnection(LinkExcelStr))
                {
                    using (OleDbDataAdapter ODA = new OleDbDataAdapter(SQLStr, ExcelDB))
                    {
                        DataTable ExcelDT = new DataTable();
                        ODA.Fill(ExcelDT);
                        //将数据追加到DataGridView中
                        //DataGridViewDT.Merge(ExcelDT,true);
                        foreach (DataRow Row in ExcelDT.Rows)
                        {
                            DataGridViewDT.Rows.Add(Row.ItemArray);
                        }
                        //foreach (DataRow row in ExcelDT.Rows)
                        //{
                        //    DataRow NewRow=DataGridViewDT.NewRow();
                        //    for(int i=0;i<ExcelDT.Columns.Count;i++)
                        //    {
                        //        NewRow[i] = row[i];
                        //    }
                        //    DataGridViewDT.Rows.Add(NewRow);
                        //}
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("追加数据到DataGridView中出错!" + ex.Message);
            }
        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/734527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webpack5搭建与基本配置

webpack基础构建 新建文件夹进入文件夹查看是否安装node&#xff0c;命令&#xff1a;node-v创建package.json文件&#xff0c;命令&#xff1a;npm init -y安装webpack和webpack-cli&#xff0c;&#xff08;命令自动创建出package-lock.json文件和node_modules文件夹&#x…

残差网络(ResNet) -深度学习(Residual Networks (ResNet) – Deep Learning)

在第一个基于cnn的架构(AlexNet)赢得ImageNet 2012比赛之后&#xff0c;每个随后的获胜架构都在深度神经网络中使用更多的层来降低错误率。这适用于较少的层数&#xff0c;但当我们增加层数时&#xff0c;深度学习中会出现一个常见的问题&#xff0c;称为消失/爆炸梯度。这会导…

MachineLearningWu_6_FeatureScaling

x.1 feature scale 接下俩我们将考虑数据的不一致性&#xff0c;例如有的数据的范围很大&#xff0c;可能分布在好几千&#xff0c;但是我们的weight矩阵最好是在[-1, 1]的小数&#xff0c;如果数值太大就会导致我们的weight变化也很大&#xff0c;如下面这个例子就并不好&…

编译型语言和解释型语言的区别

1.操作系统怎么识别编程语言 计算机能识别二进制数&#xff0c;但是无法识别编程语言&#xff0c;比如你把 01000001100通过相关手段输入计算机中计算机就能识别其中的含义并且执行对应的命令&#xff0c;但是你输入 print(hello world)计算机就无法识别其含义&#xff0c;这就…

基于springboot+mybatis-plus+mysql+vue音乐网站管理系统

基于springbootmybatis-plusmysqlvue音乐网站管理系统 一、系统介绍1、系统主要功能&#xff1a;2.涉及技术框架&#xff1a;3.项目说明&#xff1a; 二、功能展示三、其它系统四、获取源码 一、系统介绍 1、系统主要功能&#xff1a; 音乐播放 用户登录注册 用户信息编辑、头…

4. PS切图

4.1常见的图片格式 jpg图像格式: JPEG ( .JPG )对色彩的信息保留较好,高清,颜色较多,我们产品类的图片经常用jpg格式的gif图像格式 : GIF格式最多只能储存256色,所以通常用来显示简单图形及字体,但是可以保存透明背景和动画效果,实际经常用于一些图片小动画效果png图像格式&am…

Tomcat 线程池

目录 概述 tomcat线程池工作原理 关键源码 Connector 配置 Executor 线程配置 tomcat核心组件&#xff08;题外&#xff09; 概述 Tomcat 是一个流行的 Java Web 服务器&#xff0c;它使用线程池来处理客户端请求。线程池是一组预先创建的线程&#xff0c;用于执行并发任…

FreeRTOS ~(七)互斥量 ~ (1/3)互斥量解决互斥缺陷

前情提要 FreeRTOS ~&#xff08;四&#xff09;同步互斥与通信 ~ &#xff08;2/3&#xff09;互斥的缺陷 FreeRTOS ~&#xff08;五&#xff09;队列的常规使用 ~ &#xff08;2/5&#xff09;队列解决互斥缺陷 FreeRTOS ~&#xff08;六&#xff09;信号量 ~ &#xff08;2/…

Android Camera2 获取RAW数据

这边文章主要记录下在Android系统上&#xff0c;如何通过Camera2 API去拿到RAW数据&#xff0c;也是当个备忘。 平时我们拿实时预览数据&#xff0c;更多的是获取yuv数据。一般涉及到raw域算法在APP层实现的时候&#xff0c;我们才会用到获取raw数据。 APP上集成Raw算法的思路…

【CSDN新星计划】初阶牛C/C++赛道——顺序程序设计(运算符和表达式)

目录 &#x1f349;2.运算符和表达式 2.1 C运算符 2.2基本的算术运算符 2.3自增&#xff08; &#xff09;自减&#xff08; - - &#xff09;运算符 2.4算术表达式和运算符的优先级与结合性 2.运算符和表达式 2.1 C运算符 C语言提供了以下运算符&#xff1a; (1)算术…

印度反垄断机构偏袒亚马逊,谷歌对滥用安卓市场地位罚款提出质疑

根据路透社消息&#xff0c;谷歌指控印度反垄断机构在其安卓系统调查中对亚马逊持偏袒态度&#xff0c;并向印度最高法院提起诉讼&#xff0c;对其关于滥用安卓市场地位的罚款提出质疑。 印度竞争委员会&#xff08;CCI&#xff09;最近要求谷歌改变商业模式&#xff0c;称谷歌…

结合具体场景举例说明chatgpt预训练模型中Tokenization的原理

假设我们有一个场景&#xff0c;Alice想向Chatbot询问一部电影的推荐。她发送了一条消息&#xff1a;“你好&#xff0c;能给我推荐一部好看的电影吗&#xff1f;” 在这个场景中&#xff0c;Chatbot使用了ChatGPT预训练模型。首先&#xff0c;Chatbot需要对Alice的消息进行Tok…

【力扣周赛】第 108 场双周赛

文章目录 Q1&#xff1a;6913. 最长交替子序列思路竞赛时代码代码优化 Q2&#xff1a;6469. 重新放置石块思路竞赛时代码 Q3&#xff1a;6923. 将字符串分割为最少的美丽子字符串解法1—— dfs回溯 剪枝 判断解法2——动态规划 Q4&#xff1a;6928. 黑格子的数目代码优化 成绩…

Jenkins持续集成

文章目录 Jenkins介绍Jenkins的特征 Jenkins架构Gitlab安装1. Gitlab代码托管服务器安装2. Gitlab添加组、创建用户、创建项目 jenkins安装安装JenkinsJenkins插件管理Jenkins用户权限管理Jenkins凭证管理安装Git插件和Git工具设置SSH免密登录 Maven安装和配置JenkinsDockerspr…

【数据结构】栈和队列详解

⭐️ 往期相关文章 ✨链接1&#xff1a;数据结构和算法的概念以及时间复杂度空间复杂度详解 ✨链接2&#xff1a;【数据结构】手撕顺序表 ✨链接3&#xff1a;【数据结构】手撕单链表 ✨链接4&#xff1a;【数据结构】双向带头循环链表 ⭐️ 栈和队列 &#x1f320; 栈 栈是…

react-native项目手机预览

初始化项目 使用 expo 初始化 react-native 项目&#xff0c;https://reactnative.cn/docs/environment-setup 运行项目 执行 start 命令运行项目 拿起你的iPhone手机&#xff0c;安装 expo APP&#xff0c;https://expo.dev/client 或者到 APP store 搜索下载。下载完成之…

基于TCP协议的聊天系统TCP-ChatSystem

基于TCP协议的点对点聊天系统 网络协议&#xff1a;TCP 聊天形式&#xff1a;点对点 所用技术&#xff1a;socket、多路转接、线程池、互斥锁、条件变量、MFC等。 功能点&#xff1a;注册、登录、添加好友、聊天等。 实现示意图 客户端登陆注册消息流转图&#xff1a; 客…

【MATLAB第54期】基于LSTM长短期记忆网络的多输入多输出滑动窗口回归预测模型

【MATLAB第54期】基于LSTM长短期记忆网络的多输入多输出滑动窗口回归预测模型 往期第13期已实现多输入单输出滑动窗口回归预测 本次在此代码基础上&#xff0c;新增多输出滑动窗口功能。 多输入单输出滑动窗口回归预测 一、实现效果 往期文章提到了对单列时间序列数据进行滑…

spdlog入门教程(1)

spdlog入门教程&#xff08;1&#xff09; 文章目录 spdlog入门教程&#xff08;1&#xff09;1、前言1.1 为什么要使用日志库1.2 尽量使用通用日志框架而不要自己实现1.3 spdlog概述1.4 地址 2、源码编译配置spdlog3、在Qt中使用spdlog1.1 验证spdlog是否配置成功1.2 将日志输…

全网最牛,Pytest自动化测试-pytest.mark.parametrize参数化实战(详细)

目录&#xff1a;导读 前言 一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 pytest允许在多个…