Показват се публикациите с етикет DBGrid. Показване на всички публикации
Показват се публикациите с етикет DBGrid. Показване на всички публикации

02 февруари, 2010

Проблем с липсващи DataSet данни в DBGrid таблица

Махането и добавянето на DataModule към Delphi проект може да ви създаде доста главоболия. Както се казва, това може се се окаже доста tricky.

Поради ред причини може да се наложи да преименувате/махнете/добавите DataModule към даден Delphi проект. На мен ми се наложи, понеже в Project Group имах два проекта, всеки със собствен DataModule, които бяха с еднакви имена. Това ми създаде проблем при debug - отваряше се грешния файл, а при следващо компилиране се изгубиха всички DataSource от DBGrid, тъй като, много ясно, в грешния DataModule тези DataSource не съществуват.

След това падна едно преименуване, махане, слагане, махане, слагане... В следствие на което всички DBGrid, които вземаха от този DataModule спряха да показват данни. Всички DataSource и DataSet от там се активират успешно, но уви - в таблиците не се показва нищо. След цял ден лутане из source и отново преименуване, махане и слагане на DataModule, най-случайно забелязах причината.

В проекта присъстваше създаването на този DataModule 2 пъти - Application.CreateForm(TSBaza, SBaza); И това, понеже формите ги създавам през един ProgressBar, а Delphi решава да ми го добави още един път в началото! Много нетактично от негова страна.

Та, да се има едно наум: ако слагате DBGrid, а даните вътре не се показват, въпреки че сте активирали усшено DataSource, проверете дали случайно нямате създадени два идентични DataModule.

23 юни, 2009

Preserve left visible column in DBGrid

От край време се опитвам да накарам дадена DBGrid таблица, след като сменя избрания ред, да си стои там, до където съм я изместил с хоризонталния плъзгач (scroller) - т.е. лявата видима колона да си седи лява, а не да се премества винаги на първата такава.

Изпробвах малкото варианти, които намерих в Интернет, но нито един не ми свърши работа.

Добре, че е този голям проект, по който работя сега, та да открия решение.
Тъй като имам доста такива таблици по различни форми, забелязах, че на някои места "съм успял" да постигна желания ефект, а на други - не. Сравнявайки свойствата на тези таблици открих нещо интересно: и на двете места използвам OnDrawColumnCell с изключен DefaultDrawing; разликата, която се оказа, че играе важна роля, е опцията dgMultiSelect, която при изключен DefaultDrawing няма същия ефект. Може би ще има страничен ефект, който още не съм открил, но за сега ми служи идеално за целта :)

Та, рецептата е: DefaultDrawing=false, OnDrawColumnCell и dgMultiSelect=true в Options.

ПП: Оказа се, че и още една опция играе съществена роля - dgRowSelect=true.