Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Languages / VB.NET / October 2007

Tip: Looking for answers? Try searching our database.

Catch changes made by user

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
vovan - 05 Oct 2007 21:57 GMT
I have set of controls (Textboxes, checkboxes etc) along with the Grid on
Windows Form.
I use BindingSource to populate both Grid and the set of Controls. User
selects the record in the grid and all controls are populated with data from
the selected row.
The grid is going to be read only. Textboxes, checkboxes are going to be
read/write.
What event and how do I need to use to catch any change in any of the
textboxes? I tried to use TextBox_TextChanged, but it fires during initial
population and every time I change the active row in the grid. How can I
distinguish between changes made by the program and changes made by the
user?
I need to set the flag blnIsThereAnyChange = True when user changes the
contents of the textbox, and use the value of that flag in some procedures.

Thank you
vovan
Kerry Moorman - 05 Oct 2007 23:22 GMT
vovan,

Since you are using bound controls, any changes in the textboxes will be
reflected in the underlying datatable.

So you could use datatable.HasChanges to see if any changes have been made.

Kerry Moorman

> I have set of controls (Textboxes, checkboxes etc) along with the Grid on
> Windows Form.
[quoted text clipped - 13 lines]
> Thank you
> vovan
vovan - 06 Oct 2007 00:10 GMT
Thank you Kerry
HasChanges is a method of Dataset object. When I make any change in the
bound controls and do not move to another record, probably changes are not
moved yet from controls to the Dataset and when I'm calling HasChanges it
returns FALSE.
First of all it seem inconvenient for me to move to another row to check if
there were changes. The second issue is how do I check if changes occured, I
mean what event of what object I need to use to find it out.
My plans were:
I'm staying on the particular row in the grid, if I make any change in any
bound control, I set somehow the flag responsible for changes to true, at
the same time I change the visible properties of buttons "AddNew", "Update",
"Cancel", Delete". If user is trying to move to another row I display a
message box asking if she wants to save changes. Changes are saved for each
row separately.
I was going to use TextChanged event for textboxes to reset the flag, but as
I said before it fires not only from user actions.

vovan

> vovan,
>
[quoted text clipped - 26 lines]
>> Thank you
>> vovan
Kerry Moorman - 06 Oct 2007 00:33 GMT
vovan,

Perhaps you could use the datatable's RowChanging, RowChanged,
ColumnChanging or ColumnChanged events.

Personally, I would avoid trying to use textbox events to determine if the
data is changing. I have rarely seen that work out well.

Kerry Moorman

> Thank you Kerry
> HasChanges is a method of Dataset object. When I make any change in the
[quoted text clipped - 46 lines]
> >> Thank you
> >> vovan
Dennis - 06 Oct 2007 01:04 GMT
I agree that detecting changes with text box events rarely works out as the
programmer intends.  What I would suggest is that you have a class containing
all the record data then when the row changes, check in the row changed event
if the text boxes contain the same info...if not, update the previous record
then reset the class properties to the new row data.

Hope you can get some ideas from this.
Signature

Dennis in Houston

> Thank you Kerry
> HasChanges is a method of Dataset object. When I make any change in the
[quoted text clipped - 46 lines]
> >> Thank you
> >> vovan
Charlie - 05 Oct 2007 23:51 GMT
Use the Enter and Leave events of the TextBoxes and CheckBoxes to Add and
Remove the Change handlers for those controls.

Here is an example for a checkbox--

   Private Sub CheckBox1_CheckedEnter(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles CheckBox1.Enter
       AddHandler CheckBox1.CheckStateChanged, _
           AddressOf CheckBox1_CheckedChanged
   End Sub

   Private Sub CheckBox1_Leave(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles CheckBox1.Leave
       RemoveHandler CheckBox1.CheckStateChanged, _
           AddressOf CheckBox1_CheckedChanged
   End Sub

   Private Sub CheckBox1_CheckedChanged( _
       ByVal sender As System.Object, _
               ByVal e As System.EventArgs)
       'add code here
   End Sub

When the user changes the check of a checkbox, the enter event will fire
first and add the checkchange event hander.  Then the checkstatechanged event
will fire and read the new value for the checkbox.

If you have a lot of textbox and checkbox controls, you could, (from within
the form_load event), consolidate your code by pointing all of the Enter
addhandler statements for one control type to a single code block, and
likewise for Leave.  If you do that, of course, the "sender" object is the
control that fired Enter or Leave, and you should use cast the objectly
appropriately...
directcast(sender, Textbox)

When you want to detect whether a change has been made for any control, you
have to come up with a monitoring system that captures original values after
the controls are populated.  If the user makes changes, comare the current
value to the original value, and set the flag for the control accordingly.  
If the user re-sets to the original value, your change flag should be reset
to false for that entry.  This also gives you an opportunity to have a Cancel
Changes button that restores all changes to the current record to their
current unchanged values.  You may be able to use the grid row as your
original values reference, but sometimes, by design, a grid will not show all
values that are shown in the controls on the form.  

> I have set of controls (Textboxes, checkboxes etc) along with the Grid on
> Windows Form.
[quoted text clipped - 13 lines]
> Thank you
> vovan

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.