1. 取得或者修改当前单元格的内容 2. 设定单元格只读 3. 不显示最下面的新行 4. 判断新增行
5. 行的用户删除操作的自定义 6. 行、列的隐藏和删除 7. 禁止列或者行的Resize
8. 列宽和行高以及列头的高度和行头的宽度的自动调整 9. 冻结列或行 10. 列顺序的调整 11. 行头列头的单元格 12. 剪切板的操作
13. 单元格的ToolTip的设置
14. 右键菜单(ContextMenuStrip)的设置 15,单元格的边框、 网格线样式的设定 16. 单元格表示值的设定
17. 用户输入时,单元格输入值的设定 18. 设定新加行的默认值
19. DataGridView里的Column的背景颜色
1, DataGridView 取得或者修改当前单元格的内容: 2, DataGridView 设定单元格只读: 1) 使用 ReadOnly 属性 2) 使用 EditMode 属性
3) 根据条件设定单元格的不可编辑状态当一个一个的通过单元格坐标设定单元格 ReadOnly 属性的方法太麻烦的时候,你可以通过 CellBeginEdit 事件来取消单元格的编辑。 3,DataGridView 不显示最下面的新行:
4,DataGridView 判断新增行:
5,DataGridView 行的用户删除操作的自定义:
1) 无条件的行删除操作。默认时,DataGridView 是允许用户进行行的删除操作的。如果设置 DataGridView对象的AllowUserToDeleteRows属性为 False 时,用户的行删除操作就被禁止了。 2) 行删除时的条件判断处理。用户在删除行的时候,将会引发 DataGridView.UserDeletingRow 事件。在这个事件里,可以判断条件并取消删除操作。 6,DataGridView 行、列的隐藏和删除: 1) 行、列的隐藏 2) 行头、列头的隐藏 3) 行和列的删除 4) 删除选中行
7,DataGridView 禁止列或者行的Resize: 1) 禁止所有的列或者行的Resize 2) 禁止指定行或者列的Resize 3) 列宽和行高的最小值的设定
8,DataGridView 列宽和行高自动调整的设定: 1) 设定行高和列宽自动调整 2)指定列或行自动调整
3) 设定列头的高度和行头的宽度自动调整
4) 随时自动调整 a,临时的,让列宽自动调整,这和指定AutoSizeColumnsMode属性一样。 9,DataGridView 冻结列或行
1) 列冻结 DataGridViewColumn.Frozen 属性为 True 时,该列左侧的所有列被固定,横向滚动时固定列不随滚动条滚动而左右移动。这对于重要列固定显示很有用。
2) 行冻结 DataGridViewRow.Frozen 属性为 True 时,该行上面的所有行被固定,纵向滚动时固定行不随滚动条滚动而上下移动。 10,DataGridView 列顺序的调整
1, DataGridView 取得或者修改当前单元格的内容:
当前单元格指的是 DataGridView 焦点所在的单元格,它可以通过 DataGridView 对象的 CurrentCell 属性取得。如果当前单元格不存在的时候,返回Nothing(C#是null) [VB.NET]
' 取得当前单元格内容
Console.WriteLine(DataGridView1.CurrentCell.Value) ' 取得当前单元格的列 Index
Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex) ' 取得当前单元格的行 Index
Console.WriteLine(DataGridView1.CurrentCell.RowIndex) [C#]
// 取得当前单元格内容
Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index
Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex); // 取得当前单元格的行 Index
Console.WriteLine(DataGridView1.CurrentCell.RowIndex);
另外,使用 DataGridView.CurrentCellAddress 属性(而不是直接访问单元格)来确定单元格所在的行:DataGridView.CurrentCellAddress.Y 和列: DataGridView.CurrentCellAddress.X 。这对于避免取消共享行的共享非常有用。 当前的单元格可以通过设定 DataGridView 对象的 CurrentCell 来改变。可以通过 CurrentCell 来设定 DataGridView 的激活单元格。将 CurrentCell 设为 Nothing(null) 可以取消激活的单元格。 [VB.NET]
' 设定 (0, 0) 为当前单元格
DataGridView1.CurrentCell = DataGridView1(0, 0) [C#]
// 设定 (0, 0) 为当前单元格
DataGridView1.CurrentCell = DataGridView1[0, 0];
在整行选中模式开启时,你也可以通过 CurrentCell 来设定选定行。 /// /// 向下遍历 ///
/// ///
private void button4_Click(object sender, EventArgs e) ... {
int row = this.dataGridView1.CurrentRow.Index + 1; if (row > this.dataGridView1.RowCount - 1) row = 0; this.dataGridView1.CurrentCell = this.dataGridView1[0, row]; }
/// /// 向上遍历 ///
/// ///
private void button5_Click(object sender, EventArgs e) ... {
int row = this.dataGridView1.CurrentRow.Index - 1; if (row < 0) row = this.dataGridView1.RowCount - 1; this.dataGridView1.CurrentCell = this.dataGridView1[0, row]; }
* 注意: this.dataGridView 的索引器的参数是: columnIndex, rowIndex 或是 columnName, rowIndex 这与习惯不同。
2, DataGridView 设定单元格只读: 1) 使用 ReadOnly 属性
如果需要,DataGridView 内所有单元格都不可编辑, 那么只要:
[VB.NET]
' 设置 DataGridView1 为只读 DataGridView1.ReadOnly = True [C#]
// 设置 DataGridView1 为只读 DataGridView1.ReadOnly = true;
此时,用户的新增行操作和删除行操作也被屏蔽了。
如果需要,DataGridView 内某个单元格不可编辑, 那么只要: [VB.NET]
' 设置 DataGridView1 的第2列整列单元格为只读 DataGridView1.Columns(1).ReadOnly = True ' 设置 DataGridView1 的第3行整行单元格为只读 DataGridView1.Rows(2).ReadOnly = True ' 设置 DataGridView1 的[0,0]单元格为只读 DataGridView1(0, 0).ReadOnly = True [C#]
// 设置 DataGridView1 的第2列整列单元格为只读 DataGridView1.Columns[1].ReadOnly = true;
// 设置 DataGridView1 的第3行整行单元格为只读 DataGridView1.Rows[2].ReadOnly = true; // 设置 DataGridView1 的[0,0]单元格为只读 DataGridView1[0, 0].ReadOnly = true; 2) 使用 EditMode 属性
DataGridView.EditMode 属性被设置为 DataGridViewEditMode.EditProgrammatically 时,用户就不能手动编辑单元格的内容了。但是可以通过程序,调用 DataGridView.BeginEdit 方法,使单元格进入编辑模式进行编辑。 [VB.NET]
DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically [C#]
DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
3) 根据条件设定单元格的不可编辑状态当一个一个的通过单元格坐标设定单元格 ReadOnly 属性的方法太麻烦的时候,你可以通过 CellBeginEdit 事件来取消单元格的编辑。 [VB.NET]
'CellBeginEdit 事件处理方法
Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, _ ByVal e As DataGridViewCellCancelEventArgs) _ Handles DataGridView1.CellBeginEdit Dim dgv As DataGridView = CType(sender, DataGridView) ' 是否可以进行编辑的条件检查
If dgv.Columns(e.ColumnIndex).Name = \"Column1\" AndAlso _ Not CBool(dgv(\"Column2\e.RowIndex).Value) Then ' 取消编辑
e.Cancel = True End If End Sub [C#]
// CellBeginEdit 事件处理方法
private void DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) {
DataGridView dgv = (DataGridView)sender; //是否可以进行编辑的条件检查
if (dgv.Columns[e.ColumnIndex].Name == \"Column1\" && !(bool)dgv[\"Column2\e.RowIndex].Value) {
// 取消编辑 e.Cancel = true; } }
3,DataGridView 不显示最下面的新行:
通常 DataGridView 的最下面一行是用户新追加的行(行头显示 * )。如果不想让用户新追加行即不想显示该新行,可以将 DataGridView 对象的 AllowUserToAddRows 属性设置为 False。 [VB.NET]
' 设置用户不能手动给 DataGridView1 添加新行 DataGridView1.AllowUserToAddRows = False [C#]
// 设置用户不能手动给 DataGridView1 添加新行 DataGridView1.AllowUserToAddRows = false;
但是,可以通过程序: DataGridViewRowCollection.Add 为 DataGridView 追加新行。 补足: 如果 DataGridView 的 DataSource 绑定的是 DataView, 还可以通过设置 DataView.AllowAdd 属性为 False 来达到同样的效果。 4,DataGridView 判断新增行:
DataGridView的AllowUserToAddRows属性为True时也就是允许用户追加新行的场合下,DataGridView的最后一行 就是新追加的行(*行)。使用 DataGridViewRow.IsNewRow 属性可以判断哪一行是新追加的行。另外,通过DataGridView.NewRowIndex 可以获取新行的行序列号。在没有新行的时候,NewRowIndex = -1。 [VB.NET]
If DataGridView1.CurrentRow.IsNewRow Then
Console.WriteLine(\"当前行为新追加行。\") Else
Console.WriteLine(\"当前行不是新追加行。\") End If
5,DataGridView 行的用户删除操作的自定义:
1) 无条件的行删除操作。默认时,DataGridView 是允许用户进行行的删除操作的。如果设置 DataGridView对象的AllowUserToDeleteRows属性为 False 时,用户的行删除操作就被禁止了。 [VB.NET]
' 禁止DataGridView1的行删除操作。 DataGridView1.AllowUserToDeleteRows = False [C#]
// 禁止DataGridView1的行删除操作。 DataGridView1.AllowUserToDeleteRows = false;
但是,通过 DataGridViewRowCollection.Remove 还是可以进行行的删除。补足: 如果 DataGridView 绑定的是 DataView 的话,通过 DataView.AllowDelete 也可以控制行的删除。 2) 行删除时的条件判断处理。用户在删除行的时候,将会引发 DataGridView.UserDeletingRow 事件。在这个事件里,可以判断条件并取消删除操作。 [VB.NET]
' DataGridView1 的 UserDeletingRow 事件
Private Sub DataGridView1_UserDeletingRow(ByVal sender As Object, _ ByVal e As DataGridViewRowCancelEventArgs) _ Handles DataGridView1.UserDeletingRow ' 删除前的用户确认。
If MessageBox.Show(\"确认要删除该行数据吗?\删除确认\MessageBoxIcon.Question) <> _ Windows.Forms.DialogResult.OK Then ' 如果不是 OK,则取消。
e.Cancel = True End If End Sub [C#]
// DataGridView1 的 UserDeletingRow 事件
private void DataGridView1_UserDeletingRow( object sender, DataGridViewRowCancelEventArgs e) {
// 删除前的用户确认。
if (MessageBox.Show(\"确认要删除该行数据吗?\删除确认\MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK) {
// 如果不是 OK,则取消。 e.Cancel = true; } }
6,DataGridView 行、列的隐藏和删除: 1) 行、列的隐藏 [VB.NET]
' DataGridView1的第一列隐藏
Data GridView1.Columns(0).Visible = False ' DataGridView1的第一行隐藏 DataGridView1.Rows(0).Visible = False [C#]
// DataGridView1的第一列隐藏
DataGridView1.Columns[0].Visible = false; // DataGridView1的第一行隐藏 DataGridView1.Rows[0].Visible = false; 2) 行头、列头的隐藏 [VB.NET] ' 列头隐藏
DataGridView1.ColumnHeadersVisible = False ' 行头隐藏
DataGridView1.RowHeadersVisible = False [C#] // 列头隐藏
DataGridView1.ColumnHeadersVisible = false; // 行头隐藏
DataGridView1.RowHeadersVisible = false; 3) 行和列的删除 [VB.NET]
' 删除名为\"Column1\"的列
DataGridView1.Columns.Remove(\"Column1\") ' 删除第一列
DataGridView1.Columns.RemoveAt(0) ' 删除第一行
DataGridView1.Rows.RemoveAt(0) [C#]