Dropdown has so items until after postback

9 posts, 0 answers
  1. J
    J avatar
    103 posts
    Member since:
    Feb 2013

    Posted 21 Mar 2013 Link to this post

    I have a DropDownList (have also tried ComboBox with the same results) that gets populated during page_load if it's not a post back.  The code executes fine and the DropDownListItems are created and appear to be added from the code behind but when the page renders the DropDownList is empty/disabled.  As soon as I do a post back (checkbox click), when it reloads, all of my DropDownLists now actually show the data and can be clicked on.

    I've isolated this down to being caused when I load data into the DropDownList during page_load.  On the post back, the data loading doesn't occur (as expected) and allows the items loaded from the initial page_load to be displayed.

    Any ideas why this happens or what I can do to fix it?  I've searched and searched but haven't found a solution that works.  The ComboBox exhibits the exact same behavior.

    Relevant code:

    DropDownList markup:

    <telerik:RadDropDownList ID="cmbPayment_CardType" runat="server"
        OnSelectedIndexChanged="cmbPayment_CardType_SelectedIndexChanged"
        Width="160px" DropDownHeight="90px" DropDownWidth="160px" />

    page_load from code behind:

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                List<CreditCardListItem> lstCreditCards = null;
     
                //Load the list of accepted credit cards
                cmbPayment_CardType.Items.Clear();
                lstCreditCards = GetCreditCardsList();
     
                if ((lstCreditCards != null) && (lstCreditCards.Count > 0))
                {
                    foreach (CreditCardListItem ccDetails in lstCreditCards)
                        cmbPayment_CardType.Items.Add(new DropDownListItem() { Text = ccDetails.DisplayName, Value = ccDetails.DisplayOrder.ToString() });
                }
     
                lstCreditCards.Clear();
            }
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.Print("Error: " + ex.ToString());
        }
    }
  2. Nencho
    Admin
    Nencho avatar
    1457 posts

    Posted 26 Mar 2013 Link to this post

    Hello Juan,

    Could provide us with the implementation of the GetCreditCardsList() method, which is responsible for the population with data of the RadDropDownList? In addition, I have prepared a sample project for you, based on the provided snippet of code, demonstrating the behavior at my end. Could you give it a try and let me know if I had missed something.

    Note : dll files are removed from the attachment.

    Regards,
    Nencho
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. J
    J avatar
    103 posts
    Member since:
    Feb 2013

    Posted 26 Mar 2013 Link to this post

    Here is the code from GetCreditCardList (it's from a separate DLL that was written in VB.NET):

    ''' <summary>
    ''' Used to provide details about accepted credit cards.
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> Public Class CreditCardListItem
        Public Property DisplayName As String = String.Empty
        Public Property DisplayOrder As Byte = 0
    End Class

    ''' <summary>
    ''' Gets the list of accepted credit cards.
    ''' </summary>
    ''' <returns>A List of CreditCardListItem objects detailing the credit cards that are accepted.</returns>
    ''' <remarks></remarks>
    Public Shared Function GetCreditCardsList() As List(Of CreditCardListItem)
        Dim ret_lstCards As List(Of CreditCardListItem) = Nothing
     
        Dim cmdQuery As SqlCommand = Nothing
        Dim drData As SqlDataReader = Nothing
        Dim dbConn As SqlConnection = Nothing
     
        Try
            dbConn = New SqlConnection(ConfigurationManager.ConnectionStrings("MasterDB").ConnectionString)
            cmdQuery = New SqlCommand("Select * From CreditCardTYpes Order By TypeID, CardType", dbConn)
     
            dbConn.Open()
            drData = cmdQuery.ExecuteReader()
     
            If (drData.HasRows) Then
                ret_lstCards = New List(Of CreditCardListItem)
     
                While (drData.Read())
                    ret_lstCards.Add(New CreditCardListItem() With {.DisplayName = drData("CardType").ToString(), .DisplayOrder = drData("TypeID").ToString()})
                End While
            End If
     
        Catch ex As Exception
            Debug.Print("ERROR: " & ex.ToString())
     
        Finally
            'Clean up
            If (drData IsNot Nothing) Then
                drData.Close()
                drData = Nothing
            End If
     
            If (cmdQuery IsNot Nothing) Then
                cmdQuery.Cancel()
                cmdQuery.Dispose()
                cmdQuery = Nothing
            End If
     
            If (dbConn IsNot Nothing) Then
                If (dbConn.State <> ConnectionState.Closed) Then
                    dbConn.Close()
                End If
     
                dbConn.Dispose()
                dbConn = Nothing
            End If
     
        End Try
     
        Return ret_lstCards
    End Function


    I'll try to work up an example project for this soon.  I know I owe you guys a couple example projects right now, but I've been super booked lately.  Trying to get to it as soon as I have a chance.  Some of the issues I've had to move on from and just replace with ASP.NET controls instead while we figure them out.
  5. Nencho
    Admin
    Nencho avatar
    1457 posts

    Posted 29 Mar 2013 Link to this post

    Hello Juan,

    The functionality implemented in the method looks correct. Please make sure that ret_lstCards List is correctly populated with data and there are any exceptions, which might be caught by the Try Catch block. Did you have the chance to test the provided sample?


    Kind regards,
    Nencho
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
  6. J
    J avatar
    103 posts
    Member since:
    Feb 2013

    Posted 29 Mar 2013 Link to this post

    It is correctly populated and no exceptions are raised.  I 'fixed' the issue by just replacing it with a normal ASP.NET Dropdown List with no other changes.

    I should have time today to get you guys the sample project to demonstrate what is happening.

    And no, I hadn't had a chance to get back to this yet and try your sample.
  7. J
    J avatar
    103 posts
    Member since:
    Feb 2013

    Posted 10 Apr 2013 Link to this post

    Not sure how, but this issue is fixed.  I went to replace my normal ASP.NET drop down lists with the Telerik ones and this time around they worked properly.  Not sure why, but it works so ... thanks.
  8. John
    John avatar
    12 posts
    Member since:
    Feb 2008

    Posted 25 Feb 2014 in reply to J Link to this post

    I have the exact same issue with Telerik context menus and Combo boxes. A postback is required before they display - even if the menu items or combobox items are explicitly defined in markup. Have not found a solution. I use Ironspeed Designer to create my apps and then customise them with Telerik controls.
  9. Nencho
    Admin
    Nencho avatar
    1457 posts

    Posted 28 Feb 2014 Link to this post

    Hello John,

    Would you elaborate a bit more on the issue you are facing and which version of our controls you are currently using? In addition, please provide us with the implementation of the RadDropDownList that you use. Lastly, it would be best, if you could submit a support ticket, along with a runnable sample attached, which demonstrates the problem.

    Regards,
    Nencho
    Telerik
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the UI for ASP.NET AJAX, subscribe to the blog feed now.
  10. John
    John avatar
    12 posts
    Member since:
    Feb 2008

    Posted 02 Mar 2014 Link to this post

    Thanks Nencho. I tried to make a small bare-bones Ironspeed application that demonstrated the problem. In doing so, I worked out how to get around it. I had a radWindow and radContextMenu in the page and a radComboBox repeated in an HTML table on the same page.

    By making the table a server-side table control and removing the radWindow altogether, the combobox and menu work perfectly without needing the first postback to populate.

    There is a lot of code-behind and markup generated automatically by Ironspeed Designer. Sorry I don't have time to delve too deeply to work out what the interaction was that caused the problem. 
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017