Я создал DataGradView в C#, что позволяет мне свернуть и развернуть строки. выглядит так:C# Эффективность Datagridview страдает при спрячении многих строк
При запуске я хочу, чтобы свернуть все клиенты с несколькими entrys. Как показано на картинке. Если вы удовлетворены, если вы используете , не стесняйтесь спрашивать нас: customers is < 10.000
.
Код для сворачивания всех клиентов:
int number = 0;
int oldnumber = 0;
int parent = 0;
foreach (CustomDataGridViewRow row in dataGridView1.Rows)
{
try
{
number = int.Parse(row.Cells[1].Value.ToString());
if (number != oldnumber && int.Parse(dataGridView1.Rows[row.Index + 1].Cells[1].Value.ToString()) == number)
{
row.Is_expander = true;
parent = row.Index;
}
if (number == oldnumber)
{
row.hide(parent);
}
oldnumber = number;
}
catch { }
}
Еогеасп ряд, который должен разрушиться я называю row.hide(parent)
, которые устанавливают видимость ложь и сохраняет родительский индекс.
Еогеасп родительской строки значок будет нарисован
Можете ли вы догадаться, почему это занимает так много времени, чтобы скрыть все эти строки? Может быть, после того, как каждый экран скрытой строки снова проиграет? Возможно, я делаю ненужные или тяжелые вещи в цикле? Я понятия не имею
Просто установка virtualmode = true не показало никакого результата. Кстати: он также кажется, что он занимает экспоненциальное время, чтобы скрыть все строки. 5000 строк за 2 секунды и 20 000 строк за 2 минуты –
Прочтите статью, на которую ссылается, виртуальный режим больше, чем просто логическое свойство. Вы должны обрабатывать различные события, которые запускаются для заполнения видимого окна ячеек. Я создал сгруппированную сетку, которая может отображать 100 000 + строк, используя этот подход. – ColinE
Какие события точно уволены при скрытии строки? Вы скрываете или удаляете строки? Ive выяснил, что удаление и добавление более эффективно, чем скрытие. –