Как я могу изменить положение элементов управления, добавленных в DataGridView, или добавить элемент управления непосредственно в строку в DataGridView? - PullRequest
0 голосов
/ 25 апреля 2020

В моем DataGridView мне удалось использовать свойства DividerHeight & Height строки в моем DGV, чтобы добавить пробел между строками. Мой основной DGV со столбцом кнопки, который добавляет к высоте делителя: dividerheight changed

Я хочу поместить еще один DataGridView в это пространство, но я не думаю, что есть какой-либо способ разместить Контроль в самом ряду. Я попытался отредактировать поля нового элемента управления DataGridView, чтобы посмотреть, смогу ли я разместить его в parentDGV, чтобы он поместился в этот разделитель между строками, но новый DGV просто заполняет все пространство под заголовками столбцов parentDGV независимо от значение поля или настройка Dock нового DGV. то есть это: the new DGV control being added

вот мой код:

                    DataGridView newDGV = Program.GetGridView();
                    //-------------------------------------------------setting edits-----
                    newDGV.Dock = DockStyle.None;
                    newDGV.Visible = true;


                    newDGV.Name = senderDGV.Name + "/" + e.RowIndex.ToString() + "," + senderDGV.Columns[e.ColumnIndex].Name;
                    //-------------------------------------------------------------------
                    MenuStrip newMenuStrip = Program.GetSubMenuStrip();

                    senderDGV.Controls.Add(newDGV);
                    //not sure how to use "Thickness" value type
                    var margin = newDGV.Margin;
                    margin.Top = (int)((e.RowIndex > 0 ? GetDataGridViewHeightAtRow(senderDGV, e.RowIndex - 1) : 0) + senderDGV.RowTemplate.Height);
                    Console.WriteLine("top margin =" + margin.Top.ToString());


                    //add up height before row to place new dgv into
                    newDGV.Margin = margin;

                    DatabaseFunct.LoadTable(newDGV);

                    //add menu strip to new dgv
                    newDGV.Controls.Add(newMenuStrip);


                    int nDGVHeight = newDGV.ColumnHeadersHeight + newDGV.RowTemplate.Height * newDGV.Rows.Count;
                    //test
                    senderDGV.Rows[e.RowIndex].DividerHeight = nDGVHeight + 10;
                    senderDGV.Rows[e.RowIndex].Height = senderDGV.RowTemplate.Height + nDGVHeight + 10;

Редактировать -------------- ------------

Я понял, что Location - это свойство, которое контролирует положение элементов управления, которые я добавляю в DataGridView. Новые проблемы: Location относится к самому окну, а не к строкам DGV. Поэтому прокрутка строк вверх или вниз не влияет на расположение добавленного элемента управления.

В целом, даже если это все, с чем мне приходится работать, я, вероятно, смогу исправить это, обновив позиции новых DGV на «событии прокрутки DGV» и некотором «событии изменения размера окна»

Я все еще ищу альтернативное решение, которое не требует связки кода для постоянной обработки расположение элементов управления в окне, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...