www.webdeveloper.com
Results 1 to 2 of 2

Thread: Compare Submitted Control values to DataSet values

  1. #1
    Join Date
    Dec 2006
    Posts
    115

    Compare Submitted Control values to DataSet values

    Hey everyone, I'm going to do my best to explain this easily, even though the code might not be the easiest to follow.

    I have an "Edit" form made out of a TabContainer and TabPanels that I am populating with results from a few different datasets, after a user clicks the "Next" or "Submit" buttons on the form, I iterate through the control set of that TabPanel, and compare them to the original values, if they are different than I store that in an ArrayList and later sieve through it to add records to the Update Database Table.

    I have this functionality working for all the controls inside a TabPanel that are not enclosed in another "Panel" control on the site. The code below is what I am using to jump into the panel inside a TabPanel that contains only checkboxes and textboxes, which are directly related to one another (AKA if a user clicks the checkbox, it enables the textbox for text entry).

    What I am trying to do is loop through these checkbox controls and then compare them to what is already in the database, if the record exists in the database (AKA the checkbox is already checked) than compare the textbox values, and update if the values are different.

    If a new checkbox has been checked (AKA checkbox text value doesn't exist in the database) I would like to store the new value in an arrayList and later iterate through it and store that in a subsequent table, which I have already coded.

    My problem is that when I iterate through the controls, if the control is checked, I store the text value of the new control that has been checked to be compared to the DataSet results.

    What I want to do is basically, if the new checkbox text isn't apparent in the dataset, than store that information as a New addition and later i will purge the arrayList and store all of the info.

    The problem I am having is that once I am in the control loop and access the loop through the dataset, the code will compare the Control to every record in the DataSet result, even if it has already discovered that it is stored in the Database.

    Code:
    For Each innerctrl As Object In c.Controls
                                Dim id As String = innerctrl.ID
                                Dim ctrlValue As String
                                Dim ctrlDesc As String
                                'If the control is a panel, check through that control and store these results as well
                                If TypeOf innerctrl is Panel Then
                                    Dim pnlControls As Control = TryCast(innerctrl, Control)
                                    'use variable pnlControls as a reference to the controls inside this panel
                                    For Each pnlCtrl As Control In pnlControls.Controls
                                        'for each object/control inside this panel control set do the followin
                                        id = pnlCtrl.ID
                                        If TypeOf pnlCtrl Is CheckBox Then
                                            'If control is a checkbox, which most likely is
                                            If DirectCast(pnlCtrl, CheckBox).Checked = True Then
                                                'If the checkbox is checked inside the panel
                                                Dim idText As String = DirectCast(pnlCtrl, CheckBox).Text
                                                Dim txtValue As String
                                                'Set the id equal to the text of the checkbox
                                                Select Case idText
                                                    Case "Harm to Others"
                                                        txtValue = OthersHarmText.Text
                                                    Case "Present Suicide Ideation"
                                                        txtValue = PresSuiText.Text
                                                    Case "History of Suicide Attempts"
                                                        txtValue = SuiHistText.Text
                                                    Case "Self-Harm"
                                                        txtValue = SelfHarmText.Text
                                                    Case "Present Eating Disorder"
                                                        txtValue = EatDisText.Text
                                                    Case "Fire-Setting"
                                                        txtValue = FireStartText.Text
                                                    Case "Access to Firearms"
                                                        txtValue = GunAccessText.Text
                                                End Select
     
                                                'After seeing the control was a checkbox and storing the coinciding textbox value check against values in db. Here are where my issues begin....... 
    Basically if idText = "Harm to Others" and the first Row Value = "Harm to Others" and the txtValue = DBCheckVal (the textbox value is the same now as what is stored in the db) then I want to jump back into the control loop until the next Checkbox that is checked is found, but the DataSet continues to be looped through before jumping back into the Controls.
    
                                                Dim dt As System.Data.DataTable
                                                dt = Session("CopySafety").tables(0)
                                                If idText IsNot Nothing Then
                                                    For i = 0 To dt.Rows.Count - 1
                                                        'while iterating through the original data compare values from DB to values submitted
                                                        Dim DBCheckVal As String = dt.Rows(i).Item("SafChecked").ToString
                                                        Dim DBTextVal As String = dt.Rows(i).Item("SafText").ToString
     
                                                        If idText = DBCheckVal Then
                                                            'if the id stored from submitted control equals ID in the database
                                                            If txtValue <> DBTextVal Then
                                                                'If value in the textbox not equal to value in the database change occurred
                                                                _UpdateItemsList.Add("Changed " & idText & " From " & DBTextVal & " to " & txtValue)
                                                            End If
                                                        Else
                                                            'if id is not equal to the stored id, than it is a new insert and update
                                                            _UpdateItemsList.Add("Added " & idText & " : " & txtValue)
                                                            MsgBox("Added " & idText & " : " & txtValue)
                                                        End If
                                                        DBCheckVal = Nothing
                                                        DBTextVal = Nothing
                                                    Next
                                                End If
                                            End If
                                        End If
                                    Next
    
    
    'After this isn't involved in where I am having the problems, all the basic controls are working great.
                                ElseIf TypeOf innerctrl Is TextBox Then
                                ctrlValue = DirectCast(innerctrl, TextBox).Text
                                ctrlDesc = DirectCast(innerctrl, TextBox).ToolTip
                                ElseIf TypeOf innerctrl Is CheckBox Then
                                ctrlValue = DirectCast(innerctrl, CheckBox).Text
                                ctrlDesc = DirectCast(innerctrl, CheckBox).ToolTip
                                ElseIf TypeOf innerctrl Is DropDownList Then
                                ctrlValue = DirectCast(innerctrl, DropDownList).SelectedValue
                                ctrlDesc = DirectCast(innerctrl, DropDownList).ToolTip
                                ElseIf TypeOf innerctrl Is RadioButtonList Then
                                ctrlValue = DirectCast(innerctrl, RadioButtonList).SelectedValue
                                ctrlDesc = DirectCast(innerctrl, RadioButtonList).ToolTip
                                End If
     
                                If id IsNot Nothing And ctrlValue IsNot Nothing Then
                                    Dim dt As System.Data.DataTable
                                    dt = Session("CopyDS").Tables(0)
                                    For i = 0 To dt.Rows(0).ItemArray.Count - 1
                                        Dim ColName As String = dt.Columns(i).ToString
                                        Dim RowVal As String = dt.Rows(0).Item(i).ToString
                                        'copyData.Text += dt.Columns(i).ToString & " : "
                                        'copyData.Text += dt.Rows(0).Item(i).ToString & "<br/>"
     
                                        If ColName = id Then
                                            If RowVal <> ctrlValue Then
                                                _UpdateItemsList.Add("Changed " & ctrlDesc & " From " & RowVal & " to " & ctrlValue)
                                            End If
                                        End If
                                        ColName = Nothing
                                        RowVal = Nothing
                                    Next
                                End If
                        ctrlValue = Nothing
                        ctrlDesc = Nothing
     
                    Next

  2. #2
    Join Date
    Oct 2009
    Posts
    658
    If I understand you correctly your issue was that it's repeating the comparison?
    Have you looked at Dictionary and it's Contains method?

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles