Member 11040029 Ответов: 0

Управление хост-Пользователем в ячейке datagridview


Я создал пользовательский элемент управления, который представляет собой комбинацию элемента управления textbox и элемента управления label.
Вот код:

public class UC_AccLedgerInfo: TableLayoutPanel
    {
        public TextBox tb_AccLedgerName;
        public Label lbl_CurrBal;
        string _ledgerName;


        public UC_AccLedgerInfo()
        {
            InitializeTLP();
        }

        void InitializeTLP()
        {            
            this.ColumnCount = 1;
            this.RowCount = 2;
            this.CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset;
            this.AutoSize = true;
            this.RowStyles.Add(new RowStyle(SizeType.AutoSize));
            this.RowStyles.Add(new RowStyle(SizeType.AutoSize));
            AddControls();
        }
        void AddControls()
        {
            TBLedgerName();
            LBLCurrBal();
        }

        void TBLedgerName()
        {
            if (tb_AccLedgerName == null)
                tb_AccLedgerName = new TextBox();            
            tb_AccLedgerName.Anchor = AnchorStyles.Left | AnchorStyles.Right;
            tb_AccLedgerName.BackColor = Color.AliceBlue;
            this.Controls.Add(tb_AccLedgerName, 0, 0);
        }
        public string LedgerName 
        {
            get
            {
                return _ledgerName;
            }
            set
            {
                _ledgerName = value;
            }
        }

        void LBLCurrBal()
        {
            if (lbl_CurrBal == null)
                lbl_CurrBal = new Label();
            lbl_CurrBal.Anchor = AnchorStyles.Left | AnchorStyles.Right;
            lbl_CurrBal.Text = String.Format("Curr Bal: {0}", "2000");
            lbl_CurrBal.BackColor = Color.AliceBlue;
            this.Controls.Add(lbl_CurrBal, 0, 1);
        }       
}



У меня есть DataGridView (DGV) на форме, на которой мне нужно разместить этот элемент управления.
Я создал пользовательский класс DataGridViewEditingControl для своего пользовательского элемента управления.
Кроме того, соответствующий класс DataGridViewCell. Код для ячейки таков:

class DGVAccLedgerInfoCell : DataGridViewCell
   {
       public override Type EditType
       {
           get
           {
               // Return the type of the editing control the cell uses.
               return typeof(DGVAccLedgerInfoEditingControl);
           }
       }
       public override Type ValueType
       {
           get
           {
               // Return the type of the value that NumericCell contains.
               return typeof(String);
           }
       }
   }


Для этого класса ячеек ничего не отображается на dgv в соответствующих ячейках, так как метод paint не указан выше для класса ячеек.

Один из способов, который я нашел в MSDN Как: элементы управления хостом в ячейках Windows Forms DataGridView[^]

Но в примере, приведенном в ссылке, они использовали DataGridViewTextBoxEditingCell для рендеринга события paint для календаря. Это не будет работать для моего пользовательского элемента управления, так как это комбинация элементов управления, которые должны отображаться как есть.

В моем коде DGV ничего не размещает в соответствующей ячейке, так как событие paint не указано. Я не знаю, как указать событие paint для пользовательского управления.
Пожалуйста, проводите.
Спасибо!

Что я уже пробовал:

Я получил эти ссылки после того, как провел значительное время в google:
Как: элементы управления хостом в ячейках Windows Forms DataGridView[^]

c# - Как нарисовать пользовательский элемент управления на datagridviewcell? - переполнение стека[^]

0 Ответов