DataGridViewColumn Class
Assembly: System.Windows.Forms (in system.windows.forms.dll)
'Declaration Public Class DataGridViewColumn Inherits DataGridViewBand Implements IComponent, IDisposable 'Usage Dim instance As DataGridViewColumn
public class DataGridViewColumn extends DataGridViewBand implements IComponent, IDisposable
public class DataGridViewColumn extends DataGridViewBand implements IComponent, IDisposable
The DataGridViewColumn class represents a logical column in a DataGridView control. You can retrieve columns through the Columns collection of the control.
Unlike a DataGridViewRow, which contains the actual collection of cells in a DataGridView, DataGridViewColumn is used mainly to adjust the appearance and behavior of the column user interface (UI), such as column width and cell style. For more information about cell styles, see Cell Styles in the Windows Forms DataGridView Control.
Types that derive from DataGridViewColumn typically initialize the CellTemplate property to a new instance of a related type derived from the DataGridViewCell class. Any column properties that relate to the appearance or behavior of individual cells are wrappers for the corresponding properties of the template cell. Changing one of these properties on the column automatically changes the value on the cell template and on all cells in the column. To override the specified value for individual cells, set the cell values after you set the column value.
Notes to Inheritors When you derive from DataGridViewColumn and add new properties to the derived class, be sure to override the Clone method to copy the new properties during cloning operations. You should also call the base class's Clone method so that the properties of the base class are copied to the new cell.The following code example creates a Windows Form with a DataGridView and a set of buttons. Each button label describes an operation related to a DataGridViewColumn property, such as swapping the first and last column (using the DisplayIndex property) or changing the text of a column header (using the HeaderText property). Clicking a button changes the associated property of the DataGridViewColumn.
Imports System.Windows.Forms Imports System.Drawing Public Class DataGridViewColumnDemo Inherits Form #Region "set up form" Public Sub New() InitializeComponent() AddButton(Button1, "Reset") AddButton(Button2, "Change Column 3 Header") AddButton(Button3, "Change Meatloaf Recipe") AddAdditionalButtons() End Sub Friend WithEvents dataGridView As DataGridView Friend WithEvents Button1 As Button = New Button() Friend WithEvents Button2 As Button = New Button() Friend WithEvents Button3 As Button = New Button() Friend WithEvents Button4 As Button = New Button() Friend WithEvents Button5 As Button = New Button() Friend WithEvents Button6 As Button = New Button() Friend WithEvents Button7 As Button = New Button() Friend WithEvents Button8 As Button = New Button() Friend WithEvents Button9 As Button = New Button() Friend WithEvents Button10 As Button = New Button() Friend WithEvents FlowLayoutPanel1 As FlowLayoutPanel _ = New FlowLayoutPanel() Private Sub InitializeComponent() FlowLayoutPanel1.Location = New Point(454, 0) FlowLayoutPanel1.AutoSize = True FlowLayoutPanel1.FlowDirection = FlowDirection.TopDown FlowLayoutPanel1.Name = "flowlayoutpanel" ClientSize = New System.Drawing.Size(614, 360) Controls.Add(FlowLayoutPanel1) Text = Me.GetType.Name AutoSize = True End Sub #End Region #Region "set up DataGridView" Private thirdColumnHeader As String = "Main Ingredients" Private boringMeatloaf As String = "ground beef" Private boringMeatloafRanking As String = "*" Private boringRecipe As Boolean Private shortMode As Boolean Private Sub InitializeDataGridView(ByVal ignored As Object, _ ByVal ignoredToo As EventArgs) Handles Me.Load dataGridView = New System.Windows.Forms.DataGridView Controls.Add(dataGridView) dataGridView.Size = New Size(300, 200) ' Create an unbound DataGridView by declaring a ' column count. dataGridView.ColumnCount = 4 AdjustDataGridViewSizing() ' Set the column header style. Dim columnHeaderStyle As New DataGridViewCellStyle columnHeaderStyle.BackColor = Color.Aqua columnHeaderStyle.Font = _ New Font("Verdana", 10, FontStyle.Bold) dataGridView.ColumnHeadersDefaultCellStyle = _ columnHeaderStyle ' Set the column header names. dataGridView.Columns(0).Name = "Recipe" dataGridView.Columns(1).Name = "Category" dataGridView.Columns(2).Name = thirdColumnHeader dataGridView.Columns(3).Name = "Rating" PostColumnCreation() ' Populate the rows. Dim row1 As String() = New String() _ {"Meatloaf", "Main Dish", boringMeatloaf, _ boringMeatloafRanking} Dim row2 As String() = New String() _ {"Key Lime Pie", "Dessert", _ "lime juice, evaporated milk", _ "****"} Dim row3 As String() = New String() _ {"Orange-Salsa Pork Chops", "Main Dish", _ "pork chops, salsa, orange juice", "****"} Dim row4 As String() = New String() _ {"Black Bean and Rice Salad", "Salad", _ "black beans, brown rice", _ "****"} Dim row5 As String() = New String() _ {"Chocolate Cheesecake", "Dessert", "cream cheese", _ "***"} Dim row6 As String() = New String() _ {"Black Bean Dip", "Appetizer", _ "black beans, sour cream", _ "***"} Dim rows As Object() = New Object() {row1, row2, _ row3, row4, row5, row6} Dim rowArray As String() For Each rowArray In rows dataGridView.Rows.Add(rowArray) Next shortMode = False boringRecipe = True End Sub Private Sub AddButton(ByVal button As Button, _ ByVal buttonLabel As String) FlowLayoutPanel1.Controls.Add(button) button.TabIndex = FlowLayoutPanel1.Controls.Count button.Text = buttonLabel button.AutoSize = True End Sub Private Sub ResetToDisorder(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click Controls.Remove(dataGridview) dataGridView.Dispose() InitializeDataGridView(Nothing, Nothing) End Sub Private Sub ChangeColumn3Header(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Button2.Click Toggle(shortMode) If shortMode Then dataGridView.Columns(2).HeaderText = _ "S" _ Else dataGridView.Columns(2).HeaderText = _ thirdColumnHeader End Sub Private Shared Sub Toggle(ByRef toggleThis As Boolean) toggleThis = Not toggleThis End Sub Private Sub ChangeMeatloafRecipe(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Button3.Click Toggle(boringRecipe) If boringRecipe Then SetMeatloaf(boringMeatloaf, boringMeatloafRanking) Else Dim greatMeatloafRecipe As String = "1 lb. lean ground beef, " _ & "1/2 cup bread crumbs, 1/4 cup ketchup," _ & "1/3 tsp onion powder, " _ & "1 clove of garlic, 1/2 pack onion soup mix " _ & " dash of your favorite BBQ Sauce" SetMeatloaf(greatMeatloafRecipe, "***") End If End Sub Private Sub SetMeatloaf(ByVal recipe As String, _ ByVal rating As String) dataGridView.Rows(0).Cells(2).Value = recipe dataGridView.Rows(0).Cells(3).Value = rating End Sub #End Region #Region "demonstration code" Private Sub PostColumnCreation() AddContextLabel() AddCriteriaLabel() CustomizeCellsInThirdColumn() AddContextMenu() SetDefaultCellInFirstColumn() ToolTips() End Sub Private criteriaLabel As String = "Column 3 sizing criteria: " Private Sub AddCriteriaLabel() AddLabelToPanelIfNotAlreadyThere(criteriaLabel, _ criteriaLabel & _ dataGridView.Columns(2).AutoSizeMode.ToString() _ & ".") End Sub Private Sub AddContextLabel() Dim labelName As String = "label" AddLabelToPanelIfNotAlreadyThere(labelName, _ "Use shortcut menu to change cell color.") End Sub Private Sub AddLabelToPanelIfNotAlreadyThere( _ ByVal labelName As String, _ ByVal labelText As String) Dim label As Label If FlowLayoutPanel1.Controls(labelName) Is Nothing Then label = New Label() label.AutoSize = True label.Name = labelName label.BackColor = Color.Bisque FlowLayoutPanel1.Controls.Add(label) Else label = CType(FlowLayoutPanel1.Controls(labelName), Label) End If label.Text = labelText End Sub Private Sub CustomizeCellsInThirdColumn() Dim thirdColumn As Integer = 2 Dim column As DataGridViewColumn = _ dataGridView.Columns(thirdColumn) Dim cell As DataGridViewCell = _ New DataGridViewTextBoxCell() cell.Style.BackColor = Color.Wheat column.CellTemplate = cell End Sub WithEvents toolStripItem1 As New ToolStripMenuItem() Private Sub AddContextMenu() toolStripItem1.Text = "Redden" Dim strip As New ContextMenuStrip() For Each column As DataGridViewColumn _ In dataGridView.Columns() column.ContextMenuStrip = strip column.ContextMenuStrip.Items.Add(toolStripItem1) Next End Sub ' Change the cell's color. Private Sub toolStripItem1_Click(ByVal sender As Object, _ ByVal args As EventArgs) _ Handles toolStripItem1.Click dataGridView.Rows(mouseLocation.RowIndex) _ .Cells(mouseLocation.ColumnIndex) _ .Style.BackColor = Color.Red End Sub Private mouseLocation As DataGridViewCellEventArgs ' Deal with hovering over a cell. Private Sub dataGridView_CellMouseEnter(ByVal sender As Object, _ ByVal location As DataGridViewCellEventArgs) _ Handles DataGridView.CellMouseEnter mouseLocation = location End Sub Private Sub SetDefaultCellInFirstColumn() Dim firstColumn As DataGridViewColumn = _ dataGridView.Columns(0) Dim cellStyle As DataGridViewCellStyle = _ New DataGridViewCellStyle() cellStyle.BackColor = Color.Thistle firstColumn.DefaultCellStyle = cellStyle End Sub Private Sub ToolTips() Dim firstColumn As DataGridViewColumn = _ dataGridView.Columns(0) Dim thirdColumn As DataGridViewColumn = _ dataGridView.Columns(2) firstColumn.ToolTipText = _ "This is column uses a default cell." thirdColumn.ToolTipText = _ "This is column uses a template cell." _ & " Changes to one cell's style changes them all." End Sub Private Sub AddAdditionalButtons() AddButton(Button4, "Set Minimum Width of Column Two") AddButton(Button5, "Set Width of Column One") AddButton(Button6, "Autosize Third Column") AddButton(Button7, "Add Thick Vertical Edge") AddButton(Button8, "Style and Number Columns") AddButton(Button9, "Change Column Header Text") AddButton(Button10, "Swap First and Last Columns") End Sub Private Sub AdjustDataGridViewSizing() dataGridView.ColumnHeadersHeightSizeMode = _ DataGridViewColumnHeadersHeightSizeMode.AutoSize End Sub 'Set the minimum width. Private Sub Button4_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button4.Click Dim column As DataGridViewColumn = dataGridView.Columns(1) column.MinimumWidth = 40 End Sub ' Set the width. Private Sub Button5_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button5.Click Dim column As DataGridViewColumn = dataGridView.Columns(0) column.Width = 60 End Sub ' AutoSize the third column. Private Sub Button6_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button6.Click Dim column As DataGridViewColumn = dataGridView.Columns(2) column.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells End Sub ' Set the vertical edge. Private Sub Button7_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button7.Click Dim thirdColumn As Integer = 2 Dim column As DataGridViewColumn = _ dataGridView.Columns(thirdColumn) column.DividerWidth = 10 End Sub ' Style and number columns. Private Sub Button8_Click(ByVal sender As Object, _ ByVal args As EventArgs) Handles Button8.Click Dim style As DataGridViewCellStyle = _ New DataGridViewCellStyle() style.Alignment = _ DataGridViewContentAlignment.MiddleCenter style.ForeColor = Color.IndianRed style.BackColor = Color.Ivory For Each column As DataGridViewColumn _ In dataGridView.Columns column.HeaderCell.Value = _ column.Index.ToString column.HeaderCell.Style = style Next End Sub ' Change the text in the column header. Private Sub Button9_Click(ByVal sender As Object, _ ByVal args As EventArgs) Handles Button9.Click For Each column As DataGridViewColumn _ In dataGridView.Columns column.HeaderText = String.Concat("Column ", _ column.Index.ToString) Next End Sub ' Swap the last column with the first. Private Sub Button10_Click(ByVal sender As Object, _ ByVal args As EventArgs) Handles Button10.Click ' Since display indexes are not necessarily unique to ' each column (for example, multiple columns may have a ' display index of zero) do the below to retrieve the ' first and last column, rather than just swap the column ' with DisplayIndex 0 with the column of the highest ' DisplayIndex. Dim columnCollection As DataGridViewColumnCollection = _ dataGridView.Columns Dim firstVisibleColumn As DataGridViewColumn = _ columnCollection.GetFirstColumn(DataGridViewElementStates.Visible) Dim lastVisibleColumn As DataGridViewColumn = _ columnCollection.GetLastColumn(DataGridViewElementStates.Visible, _ Nothing) Dim firstColumn_sIndex As Integer = firstVisibleColumn.DisplayIndex firstVisibleColumn.DisplayIndex = _ lastVisibleColumn.DisplayIndex lastVisibleColumn.DisplayIndex = firstColumn_sIndex End Sub ' Updated the criteria label. Private Sub dataGridView_AutoSizeColumnCriteriaChanged( _ ByVal sender As Object, _ ByVal args As DataGridViewAutoSizeColumnModeEventArgs) _ Handles DataGridView.AutoSizeColumnModeChanged args.Column.DataGridView.Parent. _ Controls("flowlayoutpanel"). _ Controls(criteriaLabel).Text = _ criteriaLabel & args.Column.AutoSizeMode.ToString End Sub #End Region <STAThreadAttribute()> _ Public Shared Sub Main() Application.Run(New DataGridViewColumnDemo()) End Sub End Class
System.Windows.Forms.DataGridViewElement
System.Windows.Forms.DataGridViewBand
System.Windows.Forms.DataGridViewColumn
Derived Classes
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.