The new RADvolution Designer 2008v1 Database Edition has been released!
It's fully integrated in Visual Studio 2008.
Also the load performance of a DataGridView has been improved for large sets of data.
To see what's new you can take a look here.
Friday, March 28, 2008
RADvolution Designer for Visual Studio 2008 released!
Thursday, October 25, 2007
RADvolution Designer 2007v3 released
The new Transparent Database Objects are part of the last week released RADvolution Designer 2007v3 Database Edition. Also a new version of the Professional and Standard Edition are released. The Professional (as well as the Database) Edition also have an EncryptionHelper included so you simply can encrypt data.
For more info about all new features see http://www.developguidance.com/download/RADvolutionDesigner2007v3info.pdf
Wednesday, September 19, 2007
Transparent Database Objects
One of the major new features of the RADvolution Designer 2007v3 Database Edition are Transparent Database Objects.
A simple, effective and powerful way of talking to your database using objects. You can easily retrieve data from your database tables and add/change/remove them using objects, rather than talking to the database itself. It look likes Object/Relational mapping (OR mapping). However we use the term transparent, because no explicit object generating (mapping) of database objects takes place. This is not necessary. You just talk to a general DbObject which manages everything for you.
In case you want something different than a straightforward transparent mapping, no problem, just create a new class and inherit from DbObject and tailormade it to your needs.
Why?
Using RADvolution more than 80% of your database application can be developed without any coding at all. For tailormade coding in and around your application it can be handy to use a DbObject to retrieve a value, save a value, get the number of records, etcetera. A DbObject also supports transactions and stored procedures using a DbCommand. And also easy iterations using a collection are supported using a DbObjectCollection. Handy in foreach constructions.
DbObject methods:
- Save
saves the data. Automatically an insert or update query is executed.
(insert if no primary key value is present) - Remove
removes a record - Set
sets a field value (also SomeDbObject["SomeColumnName"] = can be used) - Get
gets a field value (also SomeDbObject["SomeColumnName"] can be used) - Count
returns the number all records or a subset of records - Sum
returns the sum of a field of all records or a subset of records - Avg
returns the average of a field of all records or a subset of records - Min
returns the minimum of a field of all records or a subset of records - Max
returns the maximum of a field of all records or a subset of records
Examples:
insert example
DbObject Customer = new DbObject ("Customer");
Customer["Name"] = "Peter";
Customer["City"] = "Montreal";
Customer.Save();
change example
DbObject Customer = new DbObject ("Customer", 23); // 23 is an ID value
Customer["Address"] = "Main street 12";
Customer.Save();
count, sum, max examples
Customer.Count()
Customer.Sum("Amount")
Customer.Max("Amount", "Name like '%peter%'")
foreach example
DbObjectCollection Images = new DbObjectCollection("Image", "Width < 100");
foreach (DbObject Image in Images)
. MessageBox.Show(Image["Width"].ToString());
Monday, July 9, 2007
RADvolution Designer 2007v2 released
With User management, user rights management and edit in place support (without the need to code) for the RADvolution DataGridView.
See the new features here:http://www.developguidance.com/download/RADvolutionDesigner2007v2info.pdf
Sunday, March 18, 2007
RADvolution Designer 2007v1
The new RADvolution Designer 2007v1 is live!
With tabbed MDI behavior like IE7, a NullDateTimePicker, advanced updatable lookups and more ...
See the new features here:
http://www.developguidance.com/download/RADvolutionDesigner2007v1info.pdf
Friday, March 2, 2007
IsUpdatedByParent
IsUpdatedByParent is a simple boolean property with important effects.
Example:
Suppose we have a Customer DataEntryForm with bound Customer entry controls.
On that DataEntryForm we have a DataGridView for Orders.
We also have an Order DataEntryForm with bound Order entry controls.
From within the Orders DataGridView the end-user can add/change a row and the Order DataEntryForm will be shown.
For the Customer IsUpdatedByParent should be false, because it has no parent on which it depends.
For the Order IsUpdatedByParent can either be true/false. It can be set, because it is dependent on a Customer.
When setting IsUpdatedByParent to true for Order update (add/change/remove) actions:
- it means that all data (Customer and Order) is persisted when an end-user presses the OK button on the parent (in this case the Customer DataEntryForm).
- when you want the end-user to be able to add a new Customer and within that add a new Order IsUpdatedByParent should be true. Because the new Order can only be persisted to the database when there is already a Customer present.
When setting IsUpdatedByParent to false for Order update (add/change/remove) actions:
- it means that the Order data is persisted immediately when an end-users presses the OK button on the Order DataEntryForm.
- when the end-user wants to add a new Order a Customer must already be present. For a new Customer with a new Order the end-user has to add the new Customer, press OK, press the Change button and go to the Order DataGridView to add a new order.
Normally in the example above setting IsUpdatedByParent to true is the most convenient one.
In the real world end-users love this behavior for adding new records.
However pressing OK might be confusing to the user in case of Change actions.
Let's use the example above to explain this:
When an end-user goes into change mode for a Customer and adds/changes/removes an Order record they assume that OK immediately means that this action is saved (persisted into the database at once). At the parent level (the Customer DataEntryForm) they press Cancel intuitively because they haven't changed anything at the Customer level.
In case IsUpdatedByParent is true this means that they lose the Order data actions they just did. So we had to tell end-users explicitly that OK at the parent level was necessary too.
At the moment we are trying to solve this and are testing a new possible solution. For an intuitive solution for the end-user the ideal situation seems to be:
- a setting of IsUpdatedByParent to true when the UpdateMode of the parent DataEntryForm is Add/Copy
- a setting of IsUpdatedByParent to false when the UpdateMode of the parent DataEntryForm is Change
This means the data is persisted to the database at different times. Thinking about this it might be even more confusing, but intuitively most end-users seem to expect this kind of behavior. When useful this 'auto change IsUpdatedByParent' feature will be present in the next RADvolution version.
Demo
To see the current IsUpdatedByParent feature in action you can take a look at demo 4 (Customer Journal, a 1 to many demo) of the Database Edition demos at http://www.developguidance.com/RADvolution_demos.htm
Required entries
RADvolution has a very easy way for setting required entries (like a required TextBox). Just set the required entry property to yes and everything is taking care of.
When the end-user forgets to enter a value a MessageBox is shown (fully customizable and can be skipped as well). The focus is also set directly to the correct control so the end-user can immediately type some text.
Setting the focus correct seems an easy job. But have you thought about TabPages as well? When having a large Form with multiple TabPages containing entry controls setting the focus means also selecting the correct TabPage as well. And of course also when there are TabPages within TabPages, etcetera ... RADvolution automatically takes care of this, so you do not have to do anything at all other then marking a control as being required.
Another way of setting a required entry to 'yes' is by using 'Quick Design': Just rightmouse click on your TextBox control, go to 'Quick Design' and set 'Required entry'to 'yes'.
Example:
What about entry controls which sometimes are required and sometimes are not?
The Control State Designer can take care this in simple situations.
Example: TextBox A only needs to be required when CheckBox B is checked. No programming is necessary at all.
For more complex conditions another way is setting an entry Control to required and add your code into the ValidatedRequiredEntry event of a RADvolution Form. First check if the 'sender' object is equal to the involved entry control. Then code your condition and set e.IsValid to true/false the way you want. When the validation is okay you need to set e.IsValid to true. Set it to false otherwise.
As you can see RADvolution takes care of required entry situations in a very easy way (for simple and advanced situations).
Demo
For a demo take a look at demo 2 (more powerful features) of the Professional Edition demos at http://www.developguidance.com/RADvolution_demos.htm