DataGridView使用
- DataGridView控件概述
- DataGridView 控件代码目录(Windows 窗体)
- 未绑定数据列
- 定义:可能想要显示并非来自数据源的一列数据,这种列称为未绑定列.
- 数据格式示例
- 如何:设置 Windows 窗体 DataGridView 控件中的数据格式
- DefaultCellStyle
- 如何:自定义数据格式
- 实现 DataGridView.CellFormatting 事件的处理程序,该处理程序根据单元格的列和值更改单元格的显示方式
- 如何:设置 Windows 窗体 DataGridView 控件中的数据格式
- 数据验证示例
- 验证DataGridView控件中的数据:实现 DataGridView 控件的 CellValidating 和 CellEndEdit 事件的处理程序。如果单元格值验证失败,请将 ValidatingEventArgs 类的 Cancel 属性设置为 true。 这将导致 DataGridView 控件阻止光标离开该单元格。 将该行的 ErrorText 属性设置为解释性字符串。 这将显示错误图标,其工具提示将包含此错误文本。在 CellEndEdit 事件处理程序中,将该行的 ErrorText 属性设置为空字符串。 只有当单元格退出编辑模式(如果验证失败,则不能退出单元格)时,才能发生 CellEndEdit 事件。
- 处理DataGridView输入数据时发生的错误:Windows 窗体 DataGridView 控件通过公开 DataError 事件来轻松实现此类错误的处理;当数据存储区检测到约束冲突或违反业务规则时将引发该事件。
- 外观自定义示例
- 通
过行模板自定义DataGridView中的行:RowTemplate与RowsDefaultCellStyle
属性相比,行模板能更好地控制行的外观和行为。 使用行模板,可以设置包括DefaultCellStyle 在内的任何
DataGridViewRow 属性。
- 通
- 行为自定义示例
- 指定 Windows 窗体 DataGridView 控件的编辑模式
- 在编辑模式EditMode中,用户可以更改单元格的值。 也可以防止单元格进入编辑模式,除非调用 BeginEdit 方法。
- 为 Windows 窗体 DataGridView 控件中的新行指定默认值
- 当应用程序为新添加的行填充默认值时,能使数据输入变得更方便。 通过 DataGridView 类,可以使用 DefaultValuesNeeded 事件填充默认值。 此事件在用户进入新记录的行时引发。 在代码处理此事件时,可以用选择的值填充所需的单元格。
- 为DataGridView 控件中的单个单元格添加工具提示
- DataGridViewCell.ToolTipText
- 使用户能够将多个单元格从DataGridView 控件复制到剪贴板
- 启用单元格复制时,其他应用程序将能够很容易地通过 Clipboard 访问 DataGridView 控件中的数据。
- DataGridView.ClipboardCopyMode
- 示例
- 指定 Windows 窗体 DataGridView 控件的编辑模式
- 列操作示例
- 更改 Windows 窗体 DataGridView列的顺序
- DisplayIndex属性
- 更改 Windows 窗体 DataGridView列的顺序
- 行和列调整大小示例
- 列调整大小
选中某一列,设置列的AutoSizeMode属性,可以自动调整列的宽度。
- 列调整大小
- 选择示例
- 获取选中单元格的数量
- dgv_Detail.GetCellCount(DataGridViewElementStates.Selected)
- 获取选中行的数量
- dgv_Detail.Rows.GetRowCount(DataGridViewElementStates.Selected)
- 获取选中列的数量
- dgv_Detail.Columns.GetColumnCount(DataGridViewElementStates.Selected)
- 判断是否选择了所有的单元格
- dgv_Detail.AreAllCellsSelected
- 获取选中单元格的数量
- 高级自定义示例
- 高级数据示例
- 未绑定数据列
- DataGridView 控件代码目录(Windows 窗体)
- Windows 窗体 DataGridView 控件中的列类型
-
与基于文本的值一起使用。 在绑定到数字和字符串时自动生成。
-
与 Boolean 和 CheckState 值一起使用。 在绑定到这些类型的值时自动生成。
-
用于显示图像。 在绑定到字节数组、Image 对象或 Icon 对象时自动生成。
-
用于在单元格中显示按钮。 不会在绑定时自动生成。 通常用作未绑定列。
-
用于在单元格中显示下拉列表。 不会在绑定时自动生成。 通常手动进行数据绑定。
-
用于在单元格中显示链接。 不会在绑定时自动生成。 通常手动进行数据绑定。
-
- 在 Windows 窗体 DataGridView 控件中显示数据
待续
- 调整 Windows 窗体 DataGridView 控件中列和行的大小
待续
- 对 Windows 窗体 DataGridView 控件中的数据排序
- 如何:设置 Windows 窗体 DataGridView 控件中列的排序模式
在 DataGridView 控件中,默认情况下文本框列使用自动排序,而其他列类型不自动排序。 有时您会希望重写这些默认设置。 例如,可以显示图像来替换文本、数字或枚举单元格值。 虽然无法排序图像,但可以排序它们表示的基础值。 SortMode = DataGridViewColumnSortMode.Automatic;
- 自定义 Windows 窗体 DataGridView 控件中的排序方式
- 以编程方式排序
- private void sortButton_Click(object sender, System.EventArgs e)
- {
- // Check which column is selected, otherwise set NewColumn to null.
- DataGridViewColumn newColumn =
- dataGridView1.Columns.GetColumnCount(
- DataGridViewElementStates.Selected) == ?
- dataGridView1.SelectedColumns[] : null;
- DataGridViewColumn oldColumn = dataGridView1.SortedColumn;
- ListSortDirection direction;
- // If oldColumn is null, then the DataGridView is not currently sorted.
- if (oldColumn != null)
- {
- // Sort the same column again, reversing the SortOrder.
- if (oldColumn == newColumn &&
- dataGridView1.SortOrder == SortOrder.Ascending)
- {
- direction = ListSortDirection.Descending;
- }
- else
- {
- // Sort a new column and remove the old SortGlyph.
- direction = ListSortDirection.Ascending;
- oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
- }
- }
- else
- {
- direction = ListSortDirection.Ascending;
- }
- // If no column has been selected, display an error dialog box.
- if (newColumn == null)
- {
- MessageBox.Show("Select a single column and try again.",
- "Error: Invalid Selection", MessageBoxButtons.OK,
- MessageBoxIcon.Error);
- }
- else
- {
- dataGridView1.Sort(newColumn, direction);
- newColumn.HeaderCell.SortGlyphDirection =
- direction == ListSortDirection.Ascending ?
- SortOrder.Ascending : SortOrder.Descending;
- }
- }
- private void sortButton_Click(object sender, System.EventArgs e)
- 使用DataGridView.SortCompare事件自定义排序
- private void dataGridView1_SortCompare(object sender,
- DataGridViewSortCompareEventArgs e)
- {
- // Try to sort based on the cells in the current column.
- e.SortResult = System.String.Compare(
- e.CellValue1.ToString(), e.CellValue2.ToString());
- // If the cells are equal, sort based on the ID column.
- if (e.SortResult == && e.Column.Name != "ID")
- {
- e.SortResult = System.String.Compare(
- dataGridView1.Rows[e.RowIndex1].Cells["ID"].Value.ToString(),
- dataGridView1.Rows[e.RowIndex2].Cells["ID"].Value.ToString());
- }
- e.Handled = true;
- }
- private void dataGridView1_SortCompare(object sender,
- 使用 IComparer 接口自定义排序
- private void Button1_Click( object sender, EventArgs e )
- {
- if ( RadioButton1.Checked == true )
- {
- DataGridView1.Sort( new RowComparer( SortOrder.Ascending ) );
- }
- else if ( RadioButton2.Checked == true )
- {
- DataGridView1.Sort( new RowComparer( SortOrder.Descending ) );
- }
- }
- private class RowComparer : System.Collections.IComparer
- {
- private static int sortOrderModifier = ;
- public RowComparer(SortOrder sortOrder)
- {
- if (sortOrder == SortOrder.Descending)
- {
- sortOrderModifier = -;
- }
- else if (sortOrder == SortOrder.Ascending)
- {
- sortOrderModifier = ;
- }
- }
- public int Compare(object x, object y)
- {
- DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
- DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;
- // Try to sort based on the Last Name column.
- int CompareResult = System.String.Compare(
- DataGridViewRow1.Cells[].Value.ToString(),
- DataGridViewRow2.Cells[].Value.ToString());
- // If the Last Names are equal, sort based on the First Name.
- if ( CompareResult == )
- {
- CompareResult = System.String.Compare(
- DataGridViewRow1.Cells[].Value.ToString(),
- DataGridViewRow2.Cells[].Value.ToString());
- }
- return CompareResult * sortOrderModifier;
- }
- }
- private void Button1_Click( object sender, EventArgs e )
- 以编程方式排序
- 如何:设置 Windows 窗体 DataGridView 控件中列的排序模式
- DataGridView的最佳实践
- DataGridView常用问题的解决方法
- 设置选中某一行:dgv.CurrentCell = dgv.Rows[0].Cells[0];
- 获取当前选中行的数据
- CurrencyManager cm = (CurrencyManager)dgv.BindingContext[dgv.DataSource];
- DataRowView row = (DataRowView)cm.Current;
- return row["FiledName"].toString();
- 自动添加序号列
- private void dgv_EPC_RowPostPaint(sender,eventArgs)
- {
- foreach (DataGridViewRow row in dgv_EPC.Rows)
- {
- row.Cells[].Value = row.Index + ;
- }
- }
- private void dgv_EPC_RowPostPaint(sender,eventArgs)
- 数据过滤
- private void btnEnquiry_Click(object sender, EventArgs e)
- {
- string filterExpression = string.Empty;
- //filter QCPass
- if (cbbQCPass.SelectedIndex != && cbbQCPass.SelectedIndex != -)
- {
- string qcPassRowFilter = string.Format("qcpass = {0}", cbbQCPass.SelectedItem);
- filterExpression += qcPassRowFilter;
- }
- //filter epc
- if (!string.IsNullOrWhiteSpace(txtEPC.Text))
- {
- if (!string.IsNullOrEmpty(filterExpression))
- {
- filterExpression += " AND ";
- }
- string epcFilter = string.Format("epc like '{0}%'", txtEPC.Text.Trim());
- filterExpression += epcFilter;
- }
- //filter seq
- if (!string.IsNullOrWhiteSpace(txtSEQ.Text))
- {
- if (!string.IsNullOrEmpty(filterExpression))
- {
- filterExpression += " AND ";
- }
- string seqFilter = string.Format("seq like '{0}%'", txtSEQ.Text.Trim());
- filterExpression += seqFilter;
- }
- if (!string.IsNullOrEmpty(filterExpression))
- {
- _dataSource.DefaultView.RowFilter = filterExpression;
- }
- else
- {
- _dataSource.DefaultView.RowFilter = string.Empty;
- }
- }
- private void btnEnquiry_Click(object sender, EventArgs e)
- 添加上下文菜单
- //1.在Winform页面添加ContextMenuStrip组件,并添加MenuItem
- //2.设定DataGridView的ContextMenu
- //3.添加MenuItem事件
- private void toolStripMenuItem1_Click(object sender, EventArgs e)
- {
- Clipboard.SetText(dataGridView1.GetClipboardContent().GetText());
- }
- //4.添加DataGridView的MouseDown事件,
- private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Right)
- {
- DataGridView.HitTestInfo hittestinfo = dataGridView1.HitTest(e.X, e.Y);
- if (hittestinfo != null && hittestinfo.Type == DataGridViewHitTestType.Cell)
- {
- DataGridViewCell activeCell = dataGridView1[hittestinfo.ColumnIndex, hittestinfo.RowIndex];
- if (!dataGridView1.SelectedCells.Contains(activeCell))
- {
- dataGridView1.ClearSelection();
- activeCell.Selected = true;
- }
- }
- }
- }
- //1.在Winform页面添加ContextMenuStrip组件,并添加MenuItem
- 单击某列时编辑内容:触发CellClick事件,添加dgView.BeginEdit(true)代码。
- 为DataGridView设定数据源时,会引发DataGridView Default Error Dialog错误:在设定dataSource之前先设定dataSoruce = null;
- 0
DataGridView使用的更多相关文章
- [WinForm] DataGridView 绑定 DT && ComboBox 列绑定 Dict
一 需求介绍 一般像枚举类型的数据,我们在数据库里存储着诸如(1.2.3.4-)或者("001"."002"."003"-)此类,但是界面 ...
- [Winform] DataGridView 总结(FAQ)
Q1. 如何使单元格不可编辑? A:设置 ReadOnly 属性,可以设置的对象包括 DataGridViewRow(行).DataGridViewColumn(列).DataGridViewCel ...
- [Winform] DataGridView 中 DataGridViewComboBox 的可编辑
在 DataGridView 中设置的 DataGridViewComboBox,默认是不可编辑的,即使将其列属性 DisplayStyle 设置成 ComboBox 或其他,也无法编辑: 故作如下处 ...
- c#datagridview
//保证显示当前活动单元格 this.Invoke(new Action(() => { dataGridView1.CurrentCell = dataGridView1.Rows[index ...
- DataGridView 在下拉框添加下来事件
DataGridView中有一种下拉框式的列,给这个列添加下拉事件时需要转化一下才可以绑定下拉事件 /// <summary> /// 服务类型 /// </summary> ...
- 设置DataGridView的某个单元格为ComboBox
怎么将DataGridView的 某个单元格设为ComboBox的样式而不是整列都改变样式? 1.最简单的方法:利用DataGridView提供的DataGridViewComboBoxCell. 写 ...
- 用DataGridView导入TXT文件,并导出为XLS文件
使用 DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据.也可以导出.txt,.xls等格式的文件.今天我们就先介绍一下用DataGridView把导入txt文件,导出x ...
- 图解DataGridView编辑列
WinForm中DataGridView功能强大,除了可以自动绑定数据源外,还可以根据需求编辑列.下面以截图说明添加编辑列的步骤(HoverTreeSCJ 项目实际界面). 1.选择DataGridV ...
- datagridview 单元格格式转换注意
datagridview 单元格内容进行比较时要注意正确写法要用强制转换,否则出错Convert.ToString(grd_order.SelectedRows[0].Cells[1].Value)= ...
- C# DataGridView中指定的单元格不能编辑
注意:DataGridView控件是从.NET Framework 2.0版本开始追加的. ReadOnly属性的使用 DataGridView内所有的单元格不能编辑 当DataGridView.Re ...
随机推荐
- BZOJ3668: [Noi2014]起床困难综合症(贪心 二进制)
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2708 Solved: 1576[Submit][Status][Discuss] Descript ...
- java 读取图片并转化为二进制字符串
本例子的目的在于测试往oracle数据库中插入blob字段 //以下代码源于:https://www.cnblogs.com/ywlx/p/4544179.html public static Str ...
- pip安装拓展包--网络超时/Read timed out问题
pip安装拓展包--网络超时/Read timed out问题 解决方案:切换镜像源(墙皮太厚) 在后面加上: -i https://pypi.douban.com/simple example: p ...
- JavaScript--获取页面盒子中鼠标相对于盒子上、左边框的坐标
分析: 外层边框是浏览器边框,内部盒子是页面的一个盒子,绿点是盒子中鼠标的位置.鼠标相对盒子边框的坐标=页面中(注意不是浏览器)鼠标坐标-盒子相对于浏览器边框的偏移量 第一步:求浏览器边框位置 x=e ...
- js 关于字符串转数字及数字保留位数的控制
1.parseInt()和parseFloat()两个转换函数,将字符串转换成相应的数字. 1.parseInt() parseInt进行转换时,将字符串转成相应的整数.浮点数以后的数字都不要了. p ...
- git push之后回滚(撤销)代码
问题描述:首先,先说明一下,为什么会引发这次的话题,是这样的,我做完功能Agit push之后,2个月后需求部门要求不要功能A了,然后需要在没有功能A的基础上开发,怎么办?赶紧回滚代码呀. 然后我用g ...
- TP5部署服务器问题总结
及最近部署TP5遇到了很多坑,各种环境下都会出现一些问题,下面是我记录的排坑之路 先说最简单的lnmp一键安装包,我用的是1.5稳定版 安装命令:wget http://soft.vpser.net/ ...
- 如何导入XML数据 (python3.6.6区别于python2 环境)
1.在python2中 代码如下图: 放在python3 环境下执行,将出现如下错误: 原因: python2中形如myTree.keys()[0]这样的写法是没有问题的,因为myTree.keys( ...
- 003---生成器 & 迭代器
生成器 & 迭代器 列表生成式 现在有个需求,列表[1, 2, 3, 4, 5, 6, 7, 8, 9],将列表里的每个值加1. 二逼青年版 a = [1, 2, 3, 4, 5, 6, 7, ...
- C# 面试题 (一)
一.C# 理论 1.1.简述 private. protected. public. internal.protected internal 访问修饰符和访问权限 private : 私有成员, 在类 ...