I have always stayed away from using Delphi's DBGrid because it gave me the feeling of being in the cockpit of an airplane without a clue, as to what all the controls are, or even where to look first. I've decided to roll up my sleeves and get over my fear and anxiety of Delphi's DBGrid.
I'm currently using XE4 and I've been struggling with data validation within a DBGrid as you can see from a recent SO post How to get the value that caused the TDBGridInplaceEdit error?
After reading the answer I got from @bummi, I started googling related topics. Then I remembered I have a copy of Borland's Delphi 7 Developer's Guide.
I quickly turned to Chapter 25 and found all the information I need to know, written in a friendly and very informative way. It's perfect. Each topic builds upon the previous topic giving a full treatment of the subject matter. Here is the table of contents for Chapter 25 of Borland's Delphi 7 Developer Guide:
Chapter 25 | Page |
Working with field components | 25-1 |
Dynamic field components | 25-2 |
Persistent field components | 25-3 |
Creating persistent fields | 25-4 |
Arranging persistent fields | 25-5 |
Defining new persistent fields | 25-5 |
Defining a data field | 25-6 |
Defining a calculated field | 25-7 |
Programming a calculated field | 25-8 |
Defining a lookup field | 25-9 |
Defining an aggregate field | 25-10 |
Deleting persistent field components | 25-11 |
Setting persistent field properties and events | 25-11 |
Setting display and edit properties at design time | 25-11 |
Setting field component properties at runtime | 25-13 |
Creating attribute sets for field components | 25-13 |
Associating attribute sets with field components | 25-14 |
Removing attribute associations | 25-14 |
Controlling and masking user input | 25-15 |
Using default formatting for numeric, date, and time fields | 25-15 |
Handling events | 25-16 |
Working with field component methods at runtime | 25-17 |
Displaying, converting, and accessing field values | 25-18 |
Displaying field component values in standard controls | 25-18 |
Converting field values | 25-19 |
Accessing field values with the default dataset property | 25-20 |
Accessing field values with a dataset’s Fields property | 25-21 |
Accessing field values with a dataset’s FieldByName method | 25-21 |
Setting a default value for a field | 25-22 |
Working with constraints | 25-22 |
Creating a custom constraint | 25-22 |
Using server constraints | 25-23 |
Using object fields | 25-23 |
Displaying ADT and array fields | 25-24 |
Working with ADT fields | 25-25 |
Using persistent field components | 25-25 |
Using the dataset’s FieldByName method | 25-25 |
Using the dateset’s FieldValues property | 25-25 |
Using the ADT field’s FieldValues property | 25-26 |
Using the ADT field’s Fields property | 25-26 |
Working with array fields | 25-26 |
Using persistent fields | 25-26 |
Using the array field’s FieldValues property | 25-27 |
Using the array field’s Fields property | 25-27 |
Working with dataset fields | 25-27 |
Displaying dataset fields | 25-27 |
Accessing data in a nested dataset | 25-28 |
Working with reference fields | 25-28 |
Displaying reference fields | 25-28 |
Accessing data in a reference field | 25-29 |
I've already printed out Chapter 25 and plan to study it this weekend. The manual is 1,106 pages long. I plan on printing the chapters I need as I go. And yes I did buy paper that's already punched with 3-holes.
I don't care what version of Delphi you are using this manual is relevant and will make your life easier. Download your copy of Borland's Delphi 7 Developer Guide now!
If we could only get EMBT to create an updated version of this Delphi classic!
Semper Fi,
Gunny Mike
end.