0

datagridview セルでユーザー コントロールをホストしようとしています。

msdnのハウツー記事を使用します

正常に動作します。しかし、テキスト ボックスとボタンを含むユーザー コントロールを使用すると、ユーザー コントロールのテキスト ボックスの値でセルの値が更新されません。

コードを変更します...

class CalendarEditingControl : DateTimePicker,

に...

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

1 に答える 1

0

Microsoft サイトのコメントを読みました。書式設定された値は、コントロールのユーザー インターフェイスに表示される値を表します。書式設定された値は、コントロールに含まれる実際の値とは絶対値やデータ型が異なる場合があります。

于 2015-05-11T17:40:56.243 に答える