DataGridView里如何对数据进行多条操作

kelei12399 2010-05-15 10:23:33
datagridview里,我想手动添加数据,而且我添加了多条,如何进行保存(我有一个保存按钮)
同样的,我想长大如何更新数据(我更新了多条数据,然后点保存按钮,那么如何进行这样的操作)
大家帮帮忙~!谢了
...全文
61 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zheng356 2010-05-15
  • 打赏
  • 举报
回复
可不可以一条条读出来呢
yanele 2010-05-15
  • 打赏
  • 举报
回复
正好用得上!
修改一下昵称 2010-05-15
  • 打赏
  • 举报
回复
该事件为添加新行后触发,把新添加的行存储到一个集合。点保持按钮时再对集合操作
Dictionary<int, DataGridViewRow> dic_rows = new Dictionary<int, DataGridViewRow>();
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
dic_rows.Add(e.RowIndex, this.dataGridView1.Rows[e.RowIndex]);
}
本文档不准备面面俱到地介绍DataGridView,而是着眼于深入地介绍一些技术点的高级特性。 本文档按逻辑分为5个章节,首先是结构和特性的概览,其次是内置的列/单元格类型的介绍,再次是数据操作相关的内容,然后是主要特性的综述,最后是最佳实践。 大部分章节含有一个“Q & A”部分,来回答该章节相关的一些常见问题。注意,某些问题会由于知识点的关联性重复出现在多个章节。这些问题、答案及其附带的示例代码都包含在本文档的附录部分。 一、DataGridView技术点的高级特性。 11 1 何为DataGridView 11 1.1 DataGridView和DataGrid 之间的区别 11 1.2 DataGridView的亮点 12 2 DataGridView的结构 13 2.1 结构元素(Architecture Elements) 13 2.2 单元格和组(Cells and Bands) 13 2.3 DataGridView的单元格 (DataGridViewCell) 13 2.3.1 DataGridViewCell的工作机制 14 2.3.2 常见问题 15 2.4 DataGridView的列(DataGridViewColumn) 16 2.5 DataGridView的编辑控件(Editing Controls) 16 2.6 DataGridViewRow 17 2.6.1 常见问题 17 3 列/单元格类型揭密(column/cell types) 17 3.1 DataGridViewTextBoxColumn 18 3.2 DataGridViewCheckBoxColumn 19 3.3 DataGridViewImageColumn 19 3.4 DataGridViewButtonColumn 19 3.5 DataGridViewComboBoxColumn 20 3.5.1 DataError事件和ComboBox列 20 3.5.2 常见问题 20 3.6 DataGridViewLinkColumn 21 4 操作数据(Working with Data) 21 4.1 数据输入和验证的相关事件 21 4.1.1 数据验证相关事件的顺序 21 4.1.2 验证数据 22 4.1.3 在新行中的数据输入(Data Entry in the New Row) 22 4.1.3.1 显示新行 22 4.1.3.2 为生成的新行添加默认值 22 4.1.3.4 在新行中输入数据 23 4.1.3.5 自定义新行的可视化效果 23 4.1.3.6 新行的排序 24 4.1.3.7 关于新行,还要注意: 24 4.1.3.8 Virtual Mode下的新行 24 4.2 关于Null值 24 4.2.1 NullValue属性 24 4.2.2 DataSourceNullValue属性 25 4.3 DataError事件 25 4.4 数据绑定模式(Databound modes) 26 4.4.1 非绑定模式(Unbound Mode) 26 4.4.2 绑定模式(Bound Mode) 26 4.4.2.1 有效的数据源 27 4.4.3 虚拟模式 27 4.4.4 混合模式 – 绑定与非绑定模式 27 4.4.5 常见问题 28 5 特性综览(Overview of features) 28 5.1 样式(Styling) 28 5.1.1 The DataGridViewCellStyle Class 29 5.1.2 Using DataGridViewCellStyle Objects 29 5.1.3 Style Inheritance 30 5.1.4 Setting Styles Dynamically 34 5.2 Custom painting 35 5.2.1 Paint Parts 35 5.3.1 在Windows窗体DataGridView控件调整大小选项 39 5.3.2 Resizing with the Mouse用鼠标调整大小 42 5.3.3 Automatic Sizing自动调整大小 43 5.3.4 Programmatic Resizing编程调整大小 45 5.3.5 Customizing Content-based Sizing Behavior自定义基于内容的调整大小行为 46 5.3.6 Content-based Sizing Options基于内容的调整大小选项 47 5.4 Selection modes选择模式 47 5.4.1 Programmatic Selection编程选择 49 5.5 滚动(Scrolling) 49 5.5.1 Scroll event Scroll事件 49 5.5.2 Scroll bars滚动条 50 5.5.3 Scrolling Properties滚动属性 50 5.6 Sorting排序 50 5.6.1 Programmatic Sorting编程排序 52 5.6.2 Custom Sorting自定义排序 53 5.6.3 Common questions and scenarios常见问题及案例 54 5.7 Border styles边框样式 55 5.7.1 Standard Border Styles标准边框样式 55 5.7.2 Advanced Border Styles高级边框风格 56 5.8 Enter-Edit modes输入,编辑模式 57 5.9 Clipboard copy modes剪贴板拷贝模式 58 5.10 Frozen columns/rows冻结的列/行 60 5.11 Implementing Custom cells and editing controls/cells实现自定义和编辑控制单元格/单元格 60 5.11.1 IDataGridViewEditingControl 接口 61 5.11.2 IDataGridViewEditingCell 接口 61 5.12 Virtual mode虚拟模式 61 5.12.1 Bound Mode and Virtual Mode绑定模式和虚拟模式 62 5.12.2 Supplementing Bound Mode补充绑定模式 62 5.12.3 Common questions and scenarios常见问题及案例 62 5.12.4 Replacing Bound Mode更换绑定模式 63 5.12.5 Virtual-Mode Events虚拟模式事件 63 5.12.6 Best Practices in Virtual Mode在虚拟模式下的最佳实践 66 5.13 容量(Capacity) 66 6 最佳实践(Best Practices) 67 6.1 Using Cell Styles Efficiently使用高效单元格样式 67 6.2 Using Shortcut Menus Efficiently使用高效快捷菜单 68 6.3 Using Automatic Resizing Efficiently使用自动调整大小高效 69 6.4 Using the Selected Cells, Rows, and Columns Collections Efficiently高效使用选定的单元格,行和列的集合 69 6.5 Using Shared Rows 使用共享行 70 6.6 Preventing Rows from Becoming Unshared 防止行成为非共享 72 附录 A – FAQ 75 1. 如何使指定的单元格不可编辑? 75 2. 如何让一个单元格不可用(disable)? 75 3. 如何避免用户将焦点设置到指定的单元格? 77 4. 如何使所有单元格总是显示控件(不论它是否处于编辑状态)? 77 5. Why does the cell text show up with “square” characters where they should be new lines(TODO,未能实现该效果)? 78 6. 如何在单元格内同时显示图标和文本? 78 7. 如何隐藏一列? 80 8. 如何避免用户对列排序? 81 9. 如何针对多个列排序? 81 9.1 将数据绑定到DataGridView时 81 9.2 Unbound DataGridView 取消绑定 82 9.2.1 Custom Sorting Using the SortCompare Event 使用排序结束时间实现用户自定义排序 82 9.2.2 Custom Sorting Using the IComparer Interface使用IComparer接口实现自定义排序 84 10. 如何为编辑控件添加事件处理函数? 86 11. 应在何时移除编辑控件的事件处理函数? 87 12. 如何处理ComboBox列中控件的SelectIndexChanged事件? 87 13. 如何通过拖放调整行的顺序? 87 14. 如何调整最后一列的宽度使其占据网格的剩余客户区? 89 15. 如何让TextBox类型的单元格支持换行? 89 16. 如何使Image列不显示任何图像(字段值为null时)? 90 17. 如何能够在ComboBox类型的单元格中输入数据? 90 18. How do I have a combo box column display a sub set of data based upon the value of a different combo box column(TODO)? 91 19. 如何在用户编辑控件的时候(而不是在验证时)就显示错误图标? 92 20. 如何同时显示绑定数据和非绑定数据? 94 21. How do I show data that comes from two tables(TODO)?如何显示来自两个数据源的数据? 96 22. 如何显示主从表? 97 23. 如何在同一DataGridView中显示主从表? 99 24. 如何避免用户对列排序? 99 25. 如何在点击工具栏按钮的时候将数据提交到数据库? 99 26. 如何在用户删除记录时显示确认对话框? 99
与6.0版相比,控件6.01版的主要更改如下: 1、解决6.0版在XP及Windows Server 2008等操作系统下打印预览及打印不正确的问题(第1页正常,其他各页全部是空白)。 控件主要功能: 1、强大的DataGridView打印功能,不仅可以以多种形式(普通打印、分栏打印、跨页打印、工资条打印)打印DGV表格,基本上能完全按DGV控件本身设置的格式如字体、字号、背景颜色、前景颜色、单元格对齐方式等打印出来,文字图像都可以打印,而且是完全根据表格当前的显示顺序进行打印的,基本上做到了所见即所得的打印。 2、报表设计功能。报表模板设计组件EasyReport可以设计普通报表、分组报表、套打模板等,以DataGridView数据源。控件的位置以毫米为计量单位,定位准确,很适合套打单据设计。 3、图表打印功能。5.2版控件新增了一个Chartlet的组件,使用非常方便,可以生成柱形图、饼图、折线图等多种图形,而且可以设置2D或3D效果,既可以在打印控件中打印出来,也可以在Graphics对象中显示。 4、文本打印输出功能,控件提供多个文本打印重载函数,打印文本时,如果需要,控件会自动换行和换页打印输出。还增加了以指定行间距及字符间距打印文本的功能,可以用固定行距,也可以用单倍或多倍行距打印文本。 5、绘图功能,基本上.NET的GDI+的绘图函数(如直线、矩形、路径、多边形、曲线等)都有,只有个别函数的名称有点区别。 6、支持同一文档多种版面格式打印(类似于Word中的节的功能):对同一份文档,不同的页面可以设置不同的格式(纸张大小、纸张方向、页边距),只需要在新增一页时在NewPage方法中指定要使用的页面格式即可,使用非常简单。 7、报表文件保存功能。本控件允许将当前打印预览的内容保存为报表文件,以后使用本控件重新打开该报表文件即可重现原来保存报表时的打印内容。 8、数据导出功能,可以将DataGridView导出为Excel\PDF\RTF\HTML文件,5.7版控件使用开源的NPOI导出Excel,速度非常快,效果非常好。 9、强大的容器控件打印功能(DrawPanel函数)。借助该函数,您只需要在您的容器控件中设计好要打印的内容及打印内容的相对位置,控件轻松帮你打印出来(如果超过一页,控件会自动换页续打)。 10、5.6版新增的SimpleReport组件允许您在一个方案文件中管理多个打印方案,在打印预览时能自由在各个打印方案之间切换。 11、RichTextBox控件的RTF文本打印功能。 12、页眉页脚中既可打印文字,也可打印图像,或者即打印图像又打印输出文字。 13、多表头(跨行跨列的复杂表头)打印功能,多表头组件支持多表头显示与打印、单元格内容的合并显示、打印与导出。 14、自定义纸张支持功能。 15、直接打印窗口中的TreeView控件功能。 16、打印窗口中的ListView功能。 17、斜线表头打印功能。 18、各种条形码(包括二维码)打印功能。 19、5.7版控件增加了使用开源的NPOI从Excel文件(支持2003与2007格式)中导入数据DataGridView的功能,以及DataGridView的复制与粘贴功能。
第18章 程序应用控制 483 18.1 提取信息 484 0795 判断驱动器类型并获取其属性 484 0796 如何得到本地机器的IP 484 0797 如何得到本地运行的EXE的路径 485 0798 得到计算机所有正在运行的进程 485 0799 获得Windows的启动模式 485 0800 获取鼠标的按钮个数及鼠标安装状态 485 0801 检测计算机是否存在网络连接 486 0802 如何判断计算机的联机状态 486 0803 获取计算机屏幕分辨率 486 0804 获取计算机当前登录的用户名称 486 18.2 系统控制 486 0805 远程关闭或重新启动计算机 486 0806 创建应用程序快捷方式 487 0807 启动Windows系统服务 488 0808 在C#应用程序中控制输入法 488 0809 打开“区域和语言选项”对话框并指定选项卡 489 0810 如何执行命令行命令? 489 0811 如何修改计算机的默认打印机 490 0812 如何实现行业软件系统注销功能 490 0813 如何将计算机设置为休眠状态 490 0814 在Windows系统中建立事件日志 491 0815 如何使PC喇叭发音 491 18.3 程序控制 491 0816 使用回车键控制鼠标焦点 491 0817 如何调用可执行应用程序 492 0818 TextBox上禁用鼠标右鍵 492 0819 如何实现屏幕截图 492 0820 如何将截取的图片保存为指定图片格式 493 0821 如何复制程序本身 493 0822 分段显示电话号码颜色 493 0823 软件版本号是如何组成的 493 0824 单击“关闭”按钮或按 Alt + F4 键时最小化窗口 494 0825 屏蔽RichTextBox控件 Ctrl + V 快捷键 495 18.4 其他 495 0826 将DataGridView控件中的数据导入Excel 495 0827 无法获取自定义环境变量的值 496 0828 将组件放到COM+服务器上去 496 0829 调用非托管的DLL文件 497 0830 如何将GridView控件数据导入Word 497 0831 如何将GridView控件数据导入Excel 497 0832 单片机如何实现在线调试 498 0833 单片机如何实现内存优化管理 498 0834 单片机实现文件系统管理 498 0835 杀死进程 498 0836 如何下载某网站上的图片资源 498 第19章 SQL查询相关技术 501 19.1 常用SQL查询技术 502 0837 如何在查询中正确使用单引号“’” 502 0838 SQL中SELECT语句的执行顺序 502 0839 在查询时查询数据为指定长度的数据 502 0840 如何利用WHERE参数过滤数据 503 0841 如何正确地理解和运用SQL中的判式 503 0842 如何正确地理解和使用SQL中的关键字 503 19.2 比较、逻辑运算符查询 504 0843 如何使用算术运算符号进行比较查询 504 0844 如何使用比较运算符号进行比较查询 504 0845 如何使用AND逻辑运算符查询 505 0846 如何使用OR逻辑运算符查询 506 0847 如何联合使用AND和OR运算符查询 506 0848 如何在查询中正确使用逻辑操作符 507 0849 利用通配符进行查询 507 19.3 SQL关键字查询 508 0850 如何使用ESCAPE关键字规定转义字符 508 0851 如何使用BETWEEN进行范围查询 508 0852 如何使用NOT BETWEEN进行范围查询 509 0853 如何使用GROUP BY子句查询 509 0854 如何使用HAVING语句过滤分组数据 510 0855 如何使用ALL关键字查询 510 0856 如何使用CUBE关键字查询 511 19.4 表结构与性能 511 0857 检测信息是否存在 511 0858 @@CPU_BUSY获取CPU的工作时间 511 0859 如何获取磁盘读写次数 512 0860 获取SQL Server服务器名 512 0861 获取数据库标识号 512 0862 判断用户是否访问数据的权限 512 0863 显示表中列信息 512 0864 显示表中任意列名称 513 0865 提高SQL性能加快执行速度 513 0866 控制批处理内语句的执行 513 0867 执行查询但是显示列信息 514 0868 获取连接或试图连接的次数 514 0869 获取当前数据库的语言名 514 19.5 时间与谓词 514 0870 时间函数的使用 514 0871 设置数据库时间表显形式 515 0872 格式化日期显示格式 515 0873 如何正确理解SQL中的NULL值 516 0874 如何使用IsNull()函数来处理空值 516 0875 如何使用Nullif()函数来处理空值 516 0876 查询空值(NULL)的技巧 517 0877 利用关键字DISTINCT去除重复记录 517 0878 巧用TOP子句获取信息 518 0879 巧用CONTAINS谓词检索信息 518 0880 通过ISNULL替换信息 519 0881 比较COMPUTE和GROUP BY 519 0882 如何对指定时间段进行查询 519 0883 对某期间的数据进行查询的几种方法 519 0884 NOT与谓词进行组合条件的查询 520 19.6 聚合函数 520 0885 聚合函数SUM的使用 520 0886 聚合函数AVG的使用 521 0887 如何使用聚合函数MAX 521 0888 如何使用聚合函数MIN 522 0889 如何使用聚合函数COUNT 522 0890 如何使用聚合函数First或Last 523 19.7 子查询与连接查询 523 0891 union与连接之间的区别 523 0892 如何应用IN查询表中的记录信息 524 0893 使用一个单行的子查询来更新列 524 0894 使用IN引入子查询限定查询范围 524 0895 在UPDATE语句中应用子查询 525 0896 如何应用子查询 525 0897 EXISTS与子查询联合应用 525 0898 在FROM子句中的子查询 525 0899 在DELETE语句中应用子查询 526 0900 子查询与聚合函数的应用 526 0901 有效使用内连接 526 0902 如何使用LEFT OUTER JOIN查询 526 0903 如何使用RIGHT OUTER JOIN查询 527 0904 利用CASE语句查询结果 527 19.8 交叉表 528 0905 Access中利用TRASFORM分析数据 528 0906 Access中利用TRASFORM动态分析数据 529 0907 SQL Server实现静态交叉表 529 0908 SQL Server实现动态交叉表 531 19.9 常用数据操作 532 0909 如何对字符串进行查询 532 0910 如何进行单条数据的添加 533 0911 如何进行批量数据的添加 533 0912 如何对数据进行修改 534 0913 如何对数据进行删除 534 0914 对数据数据进行局部删除 534 19.10 高级应用 535 0915 如何使用临时表 535 0916 如何查询表中的列名 535 0917 在查询中如何防止输入指定符串 536 0918 查询指定长度的数据 536 0919 获取当前数据库的详细信息 537 0920 在查询过程中灵活定义与使用别名 538 19.11 视图、存储过程和触发器的使用 538 0921 如何正确认识视图 538 0922 如何获取数据库中的全部用户视图 539 0923 如何通过视图修改数据 539 0924 如何正确理解存储过程 540 0925 如何获取数据库中的全部存储过程 540 0926 如何正确认识触发器 541 0927 Update触发器在系统日志中的应用 542 0928 触发器的嵌套使用 542 0929 获取数据库中的触发器 543 19.12 其他 544 0930 在查询程序中使用变量 544 0931 对查询结果进行排序 544 0932 批量获取结果集信息 545 0933 对查询结果生成表 545 0934 实现数据类型转换 546 0935 获取当前数据库的登录用户名 546 0936 如何正确理解数据库键字 546 0937 将结果转换为XML形式 547 0938 追加查询结果到已存在的表 547 0939 利用对多个表中的字段创建新记录集 547 0940 利用EXECUTE执行SQL语句 548 第20章 数据库技术 549 20.1 Access数据库的使用 550 0941 如何为Access数据库设置密码 550 0942 如何创建加密的Access数据库 550 0943 建立Access数据库连接 551 0944 与加密后的Access数据库建立连接 551 0945 如何提取Access数据库中的数据表名 551 0946 随机读取Access数据库记录 552 0947 将Access数据库导入到Excel中(ASP.NET) 552 0948 在.NET 2.0框架下动态创建Access数据库 553 0949 在.NET 2.0框架下动态创建Access数据表 553 0950 如何备份Access数据库 554 20.2 SQL数据库的使用 554 0951 建立SQL Server数据库连接 554 0952 如何使用ODBC访问SQL Server数据库 555 0953 读取SQL Server数据表结构 556 0954 在C#中分离SQL Server数据库 557 0955 C#中附加SQL Server数据库 558 0956 C#中附加单文件SQL Server数据库 559 0957 备份SQL Server数据库 559 0958 还原SQL Server数据库 560 0959 开启SQL Server数据库服务 561 0960 断开SQL Server数据库服务 562 0961 如何判断SQL Server数据库连接状态 562 0962 获取连接SQL Server数据库的名称 563 0963 获取SQL Server的连接统计数据 563 0964 如何调用SQL Server存储过程 563 0965 如何生成SQL数据库脚本 564 0966 SQL Server 2000无法安装的解决办法 565 20.3 其他 565 0967 如何判断记录是否为NULL 565 0968 建立Oracle数据库连接 566 0969 如何在数据表中设置主键 566 0970 DataSet读取XML文件中数据作为数据源 567 0971 如何读取Fox的DBF文件 567 0972 通用方法实现数据增、删、改功能 567 0973 通用方法获取查询结果DataSet数据集 568 0974 同时查询多条SQL语句 568 0975 如何判断是否查询到结果 568 0976 将图片以二进制格式存储到数据库中(asp.net) 569 0977 从DataReader对象读取数据的技巧 569 0978 随机显示数据库记录 569 0979 通过DataTable获得数据表的主键 569 0980 将Access数据库转化为SQL Server数据库 570 0981 将SQL Server数据库转化为Access数据库 571 0982 如何避免数据库死锁现象 572 0983 如何调用带输入参数的存储过程 572 0984 如何获取存储过程返回的结果集 573 0985 取得数据表某个单元格的值 573 0986 在ASP.NET2.0下将数据绑定DropDownList 573 0987 在ADO.NET中实现数据库的事务处理 574 0988 将任意文件保存到数据库中 574 0989 将存储在数据库中的文件提取出来 575 0990 合并具有相同数据表结构的查询结果 575 0991 使用DataTable进行数据检索 575 0992 使用DataView对数据进行检索和排序 576 0993 使用DataSet建立DataTable明细表 576

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧