Hi Faizal,
Check this example. Now please take its reference and correct your code.
Form Design
I have added a DataGridView and a Button to the Windows Form.
Namespaces
You will need to import the following namespaces.
C#
using System.Data;
Code
C#
// Declare DateTimePicker.
DateTimePicker dateTimePicker1;
public Form1()
{
InitializeComponent();
this.BindDataGridView();
}
private void BindDataGridView()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] {
new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Date",typeof(DateTime)) });
dt.Rows.Add(1, "John Hammond", DateTime.Now.ToShortDateString());
dt.Rows.Add(2, "Mudassar Khan", DateTime.Now.ToShortDateString());
dt.Rows.Add(3, "Suzanne Mathews", DateTime.Now.ToShortDateString());
dt.Rows.Add(4, "Robert Schidner", DateTime.Now.ToShortDateString());
this.dataGridView1.DataSource = dt;
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
// Check the cell clicked is not the column header cell
if (e.RowIndex != -1)
{
// Apply on column index in which you want to display DatetimePicker.
// For this example it is 2.
if (e.ColumnIndex == 2)
{
// Initialize the dateTimePicker1.
dateTimePicker1 = new DateTimePicker();
// Adding the dateTimePicker1 into DataGridView.
dataGridView1.Controls.Add(dateTimePicker1);
// Setting the format i.e. mm/dd/yyyy)
dateTimePicker1.Format = DateTimePickerFormat.Short;
// Create retangular area that represents the display area for a cell.
Rectangle oRectangle = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
// Setting area for dateTimePicker1.
dateTimePicker1.Size = new Size(oRectangle.Width, oRectangle.Height);
// Setting location for dateTimePicker1.
dateTimePicker1.Location = new Point(oRectangle.X, oRectangle.Y);
// An event attached to dateTimePicker1 which is fired when any date is selected.
dateTimePicker1.TextChanged += new EventHandler(DateTimePickerChange);
// An event attached to dateTimePicker1 which is fired when DateTimeControl is closed.
dateTimePicker1.CloseUp += new EventHandler(DateTimePickerClose);
}
}
}
private void DateTimePickerChange(object sender, EventArgs e)
{
dataGridView1.CurrentCell.Value = dateTimePicker1.Text.ToString();
MessageBox.Show(string.Format("Date changed to {0}", dateTimePicker1.Text.ToString()));
}
private void DateTimePickerClose(object sender, EventArgs e)
{
dateTimePicker1.Visible = false;
}
private void btnSave_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
MessageBox.Show(string.Format("Selected Date for {0} is {1}", row.Cells[1].Value, Convert.ToDateTime(row.Cells[2].Value).ToShortDateString()));
}
}
VB.Net
Private dateTimePicker1 As DateTimePicker
Public Sub New()
InitializeComponent()
Me.BindDataGridView()
End Sub
Private Sub BindDataGridView()
Dim dt As DataTable = New DataTable()
dt.Columns.AddRange(New DataColumn(2) {New DataColumn("Id", GetType(Integer)), _
New DataColumn("Name", GetType(String)), _
New DataColumn("Date", GetType(DateTime))})
dt.Rows.Add(1, "John Hammond", DateTime.Now.ToShortDateString())
dt.Rows.Add(2, "Mudassar Khan", DateTime.Now.ToShortDateString())
dt.Rows.Add(3, "Suzanne Mathews", DateTime.Now.ToShortDateString())
dt.Rows.Add(4, "Robert Schidner", DateTime.Now.ToShortDateString())
Me.dataGridView1.DataSource = dt
End Sub
Private Sub dataGridView1_CellClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dataGridView1.CellClick
' Check the cell clicked is not the column header cell
If Not e.RowIndex = -1 Then
'Apply on column index in which you want to display DatetimePicker.
'For this example it is 2.
If e.ColumnIndex = 2 Then
'Initialize the dateTimePicker1.
dateTimePicker1 = New DateTimePicker()
'Adding the dateTimePicker1 into DataGridView.
dataGridView1.Controls.Add(dateTimePicker1)
' Setting the format i.e. mm/dd/yyyy)
dateTimePicker1.Format = DateTimePickerFormat.Short
' Create retangular area that represents the display area for a cell.
Dim oRectangle As Rectangle = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, True)
' Setting area for dateTimePicker1.
dateTimePicker1.Size = New Size(oRectangle.Width, oRectangle.Height)
' Setting location for dateTimePicker1.
dateTimePicker1.Location = New Point(oRectangle.X, oRectangle.Y)
' An event attached to dateTimePicker1 which is fired when any date is selected.
AddHandler dateTimePicker1.TextChanged, AddressOf DateTimePickerChange
' An event attached to dateTimePicker1 which is fired when DateTimeControl is closed.
AddHandler dateTimePicker1.CloseUp, AddressOf DateTimePickerClose
End If
End If
End Sub
Private Sub DateTimePickerChange(ByVal sender As Object, ByVal e As EventArgs)
dataGridView1.CurrentCell.Value = dateTimePicker1.Text.ToString()
MessageBox.Show(String.Format("Date changed to {0}", dateTimePicker1.Text.ToString()))
End Sub
Private Sub DateTimePickerClose(ByVal sender As Object, ByVal e As EventArgs)
dateTimePicker1.Visible = False
End Sub
Private Sub btnSave_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSave.Click
For Each row As DataGridViewRow In dataGridView1.Rows
MessageBox.Show(String.Format("Selected Date for {0} is {1}", row.Cells(1).Value, Convert.ToDateTime(row.Cells(2).Value).ToShortDateString()))
Next
End Sub
Screenshot