0

我正在尝试在 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);
    //}
}
4

1 回答 1

0

我阅读了 Microsoft 站点上的注释,上面写着: 格式化值表示在控件的用户界面中显示的值。格式化的值可能与控件中包含的实际值在绝对值甚至数据类型上有所不同。

于 2015-05-11T17:40:56.243 回答