Inconsistent results

7 posts, 0 answers
  1. Joshua
    Joshua avatar
    4 posts
    Member since:
    Dec 2008

    Posted 03 May 2010 Link to this post

    Hello,
    I have two list boxes (radFullList and radList) which are linked together for AllowTransfer. Not that it matters but the first listbox is a list of employee names, the value is their employee number. The second listbox is for holding the employee's supervisors so when you move an items from radFullList to radList it maintains the same format, employee name and employee number in the value.

    EmployeeEditView.ascx
    <telerik:RadListBox ID="radFullList" runat="server" AllowTransfer="True"  
        AllowTransferOnDoubleClick="true" EnableDragAndDrop="true" TransferToID="radList"  
        DataKeyField="GUID" DataSortField="EmployeeName" DataSourceID="LinqDS4"  
        DataTextField="EmployeeName" DataValueField="EmployeeNumber" Height="200px"  
        Width="200px"
        <ButtonSettings ReorderButtons="Common"></ButtonSettings> 
    </telerik:RadListBox> 
    <telerik:radlistbox ID="radList" runat="server" Height="200px" Width="200px"  
        AllowReorder="true" AllowDelete="true" /> 
    <asp:LinqDataSource ID="LinqDS4" runat="server"  
        ContextTypeName="Modules.EmployeeManagement.EmployeeManagementDataContext"  
        TableName="tblEmployees" OrderBy="EmployeeName" > 
    </asp:LinqDataSource> 

    I have this wired up to a Save button in my Sitefinity Module. 

    EmployeeEditView.ascx.vb
    Dim sb As New StringBuilder() 
    Dim db = New Modules.EmployeeManagement.EmployeeManagementDataContext 
    Dim employee = (From t In db.tblEmployees Where t.GUID = Me.DataItemId Select t).Single 
    employee.EmployeeNametxtName.Text 
    ... 
    employee.UserGroup = radUserGroup.SelectedValue 
    For Each item As RadListBoxItem In radList.Items 
        sb.Append(item.Value.ToString & "|") 
    Next 
    employee.SupervisorNumber = Left(sb.ToString, 59) 
    db.SubmitChanges() 
    Response.Redirect(CreateHostViewCommand("EmployeeEditView", DataItemId.ToString, Nothing)) 

    So as you can see all I am doing is a simple write from the form.

    Scenario: This code works perfectly if the second listbox (radList) is empty. You add 1 or 2 employees to the second list box, hit save and the results written to the database are accurate.

    If you go back in to this employee's account, you will see everything is correct. Instead of exiting, if you simply hit Save again all the entries in the second listbox, radList, are duplicated. Both times the same code is used since I am "Updating" the employee both times.

    As a test to get screens for this post I edited an employee who has no supervisors. Which you can see in screenshot "001.png". Screenshot "002.png" is after adding two accounts as supervisors. The screenshot is taken after Save is clicked which means not only did it save to the database correctly, but it was loaded into the listbox correctly as well. Now in screenshot "003.png" is after clicking the Save button once more without performing any work with the listboxes. As you can see the two entries are repeated.

    As far as I can tell from looking up documentation associated with RadListBox I am using the correct code to cycle through items. "For Each item As RadListBoxItem In radList.Items" Any help you can offer would be greatly appreciated.

  2. Genady Sergeev
    Admin
    Genady Sergeev avatar
    1550 posts
    Member since:
    Sep 2012

    Posted 05 May 2010 Link to this post

    Hi Joshua,

    This is interesting behavior. Do you use AJAX? Please make sure that the destination RadListBox is correctly updated by the AJAX call.  Also, where does the Response.Redirect statement redirects to, what happens if you comment it out? Further, which is the version of the controls that you use?

    Sincerely yours,
    Genady Sergeev
    the Telerik team


    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.

  3. DevCraft Release
  4. Joshua
    Joshua avatar
    4 posts
    Member since:
    Dec 2008

    Posted 11 May 2010 Link to this post

    No I am not using AJAX. I simply process the contents of the second ListBox onSubmit.


    The Response.Redirect redirects to a View in a SiteFinity Module. Technically all it does is refresh the current page since this is the same View. By redirecting to the same View and passing in the GUID of the current record I am verifying that the changes we submitted did in face write out. This also gives the user the ability to update something else at the same time, or cancel and go back to the grid.

    I have commented out the Redirect with the same results.

  5. Genady Sergeev
    Admin
    Genady Sergeev avatar
    1550 posts
    Member since:
    Sep 2012

    Posted 14 May 2010 Link to this post

    Hi Joshua,

    This is interesting, can you try the following, after hitting save for the first time check the client state of the destination RadListBoxItem. This can be achieved with a tool like firebug. Select on the RadListBox body with the select pointer and check the client state. Please refer to the sceenshots attached for details.

    Further, do you have any codebehind lines that rebind the destination RadListBox? Or any lines at all connected with DataBinding the RadListBoxes?

    Best wishes,
    Genady Sergeev
    the Telerik team


    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.

  6. Joshua
    Joshua avatar
    4 posts
    Member since:
    Dec 2008

    Posted 20 May 2010 Link to this post

    I believe I have what you are asking for with Firebug and it appears I am doing something wrong as the you will see in the screenshots.


    I do have code that rebind the listbox. The data is stored in a text field like so "12345|23456|34567|67890" so I have a process which splits these into an array and then loop through the array to bind to the listbox. Shown below:

                Try 
                    Dim strSupervisors As String = employee.SupervisorNumber 
                    Dim arrSupervisors As Array = Split(strSupervisors, "|"
                    PopulateItems(radList, arrSupervisors) 
                Catch ex As Exception 
                    DebugInfo("radList: " & ex.Message) 
                End Try 

        Private Shared Sub PopulateItems(ByVal listBox As RadListBox, ByVal array As Array) 
            For x As Integer = 0 To UBound(array) - 1 
                If Len(array(x)) > 5 Then 
                    Dim item As New RadListBoxItem(GetUsernameFromEmployeeNumber(array(x)), array(x)) 
                    listBox.Items.Add(item) 
                End If 
            Next 
        End Sub 

        Private Shared Function GetUsernameFromEmployeeNumber(ByVal strEmployeeNumber As StringAs String 
            Dim strReturn As String = "" 
            Try 
                Dim db = New Modules.EmployeeManagement.EmployeeManagementDataContext 
                Dim employee = (From t In db.tblAuthors Where t.EmployeeNumber = strEmployeeNumber Select t).Single 
                strReturn = employee.Username 
            Catch ex As Exception 
                strReturn = ex.Message 
            End Try 
            Return strReturn 
        End Function 

  7. Genady Sergeev
    Admin
    Genady Sergeev avatar
    1550 posts
    Member since:
    Sep 2012

    Posted 25 May 2010 Link to this post

    Hi Joshua,

    The screenshots looks correct. This is the way the client state should look before and after hitting save. I.e. it should have values in the log entry before save and empty log after that. It seems that the problem comes from the way the listboxes are rebound. There is no need to add the items manually after they were first added. RadListBox will "remember" that there are items transferred. I suggest that you revise your server-side code and more specifically the PopulateItems method. You shouldn't invoke it on Save click. Where do you call that method and when?

    Kind regards,
    Genady Sergeev
    the Telerik team


    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.

  8. Genady Sergeev
    Admin
    Genady Sergeev avatar
    1550 posts
    Member since:
    Sep 2012

    Posted 25 May 2010 Link to this post

    Hi Joshua,

    The screenshots looks correct. This is the way the client state should look before and after hitting save. I.e. it should have values in the log entry before save and empty log after that. It seems that the problem comes from the way the listboxes are rebound. There is no need to add the items manually after they were first added. RadListBox will "remember" that there are items transferred. I suggest that you revise your server-side code and more specifically the PopulateItems method. You shouldn't invoke it on Save click. Where and when do you call that method?

    Kind regards,
    Genady Sergeev
    the Telerik team


    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.

Back to Top
DevCraft Release