У меня есть собственный UserControl, который рисуется в ячейке DataGridView.Таким образом, для каждой ячейки подряд есть один пользовательский элемент управления
У меня также есть поле со списком.При выборе элемента источник данных DataGridView изменяется, и таблица должна обновиться.
Я удаляю все пользовательские элементы управления во втором столбце, но, как вы можете видеть на следующем изображении, некоторые все еще там, хотя они не должны.
Это первый выбор, который подходит.
Теперь я выбираю другой элемент из выпадающего списка.Как вы можете видеть, пользовательского контроля в четвертом ряду не должно быть
, теперь я выбираю другой элемент, и представление данных по-прежнему содержит ошибки.Строки 3 и 4 должны быть удалены.
Если требуется больше кода, пожалуйста, дайте мне знать
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;
}
}
}