- 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
- 示例
View Code
- 指定 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 控件中的排序方式
- 以编程方式排序
1 private void sortButton_Click(object sender, System.EventArgs e) 2 { 3 // Check which column is selected, otherwise set NewColumn to null. 4 DataGridViewColumn newColumn = 5 dataGridView1.Columns.GetColumnCount( 6 DataGridViewElementStates.Selected) == 1 ? 7 dataGridView1.SelectedColumns[0] : null; 8 9 DataGridViewColumn oldColumn = dataGridView1.SortedColumn; 10 ListSortDirection direction; 11 12 // If oldColumn is null, then the DataGridView is not currently sorted. 13 if (oldColumn != null) 14 { 15 // Sort the same column again, reversing the SortOrder. 16 if (oldColumn == newColumn && 17 dataGridView1.SortOrder == SortOrder.Ascending) 18 { 19 direction = ListSortDirection.Descending; 20 } 21 else 22 { 23 // Sort a new column and remove the old SortGlyph. 24 direction = ListSortDirection.Ascending; 25 oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None; 26 } 27 } 28 else 29 { 30 direction = ListSortDirection.Ascending; 31 } 32 33 // If no column has been selected, display an error dialog box. 34 if (newColumn == null) 35 { 36 MessageBox.Show("Select a single column and try again.", 37 "Error: Invalid Selection", MessageBoxButtons.OK, 38 MessageBoxIcon.Error); 39 } 40 else 41 { 42 dataGridView1.Sort(newColumn, direction); 43 newColumn.HeaderCell.SortGlyphDirection = 44 direction == ListSortDirection.Ascending ? 45 SortOrder.Ascending : SortOrder.Descending; 46 } 47 }
- 使用DataGridView.SortCompare事件自定义排序
1 private void dataGridView1_SortCompare(object sender, 2 DataGridViewSortCompareEventArgs e) 3 { 4 // Try to sort based on the cells in the current column. 5 e.SortResult = System.String.Compare( 6 e.CellValue1.ToString(), e.CellValue2.ToString()); 7 8 // If the cells are equal, sort based on the ID column. 9 if (e.SortResult == 0 && e.Column.Name != "ID") 10 { 11 e.SortResult = System.String.Compare( 12 dataGridView1.Rows[e.RowIndex1].Cells["ID"].Value.ToString(), 13 dataGridView1.Rows[e.RowIndex2].Cells["ID"].Value.ToString()); 14 } 15 e.Handled = true; 16 }
- 使用 IComparer 接口自定义排序
1 private void Button1_Click( object sender, EventArgs e ) 2 { 3 if ( RadioButton1.Checked == true ) 4 { 5 DataGridView1.Sort( new RowComparer( SortOrder.Ascending ) ); 6 } 7 else if ( RadioButton2.Checked == true ) 8 { 9 DataGridView1.Sort( new RowComparer( SortOrder.Descending ) ); 10 } 11 } 12 13 private class RowComparer : System.Collections.IComparer 14 { 15 private static int sortOrderModifier = 1; 16 17 public RowComparer(SortOrder sortOrder) 18 { 19 if (sortOrder == SortOrder.Descending) 20 { 21 sortOrderModifier = -1; 22 } 23 else if (sortOrder == SortOrder.Ascending) 24 { 25 sortOrderModifier = 1; 26 } 27 } 28 29 public int Compare(object x, object y) 30 { 31 DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x; 32 DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y; 33 34 // Try to sort based on the Last Name column. 35 int CompareResult = System.String.Compare( 36 DataGridViewRow1.Cells[1].Value.ToString(), 37 DataGridViewRow2.Cells[1].Value.ToString()); 38 39 // If the Last Names are equal, sort based on the First Name. 40 if ( CompareResult == 0 ) 41 { 42 CompareResult = System.String.Compare( 43 DataGridViewRow1.Cells[0].Value.ToString(), 44 DataGridViewRow2.Cells[0].Value.ToString()); 45 } 46 return CompareResult * sortOrderModifier; 47 } 48 }
- 以编程方式排序
- 如何:设置 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[0].Value = row.Index + 1; } }
- 数据过滤
1 private void btnEnquiry_Click(object sender, EventArgs e) 2 { 3 string filterExpression = string.Empty; 4 //filter QCPass 5 if (cbbQCPass.SelectedIndex != 0 && cbbQCPass.SelectedIndex != -1) 6 { 7 string qcPassRowFilter = string.Format("qcpass = {0}", cbbQCPass.SelectedItem); 8 filterExpression += qcPassRowFilter; 9 } 10 //filter epc 11 if (!string.IsNullOrWhiteSpace(txtEPC.Text)) 12 { 13 if (!string.IsNullOrEmpty(filterExpression)) 14 { 15 filterExpression += " AND "; 16 } 17 string epcFilter = string.Format("epc like '{0}%'", txtEPC.Text.Trim()); 18 filterExpression += epcFilter; 19 } 20 //filter seq 21 if (!string.IsNullOrWhiteSpace(txtSEQ.Text)) 22 { 23 if (!string.IsNullOrEmpty(filterExpression)) 24 { 25 filterExpression += " AND "; 26 } 27 string seqFilter = string.Format("seq like '{0}%'", txtSEQ.Text.Trim()); 28 filterExpression += seqFilter; 29 } 30 31 if (!string.IsNullOrEmpty(filterExpression)) 32 { 33 _dataSource.DefaultView.RowFilter = filterExpression; 34 } 35 else 36 { 37 _dataSource.DefaultView.RowFilter = string.Empty; 38 } 39 }
- 添加上下文菜单
//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; } } } }
- 单击某列时编辑内容:触发CellClick事件,添加dgView.BeginEdit(true)代码。
- 为DataGridView设定数据源时,会引发DataGridView Default Error Dialog错误:在设定dataSource之前先设定dataSoruce = null;
- 0