NumericUpDown control with datagridview in vb.net 2.0

Hi 2 all.
How to add an NumericUpDown control to the
DataGridViewControl in vb.net 2.0.
Plz send me a solution.
Thanx in advance.
[146 byte] By [srinivasintouch] at [2007-12-25]
# 1

Example taken from:
http://msdn2.microsoft.com/en-us/library/7tas5c80.aspx

Modified to change CalendarControl to NumericUpDown.

Custom Object Code (NumericUpDown Column Objects)

Public Class NumericUpDownColumn

Inherits DataGridViewColumn

Public Sub New()

MyBase.New(New NumericUpDownCell())

End Sub

Public Overrides Property CellTemplate() As DataGridViewCell

Get

Return MyBase.CellTemplate

End Get

Set(ByVal value As DataGridViewCell)

' Ensure that the cell used for the template is a CalendarCell.

If Not (value Is Nothing) AndAlso _

Not value.GetType().IsAssignableFrom(GetType(NumericUpDownCell)) _

Then

Throw New InvalidCastException("Must be a CalendarCell")

End If

MyBase.CellTemplate = value

End Set

End Property

End Class

Public Class NumericUpDownCell

Inherits DataGridViewTextBoxCell

Public Sub New()

' Use the short date format.

Me.Style.Format = "#.##"

End Sub

Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, _

ByVal initialFormattedValue As Object, _

ByVal dataGridViewCellStyle As DataGridViewCellStyle)

' Set the value of the editing control to the current cell value.

MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, _

dataGridViewCellStyle)

Dim ctl As NumericUpDownEditingControl = _

CType(DataGridView.EditingControl, NumericUpDownEditingControl)

ctl.Value = CType(Me.Value, Decimal)

End Sub

Public Overrides ReadOnly Property EditType() As Type

Get

' Return the type of the editing contol that CalendarCell uses.

Return GetType(NumericUpDownEditingControl)

End Get

End Property

Public Overrides ReadOnly Property ValueType() As Type

Get

' Return the type of the value that CalendarCell contains.

Return GetType(Decimal)

End Get

End Property

Public Overrides ReadOnly Property DefaultNewRowValue() As Object

Get

' Use the current date and time as the default value.

Return 0

End Get

End Property

End Class

Class NumericUpDownEditingControl

Inherits NumericUpDown

Implements IDataGridViewEditingControl

Private dataGridViewControl As DataGridView

Private valueIsChanged As Boolean = False

Private rowIndexNum As Integer

Public Sub New()

Me.DecimalPlaces = 2

End Sub

Public Property EditingControlFormattedValue() As Object _

Implements IDataGridViewEditingControl.EditingControlFormattedValue

Get

Return Me.Value.ToString("#.##")

End Get

Set(ByVal value As Object)

If TypeOf value Is Decimal Then

Me.Value = Decimal.Parse(value)

End If

End Set

End Property

Public Function GetEditingControlFormattedValue(ByVal context _

As DataGridViewDataErrorContexts) As Object _

Implements IDataGridViewEditingControl.GetEditingControlFormattedValue

Return Me.Value.ToString("#.##")

End Function

Public Sub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle As _

DataGridViewCellStyle) _

Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl

Me.Font = dataGridViewCellStyle.Font

Me.ForeColor = dataGridViewCellStyle.ForeColor

Me.BackColor = dataGridViewCellStyle.BackColor

End Sub

Public Property EditingControlRowIndex() As Integer _

Implements IDataGridViewEditingControl.EditingControlRowIndex

Get

Return rowIndexNum

End Get

Set(ByVal value As Integer)

rowIndexNum = value

End Set

End Property

Public Function EditingControlWantsInputKey(ByVal key As Keys, _

ByVal dataGridViewWantsInputKey As Boolean) As Boolean _

Implements IDataGridViewEditingControl.EditingControlWantsInputKey

' Let the DateTimePicker handle the keys listed.

Select Case key And Keys.KeyCode

Case Keys.Left, Keys.Up, Keys.Down, Keys.Right, _

Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp

Return True

Case Else

Return False

End Select

End Function

Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _

Implements IDataGridViewEditingControl.PrepareEditingControlForEdit

' No preparation needs to be done.

End Sub

Public ReadOnly Property RepositionEditingControlOnValueChange() _

As Boolean Implements _

IDataGridViewEditingControl.RepositionEditingControlOnValueChange

Get

Return False

End Get

End Property

Public Property EditingControlDataGridView() As DataGridView _

Implements IDataGridViewEditingControl.EditingControlDataGridView

Get

Return dataGridViewControl

End Get

Set(ByVal value As DataGridView)

dataGridViewControl = value

End Set

End Property

Public Property EditingControlValueChanged() As Boolean _

Implements IDataGridViewEditingControl.EditingControlValueChanged

Get

Return valueIsChanged

End Get

Set(ByVal value As Boolean)

valueIsChanged = value

End Set

End Property

Public ReadOnly Property EditingControlCursor() As Cursor _

Implements IDataGridViewEditingControl.EditingPanelCursor

Get

Return MyBase.Cursor

End Get

End Property

Protected Overrides Sub OnValueChanged(ByVal eventargs As EventArgs)

' Notify the DataGridView that the contents of the cell have changed.

valueIsChanged = True

Me.EditingControlDataGridView.NotifyCurrentCellDirty(True)

MyBase.OnValueChanged(eventargs)

End Sub

End Class

Adding the custom column to a DataGridView

Dim c As New NumericUpDownColumn

c.HeaderText = "Display Name"

c.DataPropertyName = "DataTable Column Name"

Me.myDataGridView.Columns.Add(c)

Be sure to search for your answer in the MSDN library as that's where this example is derived from.

Good luck

rkimble at 2007-9-3 > top of Msdn Tech,Visual Basic,Visual Basic General...