C# 任何列中DataGridView标题中的日历
是否可以在任何列的DataGridView标题中添加日历选择器 大概是这样的:C# 任何列中DataGridView标题中的日历,c#,winforms,datagridview,calendar,C#,Winforms,Datagridview,Calendar,是否可以在任何列的DataGridView标题中添加日历选择器 大概是这样的: 我以这种方式处理了类似于Excel过滤器的效果 显然,您必须构建日历控件。 使用WPF数据网格更容易 如果希望产生这种影响,可以尝试在DataGridView中实现此事件: private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { if (e.Button == Mou
我以这种方式处理了类似于Excel过滤器的效果 显然,您必须构建日历控件。 使用WPF数据网格更容易 如果希望产生这种影响,可以尝试在DataGridView中实现此事件:
private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
DataGridView dg = (DataGridView)sender;
BindingSource bs = (BindingSource)dg.DataSource;
//TODO;
}
else if (e.Button == MouseButtons.Right)
{
FrmMyCalendar f = new FrmMyCalendar();
f.Location = new Point(Cursor.Position.X, Cursor.Position.Y);
//TODO
}
}
您可以考虑通过ElementHost缓慢地引入网格WPF是的。。。这是可能的
DateTimePicker dtPicker;
private void Form_Load(object sender, EventArgs e)
{
dtPicker = new DateTimePicker();
dtPicker.Format = DateTimePickerFormat.Short;
dtPicker.Visible = false;
dtPicker.Width = 100;
dgT.Controls.Add(dtPicker);
dtPicker.ValueChanged += this.dtPicker_ValueChanged;
dgT.CellBeginEdit += this.dgT_CellBeginEdit;
dgT.CellEndEdit += this.dgT_CellEndEdit;
}
private void dgT_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
try
{
if ((dgT.Focused) && (dgT.CurrentCell.ColumnIndex == 2)) // Here you can define on which column DateTimePicker will be activated
{
dtPicker.Location = dgT.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).Location;
dtPicker.Visible = true;
if (dgT.CurrentCell.Value != DBNull.Value)
{
dtPicker.Value = (DateTime)dgT.CurrentCell.Value;
}
else
{
dtPicker.Value = DateTime.Today;
}
}
else
{
dtPicker.Visible = false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void dgT_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
try
{
if ((dgT.Focused) && (dgT.CurrentCell.ColumnIndex == 2))
{
dgT.CurrentCell.Value = dtPicker.Value.Date;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void dtPicker_ValueChanged(object sender, EventArgs e)
{
dgT.CurrentCell.Value = dtPicker.Text;
}
private void dgT_Scroll(object sender, ScrollEventArgs e)
{
dtPicker.Visible = false;
}
只需将DataGridView
放在表单a上。在我的例子中,我把它命名为dgT