如何添加在GridView控件设计的WinForms日期选择列

如何添加在GridView控件设计的WinForms日期选择列

我使用的WinForm C#。

在那我怎样才能GridView控件添加日期选择器列设计方法。 我可以看到按钮,复选框,链接列。 但日期时间选择器丢失。

和任何方式添加日期时间选择器无需编写代码。 如果可能的话请告诉我....

请帮帮我,..

--------------解决方案-------------

有没有内置的选项来举办日期/时间选择器控件。

但是, DataGridView控制是非常定制,并支持托管自定义控件。 所有你需要做的是延长DataGridViewColumn类来创建一个自定义的列,通过扩展创建一个自定义单元格DataGridViewCell类。

该如何对文章提供的过程中步行通过。

在定制的的DataGridView列压延组件类此添加到您的项目

using System;
using System.Windows.Forms;

public class CalendarColumn : DataGridViewColumn
{
public CalendarColumn() : base(new CalendarCell())
{
}

public override DataGridViewCell CellTemplate
{
get
{
return base.CellTemplate;
}
set
{
// Ensure that the cell used for the template is a CalendarCell.
if (value != null &&
!value.GetType().IsAssignableFrom(typeof(CalendarCell)))
{
throw new InvalidCastException("Must be a CalendarCell");
}
base.CellTemplate = value;
}
}
}

public class CalendarCell : DataGridViewTextBoxCell
{

public CalendarCell()
: base()
{
// Use the short date format.
this.Style.Format = "d";
}

public override void InitializeEditingControl(int rowIndex, object
initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
// Set the value of the editing control to the current cell value.
base.InitializeEditingControl(rowIndex, initialFormattedValue,
dataGridViewCellStyle);
CalendarEditingControl ctl =
DataGridView.EditingControl as CalendarEditingControl;
// Use the default row value when Value property is null.
if (this.Value == null)
{
ctl.Value = (DateTime)this.DefaultNewRowValue;
}
else
{
ctl.Value = (DateTime)this.Value;
}
}

public override Type EditType
{
get
{
// Return the type of the editing control that CalendarCell uses.
return typeof(CalendarEditingControl);
}
}

public override Type ValueType
{
get
{
// Return the type of the value that CalendarCell contains.

return typeof(DateTime);
}
}

public override object DefaultNewRowValue
{
get
{
// Use the current date and time as the default value.
return DateTime.Now;
}
}
}

class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
{
DataGridView dataGridView;
private bool valueChanged = false;
int rowIndex;

public CalendarEditingControl()
{
this.Format = DateTimePickerFormat.Short;
}

// Implements the IDataGridViewEditingControl.EditingControlFormattedValue
// property.
public object EditingControlFormattedValue
{
get
{
return this.Value.ToShortDateString();
}
set
{
if (value is String)
{
try
{
// This will throw an exception of the string is
// null, empty, or not in the format of a date.
this.Value = DateTime.Parse((String)value);
}
catch
{
// In the case of an exception, just use the
// default value so we're not left with a null
// value.
this.Value = DateTime.Now;
}
}
}
}

// Implements the
// IDataGridViewEditingControl.GetEditingControlFormattedValue method.
public object GetEditingControlFormattedValue(
DataGridViewDataErrorContexts context)
{
return EditingControlFormattedValue;
}

// Implements the
// IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.
public void ApplyCellStyleToEditingControl(
DataGridViewCellStyle dataGridViewCellStyle)
{
this.Font = dataGridViewCellStyle.Font;
this.CalendarForeColor = dataGridViewCellStyle.ForeColor;
this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;
}

// Implements the IDataGridViewEditingControl.EditingControlRowIndex
// property.
public int EditingControlRowIndex
{
get
{
return rowIndex;
}
set
{
rowIndex = value;
}
}

// Implements the IDataGridViewEditingControl.EditingControlWantsInputKey
// method.
public bool EditingControlWantsInputKey(
Keys key, bool dataGridViewWantsInputKey)
{
// Let the DateTimePicker handle the keys listed.
switch (key & Keys.KeyCode)
{
case Keys.Left:
case Keys.Up:
case Keys.Down:
case Keys.Right:
case Keys.Home:
case Keys.End:
case Keys.PageDown:
case Keys.PageUp:
return true;
default:
return !dataGridViewWantsInputKey;
}
}

// Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit
// method.
public void PrepareEditingControlForEdit(bool selectAll)
{
// No preparation needs to be done.
}

// Implements the IDataGridViewEditingControl
// .RepositionEditingControlOnValueChange property.
public bool RepositionEditingControlOnValueChange
{
get
{
return false;
}
}

// Implements the IDataGridViewEditingControl
// .EditingControlDataGridView property.
public DataGridView EditingControlDataGridView
{
get
{
return dataGridView;
}
set
{
dataGridView = value;
}
}

// Implements the IDataGridViewEditingControl
// .EditingControlValueChanged property.
public bool EditingControlValueChanged
{
get
{
return valueChanged;
}
set
{
valueChanged = value;
}
}

// Implements the IDataGridViewEditingControl
// .EditingPanelCursor property.
public Cursor EditingPanelCursor
{
get
{
return base.Cursor;
}
}

protected override void OnValueChanged(EventArgs eventargs)
{
// Notify the DataGridView that the contents of the cell
// have changed.
valueChanged = true;
this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
base.OnValueChanged(eventargs);
}
}

public class Form1 : Form
{
private DataGridView dataGridView1 = new DataGridView();

[STAThreadAttribute()]
public static void Main()
{
Application.Run(new Form1());
}

public Form1()
{
this.dataGridView1.Dock = DockStyle.Fill;
this.Controls.Add(this.dataGridView1);
this.Load += new EventHandler(Form1_Load);
this.Text = "DataGridView calendar column demo";
}

private void Form1_Load(object sender, EventArgs e)
{
CalendarColumn col = new CalendarColumn();
this.dataGridView1.Columns.Add(col);
this.dataGridView1.RowCount = 5;
foreach (DataGridViewRow row in this.dataGridView1.Rows)
{
row.Cells[0].Value = DateTime.Now;
}
}
}

您不能添加日期选择器,但您可以创建新的形式,只有日期选择器,确定和取消按钮,并在datagridview的按钮打开

分类:C# 时间:2012-01-01 人气:1
本文关键词: 的WinForms
分享到:

相关文章

  • 如何包装无的WinForms的DataGridViewTextBoxCell(C#),空格或换行符长文本? 2012-01-01

    如何包装无空格或换行符长文本DataGridViewTextBoxCell的WinForms的(C#)? private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if ((e.ColumnIndex == 1) && (e.FormattedValue != null)) { SizeF sizeGraph = e.Graphics.MeasureString

  • 滚动的WinForms DataGridView中的WPF WindowsFormsHost 2012-01-01

    我的ScrollViewer,其中包含了WindowsFormsHost的框架. 该WindowsFormsHost包含一个DataGridView(请不要问我为什么不与WPF DataGrid控件这样做). 因为在DataGridView导致显示错误,同时与ScrollViewer中滚动我禁用的ScrollViewer并启用滚动在我的DataGridView. <Grid x:Name="LayoutRoot"> <WindowsFormsHost Horizont

  • 如何共享.NET 4 MVC应用程序和WinForms应用程序的组件? 2012-01-02

    这个问题的出现是因为WinForms应用程序是一个.NET4客户端配置文件,而我使用的是ASP.NET MVC应用程序中的服务组件是完全.NET4轮廓. 我如何可以共享这两个项目之间的装配? --------------解决方案------------- 您可以使用客户端配置文件有针对性的组装与的完整资料,但不是相反. 所以,你可以建立一个组装针对客户端配置文件和瞄准的完整资料的ASP.NET MVC应用程序中使用它. 但你不能建立一个面向装配的完整资料,并在除非你关掉这个WinForms应用程

  • 会员在C#\的WinForms 2012-01-04

    请告诉我,无论是在WinForms的"会员"级\ WPF? 如果是的话,如何使用它? 我想打一个登录界面的程序,所以,当你点击登录检查服务器上的数据,然后在用户或不会放过. 谢谢! --------------解决方案------------- 请告诉我,无论是在WinForms的"会员"级\ WPF? 不,它不是那么简单,你知道的. 我想打一个登录界面的程序,所以,当你点击登录检查服务器上的数据,然后在用户或不会放过. 它是callled节目. 你坐下来写代码.

  • 在线程的WinForms,生成任务完成HTML报告 2012-01-04

    我有一个WinForms应用程序,它调度使用服务的一些工作. 该服务有一个回调,与工作程序更新数据库. 现在,让我们说我安排X零点项目. 在x工作项目全部建成后,我要生成关于工作统计的HTML报告. 我想,我可以检查所有项目的工作完成的唯一方法就是看在数据库中其完成状态. 谁能告诉我如何以及何时我可以生成HTML报告? 我想我可以用一个线程来轮询分贝,看看是否所有的工作完成,并告知用户界面生成报告,但不知道如何实现这一点. --------------解决方案------------- 您可以使

  • 打印服务器端,从净(无的WinForms) 2012-01-04

    嘿印刷迷们需要一些指点给我在正确的方向进行这方面的发展. 我开发一个当地的商店,我们在后面将要绑定到一个电子商务网站的EPOS系统. 在EPOS系统的前端将是的WinForms,所以我们可以很容易地处理USB设备,我们将要使用的WebForms / MVC的管理控制台. 一个方面我们经验不足的打印. 我们需要打印条码,并希望通过管理控制台(基于网络)来做到这一点. 所以,(最终)的问题. 我们从哪里开始找代码,使我们能够直接打印到从web表单.NET的服务器(IIS)实例连接的打印机. ----

  • 的HTMLDocument在WinForms应用程序,如何判断文本溢出? 2012-01-06

    我有一个WinForms应用程序(Web浏览器对象)加载的对象的HTMLDocument. 我在HTML文档中引用特定HTML表格. 有没有什么办法,我知道,如果从该表中的文本溢出? (高度或宽度). 更新 如果我知道我的HTML表格具有200像素的身高,有可能算的文本和字体大小的行要拿出所需高度内容NEADS的像素数的高度? --------------解决方案------------- 如果指定的宽度和在HTML表格单元格高度(例如200像素),那么你可以使用jQuery来告诉你,如果单元格

  • 创建JPEG文件服务器端与WinForms应用程序和C# 2012-01-06

    我有一些加载图像和文字,并保存编译为JPEG WinForms应用程序. 这一切工作在我的电脑,但我需要这我的Web服务器上运行. 当我同时到远程桌面登录服务器上运行它,它的伟大工程,如果我跑它,而没有连接,它创建了纯黑色的图像. 在我的WinForms应用程序,我加载我的内容到面板,然后使用该面板的drawtoImage功能导出图像. 我如何能得到这个工作服务器端的任何想法? --------------解决方案------------- 好吧,我怎么知道这是一个桌面应用程序. 如果是这样比你

  • 为什么我的WinForms托管WCF服务单线程? 2012-01-06

    我有我使用,以取代旧的ASP.NET Web服务的WCF服务. 该服务似乎工作正常,但它无法处理因某种原因同时请求. 我的实现服务的具有以下属性: [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)] public class HHService : IHHService 我的主人的声明如下: baseAddress = ne

  • 指纹识别C#的WinForms关于Windows 7的平板电脑 2012-01-07

    我已经开发了databaase库存跟踪系统为Windows 7平板电脑(EG优派ViewPad 10)一个单独的接口. 我已经实现指纹读在桌面上,但是,我想问一下,如果它是可以使用平板电脑的触摸屏接口读取指纹注销该用户? 或将我要实现单独fingeprint读者的平板电脑? 如果可能的话,我怎么去这样做呢? 我在C#中的WinForms开发64位. 任何.NET版本,我无所谓. --------------解决方案------------- 如果我正确理解你的问题,触摸屏比指纹读取器的不同. 触

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.167 (s). 10 q(s)