I've overridden / changed your MyDataTable function to pass a parameter which is the number of days in the selected month and amended the loop to populate the datatable ...
private DataTable MyDataTable(int MaxCount)
{
DataTable dt = new DataTable("MyDataTable");
DataColumn dcID = new DataColumn("Month");
dt.Columns.Add(dcID);
DataRow dr;
for (int count = 1; count <= MaxCount; count++)
{
dr = dt.NewRow();
dr["Month"] = count;
dt.Rows.Add(dr);
}
return dt;
}
Then the ValueChanged function can be written like this
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
DateTime dt = dateTimePicker1.Value;
int maxDays = DateTime.DaysInMonth(dt.Year, dt.Month);
dataGridView1.DataSource = MyDataTable(maxDays);
}
Working out the number of days in the month could have gone into the MyDataTable function but I'm not keen on mixing UI control stuff in with generic functions.
...
Now having read your question again I'm not sure if you want just a single date added to the dataGridView, so I'm also posting a solution to that ...
private DataTable NewDataTable(DateTime myDate)
{
DataTable dt = new DataTable("MyDataTable");
dt.Columns.Add(new DataColumn("Month"));
dt.Columns.Add(new DataColumn("Day"));
dt.Columns.Add(new DataColumn("Year"));
DataRow dr = dt.NewRow();
dr.ItemArray = new object[] {myDate.Month, myDate.Day, myDate.Year};
dt.Rows.Add(dr);
return dt;
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
dataGridView1.DataSource = NewDataTable(dateTimePicker1.Value);
}