Using a System.Int32 and null values


Author
Message
Lesscher
Lesscher
StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)
Group: StrataFrame Users
Posts: 9, Visits: 19
Hi all,

I have several fields in my table of type System.Int32 and they are allowed to be null. I want to put a NULL value (not a 0) in the database table when the user empties a textbox (bound to the BO).

I already read the posts about this solution using String.Empty but thats not working for me... Also, I tried to use nullable generics in the datamapper but then, when the user empties the textbox, the new (empty) value isn't saved to the BO (the old value remains)

This can't be that difficult, am I right?

Replies
Greg McGuffey
Greg McGuffey
Strategic Support Team Member (4.8K reputation)
Group: Forum Members
Posts: 2K, Visits: 6.6K
You might try using Integer.MaxValue or Integer.MinValue, as I'm guessing that it is unlikely these would be valid values. You'd just Type that (or System.Int32.MaxValue/MinValue for C# I guess) as the replacement value.
Lesscher
Lesscher
StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)
Group: StrataFrame Users
Posts: 9, Visits: 19
We found a simple solution to our problem. We overrided the standard SF textbox with only the following overrided event:


/// <summary>
/// Overrides the KeyUp event.
/// </summary>
/// <param name="e">A System.Windows.Forms.KeyEventArgs that contains the event data.</param>
protected override void OnKeyUp(KeyEventArgs e)
{
if (this.Text.Length==0)
{
((
BusinessLayer)this.BusinessObject).CurrentRow[this.BindingField] = DBNull.Value;
}

base.OnKeyUp(e);

}

In the datamapper we just say for all of our integer fields that they are nullable generics (no replacement values anymore :w00tSmile

Any remarks about this approach?

Lesscher
Lesscher
StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)StrataFrame Beginner (13 reputation)
Group: StrataFrame Users
Posts: 9, Visits: 19
Unfortunately, the approach above doesn't completely work for us. The underlying value is set to null when the textbox is emptied. This is the behavior we want.



However, we let StrataFrame create a FieldPropertyChanged event for us en we added some logic to this event. This event is not fired because we are not changing the field, but the underlaying value in the datatable/datarow. But we do want to raise the event!



I've tried 2 ways to get this to work:

1. I have tried to raise the FieldProperyChanged event from the OnKeyUp but don't know how to do it (if it is at all possible).

2. I have tried to set the field in another way than through the CurrentRow property, but I can't find a way to do this.



Can anyone help out?
Trent Taylor
Trent Taylor
StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)
Group: StrataFrame Developers
Posts: 6.6K, Visits: 7K
Instead of overriding the KeyUp, inherit the SF textbox and override the ProcessCmdKey method.  This will give you 100% control on the input before the value is actually changed.  You can also override the Text property (or whichever property to which you are binding) and provide additional logic in the Set/Get which will then give you 100% control on the input as well as the values coming and going from the control.  If you replace the logic in these two locations that should be everyplace that you need in order to change the underlying logic to meet your needs.
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...





Similar Topics

Reading This Topic

Login

Explore
Messages
Mentions
Search