BG Development


  Reply to this topicStart new topicStart Poll

> dataGridView + dataTable въпрос
KosKor
Публикувано на: 25-09-2018, 15:38
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 1
Регистриран на: 25.09.18



Здравейте.

Търся решение на един проблем и се надявам тук да го намеря.

"system.windows.forms.dataGridView" по подразбиране може да изобрази само 655 колони. Причината е, че свойството FillWeight за всяка отделна колона, пак по подразбиране, е със стойност 100. Когато се зададе създаване на 1000 колони например излиза подобно съобщение:


.NET runtime exception: Sum of the columns' FillWeight values cannot exceed 65535.

Тази стойност 65535 е 2 на 16 степен(65536). Като се раздели на FillWeight = 100 и се получава това ограничение от 655 колони в dataGridView. Решението е да се зададе FillWeight = 1. И това решение работи.

Обаче има един сериозен проблем със скоростта на работа на dataGridView - бавно е при много колони и редове. И самото попълване на клетките с информация е бавно, и превъртането по вертикала и хоризонтала е бавно.

И този проблем си има решение. Може да се използва "system.Data.DataTable", която да се "напълни" с желаната информация и след това да се "подаде" на dataGridView.

("system.windows.forms.dataGridView").DataSource = "system.Data.DataTable".

По този начин зареждането на цялата информация е много по-бързо както и самата навигация след това.От тестовете, който направих, за да се създадат 102 колони и 80 реда с необходимата информация:

чист dataGridView - над 1 секунда

dataTable(("system.windows.forms.dataGridView").DataSource = "system.Data.DataTable") - под 0,2 секунди

dataGridView предлага доста възможности за персонализация - може да се променя цвета на цяла колона, на отделни клетки, да се замразяват и преоразмеряват колони, клетки да се задават като "read only" и т.н.

в dataTablе обаче така и не намирам как може да се правят подобни неща. Най-належащо ми е да мога да замразявам колони.

При dataGridVeiw е лесно: col.frozen=true и желаната колона не се скрива при хоризонтално превъртане на останалите колони.

Как да се направи същото, когато се използва dataTable?

Там колоните ги създавам по следният начин:

dataTable.columns.add "Text" (dotnet.getType "System.String")
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0