For example, you could create a new column type that supports the Masked Edit feature found in the Masked Text Box control.This new custom column type would be very useful when trying to prevent input errors.For example, if a user types in alpha characters (like "abc") into a numeric field, a data conversion error occurs before Row Validation.In this case we need a "global" error checker to detect data conversion errors.It also implements the properties that will be required later on by the Masked Text Box control, namely the Mask, Prompt Char, and Validating Type properties.Public Class Data Grid View Masked Edit Column Inherits Data Grid View Column Private p Prompt Char As Char = "_"c Private p Validating Type As Type = Get Type(String) Private p Mask As String = "" Public Sub New() My Base. Prompt Char End Sub Public Overrides Read Only Property Edit Type() As Type Get ' Return the type of the editing control that Masked Edit Editing Control uses.The remaining overrides are to adjust to the fact that the Masked Text Box control supports multiple "validating types". Editing Control Formatted Value Get Return Me.value Is Changed. End Sub Public Read Only Property Reposition Editing Control On Value Change() As Boolean _ Implements IData Grid View Editing Control.
A Column control that inherits from Data Grid View Column, a Cell control that inherits from Data Grid View Text Box Cell, and an Editing Control that implements the IData Grid View Editing Control interface The Masked Edit Column class is fairly straight forward; it only overrides one property (to ensure that the correct cell type it used).The Data Grid View is a very powerful windows form control for providing a user interface to tabular data.It has the initial "look and feel" of an Excel spreadsheet.Let's see what's required to implement a custom column control.The source code for the custom Data Grid View Masked Edit Column is found below.Next, you'll need to add a Data Grid View to a form. ' create new style object Dim style As New Data Grid View Cell Style ' set the alignment to the right (for numbers) style. Middle Right ' add a wee bit of padding to the right side Dim p As New Windows. This allows you to use a "business rule" to validate the user input.From inside the Form Designer, you should see a very small triangle at the upper right-hand corner of the Data Grid View control. For example, if the Units On Hand column can never be a negative number,you could write a validating rule that looks to see if the value is negative prior to committing the changes to that row.Cell Template = value End Set End Property ' ' New properties required by the Masked Text Box control ' Public Property Mask() As String Get Return p Mask End Get Set(By Val value As String) p Mask = value End Set End Property Public Property Prompt Char() As Char Get Return p Prompt Char End Get Set(By Val value As Char) p Prompt Char = value End Set End Property Public Property Validating Type() As Type Get Return p Validating Type End Get Set(By Val value As Type) p Validating Type = value End Set End Property End Class The next step is the Masked Edit Cell class. Most of the code required to implement the methods and properties is fairly straight forward. Editing Control Wants Input Key Return True End Function Public Sub Prepare Editing Control For Edit(By Val select All As Boolean) Implements _ IData Grid View Editing Control.It overrides the Initialize Editing Control method to allow the Mask, Prompt Char, and Validating Type properties from the column class to be passed onto the Cell class. Class Masked Edit Editing Control Inherits Masked Text Box Implements IData Grid View Editing Control Private data Grid View Control As Data Grid View Private value Is Changed As Boolean = False Private row Index Num As Integer Public Sub New() End Sub Public Property Editing Control Formatted Value() As Object Implements _ IData Grid View Editing Control. Prepare Editing Control For Edit ' No preparation needs to be done.New(New Data Grid View Masked Edit Cell()) End Sub Public Overrides Property Cell Template() As Data Grid View Cell Get Return My Base. Return Get Type(Masked Edit Editing Control) End Get End Property Public Overrides Read Only Property Value Type() As Type Get ' Return the type of the value that Masked Edit Editing Control contains. Validating Type End Get End Property Public Overrides Read Only Property Default New Row Value() As Object Get Return "" End Get End Property End Class Lastly, is the Editing Control. Back Color End Sub Public Property Editing Control Row Index() As Integer Implements _ IData Grid View Editing Control.Cell Template End Get Set(By Val value As Data Grid View Cell) ' Ensure that the cell used for the template is a Masked Edit Cell If Not (value Is Nothing) And Not value. Is Assignable From( _ Get Type(Data Grid View Masked Edit Cell)) Then Throw New Invalid Cast Exception("Must be a Data Grid View Masked Edit Cell") End If My Base. It inherits from the Masked Text Box control (to get the user interface we want) and implements the Editing Control interface so that the control works inside the Data Grid View. Editing Control Row Index Get Return row Index Num End Get Set(By Val value As Integer) row Index Num = value End Set End Property Public Function Editing Control Wants Input Key(By Val key As Keys, By Val _ data Grid View Wants Input Key As Boolean) As Boolean Implements _ IData Grid View Editing Control.