У меня есть tableLayoutPanel
, который я использую с Windows Form. Элемент управления заполняется из datatable
, который содержит данные сервера sql. Я уже подтвердил, что заявление select
не является проблемой.Любой способ оптимизации заполнения таблицыLayoutPanel?
Частота данных часто обновляется, поэтому часто обновляется tableLayoutPanel
. Это, по существу, хорошо работает, но доходит до того, что он становится немного медленнее, и мерцание становится более заметным.
Everytime Мне нужно, чтобы обновить элемент управления, этот код выполняется:
public void FillTlp()
{
tableLayoutPanel1.Controls.Clear();
tableLayoutPanel1.ColumnStyles.Clear();
foreach (DataRow r in DT.Rows)
{
UcColor button = new UcColor(r);
tableLayoutPanel1.Controls.Add(button);//, colNumNew, rowNum);
}
this.Controls.Add(tableLayoutPanel1);
}
Поскольку всегда будет иметь 8 строк, я выполнить следующий код в форме конструктора только один раз, но я не вижу много пользы:
public FormDoctorMonitor()
{
tableLayoutPanel1.RowStyles.Clear();
tableLayoutPanel1.RowCount = 8;
FillTlp();
}
Как еще можно оптимизировать заполнение tableLayoutPanel
?
Спасибо.
Очевидный вопрос: почему «обновить» на самом деле «построить с нуля»? Измените только то, что нужно изменить. – DonBoitnott
Без [MCVE] (http://stackoverflow.com/help/mcve) трудно сказать, в чем проблема. Несколько советов: ** 1 - ** Перед добавлением новых элементов управления на панель сначала добавьте предыдущие элементы управления «Dispose». В настоящее время вы удаляете их только. Вы должны выполнять удаление и удаление. ** 2 - ** Вызов 'panel.SuspendLayout();' перед удалением элементов управления и вызовом 'panel.ResumeLayout (true);' после добавления новых элементов управления может помочь. –
@RezaAghaei, где я должен добавить 'tableLayoutPanel1.Dispose();'? Если я добавлю его в начале, я получу ошибку времени выполнения «Не удается получить доступ к удаленному объекту». Я изменил образец кода с вашими предложениями; сообщите мне, если они находятся в нужном месте. – rbhat