我正在尝试在 datagridview 单元格中托管用户控件。
我使用来自msdn的 How-To 文章
它工作正常。但是,当我使用包含文本框和按钮的用户控件时,单元格值不会使用用户控件中文本框的值进行更新。
我改代码...
类 CalendarEditingControl : DateTimePicker,
至...
类 CalendarEditingControl : MyUserControl,
当单元格处于编辑模式时,用户控件会显示,但文本框的值不会更新单元格值。
有任何想法吗?谢谢。
这是日历编辑控件...
class CalendarEditingControl : nsFinances.Design.Centres.Account_Registers.Controls.Amount, IDataGridViewEditingControl
{
DataGridView dataGridView;
private bool valueChanged = false;
int rowIndex;
public CalendarEditingControl()
{
//this.Format = DateTimePickerFormat.Short;
this.Width = 75;
}
// Implements the IDataGridViewEditingControl.EditingControlFormattedValue
// property.
public object EditingControlFormattedValue
{
get
{
//return this.Value.ToShortDateString();
return this.AmountValue;
}
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;
//}
this.AmountValue = (string)value;
}
}
}
// 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);
//}
}