【问题标题】:Host usercontrol in datagridview在 datagridview 中托管用户控件
【发布时间】:2013-11-04 18:32:57
【问题描述】:

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

我使用来自 msdn 的 How-To 文章

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

我改代码...

类 CalendarEditingControl : DateTimePicker,

到...

类 CalendarEditingControl : MyUserControl,

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

有什么想法吗?谢谢。

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

【问题讨论】:

  • 是什么让你认为用户控件没有显示。我刚刚做了,它显示了用户控件。
  • 向我们展示你对CalendarEditingControl的实现。
  • 确实显示了用户控件,但是当我离开该单元格时,当前单元格没有得到更新。

标签: c# datagridview user-controls


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    相关资源
    最近更新 更多