在datagridview中托管usercontrol

时间:2013-11-04 18:32:58

标签: c# datagridview user-controls

我正在尝试在datagridview单元格中托管用户控件。

我使用msdn

中的操作方法文章

它运作正常。但是当我使用包含文本框和按钮的usercontrol时,单元格值不会使用用户控件中文本框中的值进行更新。

我改变了代码......

class CalendarEditingControl:DateTimePicker,

要...

class CalendarEditingControl:MyUserControl,

当单元格处于编辑模式时,会显示usercontrol,但文本框的值不会更新单元格值。

有什么想法吗?感谢。

这是CalendarEditingControl ...

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);
    //}
}

1 个答案:

答案 0 :(得分:0)

我读了微软网站上的评论,内容如下: 格式化的值表示在控件的用户界面中显示的值。 格式化的值的绝对值可能与控件中包含的实际值的数据类型不同。