VB.NET
Imports System
Imports System.Windows.Forms
Public Class DataGridViewMaskedTextBoxColumn
Inherits DataGridViewColumn
Public Sub New()
MyBase.New(New DataGridViewMaskedTextBoxCell())
End Sub
Private maskValue As String = ""
Public Property Mask() As String
Get
Return Me.maskValue
End Get
Set(ByVal value As String)
Me.maskValue = value
End Set
End Property
Public Overrides Function Clone() As Object
Dim col As DataGridViewMaskedTextBoxColumn = _
DirectCast(MyBase.Clone(), DataGridViewMaskedTextBoxColumn)
col.Mask = Me.Mask
Return col
End Function
Public Overrides Property CellTemplate() As DataGridViewCell
Get
Return MyBase.CellTemplate
End Get
Set(ByVal value As DataGridViewCell)
If Not (TypeOf value Is DataGridViewMaskedTextBoxCell) Then
' Error
End If
MyBase.CellTemplate = value
End Set
End Property
End Class
Public Class DataGridViewMaskedTextBoxCell
Inherits DataGridViewTextBoxCell
Public Sub New()
End Sub
Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, _
ByVal initialFormattedValue As Object, _
ByVal dataGridViewCellStyle As DataGridViewCellStyle)
MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, _
dataGridViewCellStyle)
Dim maskedBox As DataGridViewMaskedTextBoxEditingControl = _
TryCast(Me.DataGridView.EditingControl, _
DataGridViewMaskedTextBoxEditingControl)
If maskedBox IsNot Nothing Then
Dim maskedText As String = TryCast(initialFormattedValue, String)
maskedBox.Text = If(maskedText IsNot Nothing, maskedText, "")
Dim column As DataGridViewMaskedTextBoxColumn = _
TryCast(Me.OwningColumn, DataGridViewMaskedTextBoxColumn)
If column IsNot Nothing Then
maskedBox.Mask = column.Mask
End If
End If
End Sub
Public Overrides ReadOnly Property EditType() As Type
Get
Return GetType(DataGridViewMaskedTextBoxEditingControl)
End Get
End Property
Public Overrides ReadOnly Property ValueType() As Type
Get
Return GetType(Object)
End Get
End Property
Public Overrides ReadOnly Property DefaultNewRowValue() As Object
Get
Return MyBase.DefaultNewRowValue
End Get
End Property
End Class
Public Class DataGridViewMaskedTextBoxEditingControl
Inherits MaskedTextBox
Implements IDataGridViewEditingControl
Private dataGridView As DataGridView
Private rowIndex As Integer
Private valueChanged As Boolean
Public Sub New()
Me.TabStop = False
End Sub
Public Function GetEditingControlFormattedValue( _
ByVal context As DataGridViewDataErrorContexts) As Object _
Implements IDataGridViewEditingControl.GetEditingControlFormattedValue
Return Me.Text
End Function
Public Property EditingControlFormattedValue() As Object _
Implements IDataGridViewEditingControl.EditingControlFormattedValue
Get
Return Me.GetEditingControlFormattedValue( _
DataGridViewDataErrorContexts.Formatting)
End Get
Set(ByVal value As Object)
Me.Text = DirectCast(value, String)
End Set
End Property
Public Sub ApplyCellStyleToEditingControl( _
ByVal dataGridViewCellStyle As DataGridViewCellStyle) _
Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl
Me.Font = dataGridViewCellStyle.Font
Me.ForeColor = dataGridViewCellStyle.ForeColor
Me.BackColor = dataGridViewCellStyle.BackColor
Select Case dataGridViewCellStyle.Alignment
Case DataGridViewContentAlignment.BottomCenter, _
DataGridViewContentAlignment.MiddleCenter, _
DataGridViewContentAlignment.TopCenter
Me.TextAlign = HorizontalAlignment.Center
Exit Select
Case DataGridViewContentAlignment.BottomRight, _
DataGridViewContentAlignment.MiddleRight, _
DataGridViewContentAlignment.TopRight
Me.TextAlign = HorizontalAlignment.Right
Exit Select
Case Else
Me.TextAlign = HorizontalAlignment.Left
Exit Select
End Select
End Sub
Public Property EditingControlDataGridView() As DataGridView _
Implements IDataGridViewEditingControl.EditingControlDataGridView
Get
Return Me.dataGridView
End Get
Set(ByVal value As DataGridView)
Me.dataGridView = value
End Set
End Property
Public Property EditingControlRowIndex() As Integer _
Implements IDataGridViewEditingControl.EditingControlRowIndex
Get
Return Me.rowIndex
End Get
Set(ByVal value As Integer)
Me.rowIndex = value
End Set
End Property
Public Property EditingControlValueChanged() As Boolean _
Implements IDataGridViewEditingControl.EditingControlValueChanged
Get
Return Me.valueChanged
End Get
Set(ByVal value As Boolean)
Me.valueChanged = value
End Set
End Property
Public Function EditingControlWantsInputKey(ByVal keyData As Keys, _
ByVal dataGridViewWantsInputKey As Boolean) As Boolean _
Implements IDataGridViewEditingControl.EditingControlWantsInputKey
Select Case keyData And Keys.KeyCode
Case Keys.Right, Keys.[End], Keys.Left, Keys.Home
Return True
Case Else
Return Not dataGridViewWantsInputKey
End Select
End Function
Public ReadOnly Property EditingPanelCursor() As Cursor _
Implements IDataGridViewEditingControl.EditingPanelCursor
Get
Return MyBase.Cursor
End Get
End Property
Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _
Implements IDataGridViewEditingControl.PrepareEditingControlForEdit
If selectAll Then
Me.SelectAll()
Else
Me.SelectionStart = Me.TextLength
End If
End Sub
Public ReadOnly Property RepositionEditingControlOnValueChange() As Boolean _
Implements IDataGridViewEditingControl.RepositionEditingControlOnValueChange
Get
Return False
End Get
End Property
Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
MyBase.OnTextChanged(e)
Me.valueChanged = True
Me.dataGridView.NotifyCurrentCellDirty(True)
End Sub
End Class
Dim maskedColumn As New DataGridViewMaskedTextBoxColumn()
maskedColumn.DataPropertyName = "col1"
maskedColumn.Mask = "000"
dgv1.Columns.Add(maskedColumn)
C#using System;
using System.Windows.Forms;
public class DataGridViewMaskedTextBoxColumn :
DataGridViewColumn
{
public DataGridViewMaskedTextBoxColumn()
: base(new DataGridViewMaskedTextBoxCell())
{
}
private string maskValue = "";
public string Mask
{
get
{
return this.maskValue;
}
set
{
this.maskValue = value;
}
}
public override object Clone()
{
DataGridViewMaskedTextBoxColumn col =
(DataGridViewMaskedTextBoxColumn)base.Clone();
col.Mask = this.Mask;
return col;
}
public override DataGridViewCell CellTemplate
{
get
{
return base.CellTemplate;
}
set
{
if (!(value is DataGridViewMaskedTextBoxCell))
{
// Error
}
base.CellTemplate = value;
}
}
}
public class DataGridViewMaskedTextBoxCell :
DataGridViewTextBoxCell
{
public DataGridViewMaskedTextBoxCell()
{
}
public override void InitializeEditingControl(
int rowIndex, object initialFormattedValue,
DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex,
initialFormattedValue, dataGridViewCellStyle);
DataGridViewMaskedTextBoxEditingControl maskedBox =
this.DataGridView.EditingControl as
DataGridViewMaskedTextBoxEditingControl;
if (maskedBox != null)
{
string maskedText = initialFormattedValue as string;
maskedBox.Text = maskedText != null ? maskedText : "";
DataGridViewMaskedTextBoxColumn column =
this.OwningColumn as DataGridViewMaskedTextBoxColumn;
if (column != null)
{
maskedBox.Mask = column.Mask;
}
}
}
public override Type EditType
{
get
{
return typeof(DataGridViewMaskedTextBoxEditingControl);
}
}
public override Type ValueType
{
get
{
return typeof(object);
}
}
public override object DefaultNewRowValue
{
get
{
return base.DefaultNewRowValue;
}
}
}
public class DataGridViewMaskedTextBoxEditingControl :
MaskedTextBox, IDataGridViewEditingControl
{
DataGridView dataGridView;
int rowIndex;
bool valueChanged;
public DataGridViewMaskedTextBoxEditingControl()
{
this.TabStop = false;
}
public object GetEditingControlFormattedValue(
DataGridViewDataErrorContexts context)
{
return this.Text;
}
public object EditingControlFormattedValue
{
get
{
return this.GetEditingControlFormattedValue(
DataGridViewDataErrorContexts.Formatting);
}
set
{
this.Text = (string)value;
}
}
public void ApplyCellStyleToEditingControl(
DataGridViewCellStyle dataGridViewCellStyle)
{
this.Font = dataGridViewCellStyle.Font;
this.ForeColor = dataGridViewCellStyle.ForeColor;
this.BackColor = dataGridViewCellStyle.BackColor;
switch (dataGridViewCellStyle.Alignment)
{
case DataGridViewContentAlignment.BottomCenter:
case DataGridViewContentAlignment.MiddleCenter:
case DataGridViewContentAlignment.TopCenter:
this.TextAlign = HorizontalAlignment.Center;
break;
case DataGridViewContentAlignment.BottomRight:
case DataGridViewContentAlignment.MiddleRight:
case DataGridViewContentAlignment.TopRight:
this.TextAlign = HorizontalAlignment.Right;
break;
default:
this.TextAlign = HorizontalAlignment.Left;
break;
}
}
public DataGridView EditingControlDataGridView
{
get
{
return this.dataGridView;
}
set
{
this.dataGridView = value;
}
}
public int EditingControlRowIndex
{
get
{
return this.rowIndex;
}
set
{
this.rowIndex = value;
}
}
public bool EditingControlValueChanged
{
get
{
return this.valueChanged;
}
set
{
this.valueChanged = value;
}
}
public bool EditingControlWantsInputKey(
Keys keyData, bool dataGridViewWantsInputKey)
{
switch (keyData & Keys.KeyCode)
{
case Keys.Right:
case Keys.End:
case Keys.Left:
case Keys.Home:
return true;
default:
return !dataGridViewWantsInputKey;
}
}
public Cursor EditingPanelCursor
{
get
{
return base.Cursor;
}
}
public void PrepareEditingControlForEdit(bool selectAll)
{
if (selectAll)
{
this.SelectAll();
}
else
{
this.SelectionStart = this.TextLength;
}
}
public bool RepositionEditingControlOnValueChange
{
get
{
return false;
}
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
this.valueChanged = true;
this.dataGridView.NotifyCurrentCellDirty(true);
}
}
DataGridViewMaskedTextBoxColumn maskedColumn =
new DataGridViewMaskedTextBoxColumn();
maskedColumn.DataPropertyName = "col1";
maskedColumn.Mask = "000";
dgv1.Columns.Add(maskedColumn);