удалить элементы управления при изменении источника данных в datagridview - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть собственный UserControl, который рисуется в ячейке DataGridView.Таким образом, для каждой ячейки подряд есть один пользовательский элемент управления

img

У меня также есть поле со списком.При выборе элемента источник данных DataGridView изменяется, и таблица должна обновиться.

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

Это первый выбор, который подходит.

enter image description here

Теперь я выбираю другой элемент из выпадающего списка.Как вы можете видеть, пользовательского контроля в четвертом ряду не должно быть

enter image description here

, теперь я выбираю другой элемент, и представление данных по-прежнему содержит ошибки.Строки 3 и 4 должны быть удалены.

enter image description here

Если требуется больше кода, пожалуйста, дайте мне знать

internal class MetaFieldTable
{
    public MetaFieldTable(DataGridView dgv)
    {
        this.dgv = dgv;

        tableData = new DataTable();

        tableData.Columns.AddRange(new DataColumn[] { // Initialize the data columns for the grid
            new DataColumn("Metafeld"),
            new DataColumn("Zuweisung")
        });
    }

    private DataGridView dgv;
    private DataTable tableData;

    public void CreateMetaFieldTable(CoBRAMetaField[] metaFields, ReleaseSetupData releaseSetupData)
    {
        foreach (Control control in dgv.Controls.OfType<AllocationControl>()) // Remove all user controls and redraw them later
        {
            dgv.Controls.Remove(control);
        }

        dgv.DataSource = null; // clear the data

        tableData.Rows.Clear(); // clear the data (rows)

        for (int i = 0; i < metaFields.Length; i++)
        {
            tableData.Rows.Add(new object[] { metaFields[i].Name, null }); // setup the first and second column
        }

        dgv.DataSource = tableData;

        for (int i = 0; i < dgv.RowCount; i++)
        {
            AllocationControl allocationControl = new AllocationControl(); // Initialize the custom user control
            dgv.Controls.Add(allocationControl);
            Rectangle cellRectangle = dgv.GetCellDisplayRectangle(1, i, true); // place it over the second cell in a row
            allocationControl.Location = cellRectangle.Location;
            allocationControl.Size = cellRectangle.Size;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...