DataGrid 里插入日期控件后。。。。。

hellen_cap 2009-04-22 04:03:39
DataGrid 里插入日期控件后。。。。。
// dataGridTextBoxColumn1
//
this.dataGridTextBoxColumn1.Format = "yyyy-MM-dd hh:mm:ss";
this.dataGridTextBoxColumn1.FormatInfo = null;
this.dataGridTextBoxColumn1.HeaderText = "状态日期";
this.dataGridTextBoxColumn1.MappingName = "状态日期";
this.dataGridTextBoxColumn1.Width = 145;
this.dataGridTextBoxColumn1.NullText="";
this.dataGridTextBoxColumn1.TextBox.Controls.Add(this.dateTimePicker5);

//当日期控件变化,当前列的text也跟着变。
private void dateTimePicker5_ValueChanged(object sender, System.EventArgs e)
{
this.dataGridTextBoxColumn1.TextBox.Text=this.dateTimePicker5.Value.ToString();
}

可是当前列始终是空。。。。

是不是
this.dataGridTextBoxColumn1.TextBox.Text=this.dateTimePicker5.Value.ToString();
有错。
...全文
135 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellen_cap 2009-04-23
  • 打赏
  • 举报
回复
public class DataGridTimePickerColumn : DataGridColumnStyle
{
//这里增加需要被DataGridColumnStyle承载的控件,这里用的是一个
//DateTimePicker,日期控件,其他的控件类似
private DateTimePicker myDateTimePicker = new DateTimePicker();
//isEditing属性用于跟踪用户是否在宿主控件中编辑了其中的数据。
private bool isEditing;

//构造函数
public DataGridTimePickerColumn() : base()
{
myDateTimePicker.Visible = false;
myDateTimePicker.CustomFormat = "yyyyy-MM-dd HH:mm:ss";
myDateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
myDateTimePicker.ShowUpDown=true;
}
/// <summary>
/// 此方法必须重载,Abort将启动一个请求来中断编辑过程。
/// </summary>
/// <param name="rowNum">当前中断的行号</param>
protected override void Abort(int rowNum)
{
isEditing = false;
myDateTimePicker.ValueChanged -=new EventHandler(TimePickerValueChanged);
Invalidate();
}
/// <summary>
/// 此方法必须被重载,而且必须返回2个状态,也就是true或者false,返回false的时候
/// DataGrid就会用到Abort
/// </summary>
/// <param name="dataSource">实际上是一个BindManagerBase</param>
/// <param name="rowNum">当前提交的行号</param>
/// <returns></returns>
protected override bool Commit(CurrencyManager dataSource, int rowNum)
{
myDateTimePicker.Bounds = Rectangle.Empty; //表示其属性未被初始化的 Rectangle 结构。

myDateTimePicker.ValueChanged -= new EventHandler(TimePickerValueChanged);

if (!isEditing)
return true;

isEditing = false;

try
{
DateTime dtValue = myDateTimePicker.Value;
SetColumnValueAtRow(dataSource, rowNum, dtValue);
}
catch (Exception)
{
Abort(rowNum);
return false;
}
Invalidate();
return true;
}
/// <summary>
/// 在派生类中被重写时,将准备一个将要进行编辑的单元格。
/// 通常,Edit 方法将控件定位到网格上要编辑的单元格的位置。
/// </summary>
/// <param name="source">DataGridColumnStyle的CurrencyManager,管理 Binding 对象的列表</param>
/// <param name="rowNum">此列中所编辑的行的行号</param>
/// <param name="bounds">控件将被放置在其中</param>
/// <param name="readOnly">指示该列是否为只读的列的值。如果该值是只读,则为 true;否则为 false</param>
/// <param name="instantText">控件中将显示的文本</param>
/// <param name="cellIsVisible">指示该单元格是否可见的值。如果该单元格可见,则为 true;否则为 false</param>
protected override void Edit(
CurrencyManager source,
int rowNum,
Rectangle bounds,
bool readOnly,
string instantText,
bool cellIsVisible)
{
DateTime dtValue;

object obj = GetColumnValueAtRow(source, rowNum);
if (obj.GetType().ToString()=="System.DateTime")
{
dtValue = (DateTime)obj;
}
else
{
dtValue=DateTime.Now;
}

if (cellIsVisible)
{
myDateTimePicker.Bounds=new Rectangle(bounds.X+2,bounds.Y+2,bounds.Width-4,bounds.Height-4);
myDateTimePicker.Value = dtValue;
myDateTimePicker.Visible = true;
//挂接一个事件,就是承载的控件的变量发生变化的时候发生的事件
//在此事件的方法中主要是改变编辑的状态以及调用基类的方法ColumnStartedEditing
//这个方法用来通知DataGrid开始进入编辑状态
myDateTimePicker.ValueChanged +=new EventHandler(TimePickerValueChanged);
}
else
{
myDateTimePicker.Value = dtValue;
myDateTimePicker.Visible = false;
}

if (myDateTimePicker.Visible)
DataGridTableStyle.DataGrid.Invalidate(bounds);
}
protected override Size GetPreferredSize(Graphics g, object value)
{
return new Size(100, myDateTimePicker.PreferredHeight + 2);
}
protected override int GetMinimumHeight()
{
return myDateTimePicker.PreferredHeight + 2;
}

protected override int GetPreferredHeight(Graphics g,
object value)
{
return myDateTimePicker.PreferredHeight + 2;
}
//重载之一,一个简单的版本,其他没有涉及到的参数采用了默认值
protected override void Paint(Graphics g,
Rectangle bounds,
CurrencyManager source,
int rowNum)
{
Paint(g, bounds, source, rowNum, false);
}
//重载之二,一个简单的版本,其他没有涉及到的参数采用了默认值
protected override void Paint(
Graphics g,
Rectangle bounds,
CurrencyManager source,
int rowNum,
bool alignToRight)
{
Paint(
g,bounds,
source,
rowNum,
Brushes.Red,
Brushes.Blue,
alignToRight);
}
/// <summary>
/// 此方法必须重载,而且,这个方法是一个全面的方法,上面2个方法都是重载的这个方法
/// 此方法应该是在所承载的控件离开DataGrid之后在DataGrid中写入其中内容的方法
/// </summary>
/// <param name="g"></param>
/// <param name="bounds"></param>
/// <param name="source"></param>
/// <param name="rowNum"></param>
/// <param name="backBrush"></param>
/// <param name="foreBrush"></param>
/// <param name="alignToRight"></param>
protected override void Paint(
Graphics g,
Rectangle bounds,
CurrencyManager source,
int rowNum,
Brush backBrush,
Brush foreBrush,
bool alignToRight)
{
DateTime dtValue;
object obj = GetColumnValueAtRow(source, rowNum);
if (obj.GetType().ToString()=="System.DateTime")
{
dtValue = (DateTime)obj;
}
else
{
dtValue=DateTime.Now;
}

Rectangle rect = bounds;
g.FillRectangle(backBrush,rect);
rect.Offset(0, 2);
rect.Height -= 2;
g.DrawString(dtValue.ToString("yyyy-MM-dd HH:mm:ss"),this.DataGridTableStyle.DataGrid.Font,foreBrush, rect);
}
/// <summary>
/// 将要承载的控件关联到DataGrid上
/// </summary>
/// <param name="dgValue"></param>
protected override void SetDataGridInColumn(DataGrid dgValue)
{
base.SetDataGridInColumn(dgValue);
if (myDateTimePicker.Parent != null)
{
myDateTimePicker.Parent.Controls.Remove(myDateTimePicker);
}
if (dgValue != null)
{
dgValue.Controls.Add(myDateTimePicker);
}
}
/// <summary>
/// 被承载的控件的内容发生变化的时候表明用户进行了编辑,此时执行这个事件处理函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TimePickerValueChanged(object sender, EventArgs e)
{
this.isEditing = true;
//通知DataGrid已经开始编辑这一列,其中的参数是需要承载的控件
base.ColumnStartedEditing(myDateTimePicker);
}


}
hellen_cap 2009-04-23
  • 打赏
  • 举报
回复
还是不行,继续up
wolf1118baby 2009-04-23
  • 打赏
  • 举报
回复
你用this.dateTimePicker5.Text试一试!
xuezhanliang6886 2009-04-23
  • 打赏
  • 举报
回复
up!!!
!
麻子Mozart 2009-04-23
  • 打赏
  • 举报
回复
up
hellen_cap 2009-04-23
  • 打赏
  • 举报
回复
UP

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧