Stuck on Selected Item Bug?

12 posts, 1 answers
  1. Nick Jones
    Nick Jones avatar
    18 posts
    Member since:
    Jun 2009

    Posted 14 Mar 2011 Link to this post

    HI I'm using the dropdownlist control.  I've populated the control and everything works fine.  However if I select an item, and the form closes, whenever I subsequently open the form the control shows no text initially, and once the drop down arrow has been pressed you can see the current selection is stuck on the previous choice.

    So On Load
      cbComp.DataSource = DataSet.Company
            cbComp.ValueMember = "id"
            cbComp.DisplayMember = "CName"

    Anyone know of a work around this?

  2. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 14 Mar 2011 Link to this post

    Hello Nick,

    When you open your form, you need to supply the selected value or selected index for the drop down. When this has been changed, you can save this value in a manner of your choice so you can set the value again the next time the form is opened.

    I hope this helps, but if you have any questions, please let me know
    Thanks
    Richard
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Nick Jones
    Nick Jones avatar
    18 posts
    Member since:
    Jun 2009

    Posted 14 Mar 2011 Link to this post

    Hi Richard,

    So after the above code I should add cbComp.SelectedIndex = 1 or cbComp.SelectedInex = Nothing
    I've tried this.  I've tried setting the datasource  = nothing before rebinding to the datatable to try and clear out the old selection but nothing seems to work.

    Every subsequent time I open the form the dropdownlist shows the selection I initially made and won't change.
  5. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 14 Mar 2011 Link to this post

    Hello Nick,

    This is an oversimplified exmaple. At some point you need to save the value somewhere when the value or index is changed.

    E.g

    Public Class Form1
      
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.RadDropDownList1.Items.Add("Item 1")
            Me.RadDropDownList1.Items.Add("Item 2")
            Me.RadDropDownList1.Items.Add("Item 3")
            Me.RadDropDownList1.Items.Add("Item 4")
      
            Me.RadDropDownList1.SelectedIndex = My.Settings.SelectedIndex ' just text held in My.Settings (initial value was -1)
        End Sub
      
        Private Sub RadDropDownList1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As Telerik.WinControls.UI.Data.PositionChangedEventArgs) Handles RadDropDownList1.SelectedIndexChanged
            My.Settings.SelectedIndex = Me.RadDropDownList1.SelectedIndex
            My.Settings.Save()
        End Sub
    End Class

    Hope that helps
    Richard
  6. Nick Jones
    Nick Jones avatar
    18 posts
    Member since:
    Jun 2009

    Posted 14 Mar 2011 Link to this post

    Hi Richard,

    I appreciate your time in writing that out for me, but I think you are missing the point of my post.  Getting the selected value is not an issue.  It works the first time round.  Unfortunately the control is playing up when you try the form again.  

    Private Sub MyForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
           
            'Data table is populated......
     
            cbComp.DataSource = DataSet.Company
            cbComp.ValueMember = "id"
            cbComp.DisplayMember = "CName"
        End Sub
     
    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
     
                'Save New Department
                Dim intComp As Integer
                intComp = cbComp.SelectedValue
                Main._AddDepartment(txtDName.Text, intComp)
                Me.Close()
            End If
        End Sub


    Now when the form first loads, MyForm.ShowDialog() you get img1. (Fine, I'll choose the third option "Test Company")
    The next time you add a department, you get img2 (Selected item 1 not there!, no problem but not as expected)
    and if you hit the dropdown, 'img3' you see that item 3 (the item i selected the first time round) is already highlighted and it doesn't matter what I select the control will always pass the selected value of this item.
  7. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 14 Mar 2011 Link to this post

    Hello,

    Yes, I beleive understand your issue. I'm not sure what your Main._AddDepartment is doing, but I am unable to replicate your issue. Here is a sample project. It just assumes that you add a My.Settings setting of SelectedValue as an integer as somewhere to save the value.

    Designer File
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Form1
        Inherits System.Windows.Forms.Form
      
        'Form overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
      
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
      
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.RadDropDownList1 = New Telerik.WinControls.UI.RadDropDownList()
            Me.RadButton1 = New Telerik.WinControls.UI.RadButton()
            CType(Me.RadDropDownList1, System.ComponentModel.ISupportInitialize).BeginInit()
            CType(Me.RadButton1, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'RadDropDownList1
            '
            Me.RadDropDownList1.Location = New System.Drawing.Point(23, 43)
            Me.RadDropDownList1.Name = "RadDropDownList1"
            Me.RadDropDownList1.ShowImageInEditorArea = True
            Me.RadDropDownList1.Size = New System.Drawing.Size(190, 21)
            Me.RadDropDownList1.TabIndex = 0
            Me.RadDropDownList1.Text = "RadDropDownList1"
            '
            'RadButton1
            '
            Me.RadButton1.Location = New System.Drawing.Point(83, 84)
            Me.RadButton1.Name = "RadButton1"
            Me.RadButton1.Size = New System.Drawing.Size(130, 24)
            Me.RadButton1.TabIndex = 1
            Me.RadButton1.Text = "Save"
            '
            'Form1
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(284, 144)
            Me.Controls.Add(Me.RadButton1)
            Me.Controls.Add(Me.RadDropDownList1)
            Me.Name = "Form1"
            Me.Text = "Form1"
            CType(Me.RadDropDownList1, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.RadButton1, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)
            Me.PerformLayout()
      
        End Sub
        Friend WithEvents RadDropDownList1 As Telerik.WinControls.UI.RadDropDownList
        Friend WithEvents RadButton1 As Telerik.WinControls.UI.RadButton
      
    End Class

    Form1.vb
    Public Class Form1
      
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim list As New System.Collections.Generic.List(Of Person)()
            list.Add(New Person(1, "Richard"))
            list.Add(New Person(2, "Bob"))
            list.Add(New Person(3, "Fred"))
            list.Add(New Person(4, "Peter"))
      
            Me.RadDropDownList1.DataSource = list
            Me.RadDropDownList1.DisplayMember = "Name"
            Me.RadDropDownList1.ValueMember = "Id"
            Me.RadDropDownList1.SelectedValue = My.Settings.SelectedValue
      
            Me.RadDropDownList1.SelectedValue = My.Settings.SelectedValue ' just text held in My.Settings (initial value was 1)
        End Sub
      
      
        Private Sub RadButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadButton1.Click
            My.Settings.SelectedValue = CInt(Me.RadDropDownList1.SelectedValue)
            MessageBox.Show("Saved - stop debugging and restart to see changes saved")
        End Sub
    End Class
      
    Public Class Person
        Public Property Id As Integer
        Public Property Name As String
      
        Public Sub New(ByVal id As Integer, ByVal name As String)
            Me.Name = name
            Me.Id = id
        End Sub
    End Class

    hope this helps. If you are still having issues, please could you provide a full sample that replicates your issue and I'll be happy to take a look at it.
    thanks
    Richard
  8. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 14 Mar 2011 Link to this post

    Nick,

    One thing I haven't asked you is what version of the RadControls you are using. Please can you confirm
    Thanks
    Richard
  9. Nick Jones
    Nick Jones avatar
    18 posts
    Member since:
    Jun 2009

    Posted 14 Mar 2011 Link to this post

    Hi Richard,

    I'm using the 2010_3_10_1215.  All that the _AddDepartment is doing is saving to the DB.  However I get the same issue if I just hit the cancel button which just calls me.close().

    I've tried with a new form and get the exact same issue.  This time all I have is:
    Private Sub RadButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadButton2.Click
        Me.Close()
     
    End Sub
     
    Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.CompanyTableAdapter.Fill(Me.Company._Company)
        RadDropDownList1.DataSource = Company._Company
        RadDropDownList1.ValueMember = "id"
        RadDropDownList1.DisplayMember = "CName"
    End Sub


    I also tried this is a normal form and not a radform.  Thoughts?
  10. Nick Jones
    Nick Jones avatar
    18 posts
    Member since:
    Jun 2009

    Posted 14 Mar 2011 Link to this post

    Got it.  Ok to recreate this issue you have to use showdialog().  myForm.show() and the dropdownlist works fine.  myForm.Showdialog() and the form doesn't behave as it should.  Give it a go and see what you get.
  11. Answer
    Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 14 Mar 2011 Link to this post

    Hello Nick,

    No, I'm afraid I cannot replicate this. I have added a new form as the main form, and launched the other form with the drop down list from it. I can save and close the form and show a new form again with the value populated correctly.

    Main.designer.vb
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Main
        Inherits System.Windows.Forms.Form
      
        'Form overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
      
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
      
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.RadButton1 = New Telerik.WinControls.UI.RadButton()
            CType(Me.RadButton1, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'RadButton1
            '
            Me.RadButton1.Location = New System.Drawing.Point(42, 101)
            Me.RadButton1.Name = "RadButton1"
            Me.RadButton1.Size = New System.Drawing.Size(130, 24)
            Me.RadButton1.TabIndex = 0
            Me.RadButton1.Text = "Launch Form1"
            '
            'Main
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(284, 262)
            Me.Controls.Add(Me.RadButton1)
            Me.Name = "Main"
            Me.Text = "Main"
            CType(Me.RadButton1, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)
      
        End Sub
        Friend WithEvents RadButton1 As Telerik.WinControls.UI.RadButton
    End Class

    Main.vb
    Public Class Main
      
        Private Sub RadButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadButton1.Click
            Dim form As New Form1()
            form.ShowDialog()
        End Sub
    End Class


    Form1.designer.vb
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Form1
        Inherits System.Windows.Forms.Form
      
        'Form overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
      
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
      
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.RadDropDownList1 = New Telerik.WinControls.UI.RadDropDownList()
            Me.RadButton1 = New Telerik.WinControls.UI.RadButton()
            CType(Me.RadDropDownList1, System.ComponentModel.ISupportInitialize).BeginInit()
            CType(Me.RadButton1, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'RadDropDownList1
            '
            Me.RadDropDownList1.Location = New System.Drawing.Point(23, 43)
            Me.RadDropDownList1.Name = "RadDropDownList1"
            Me.RadDropDownList1.ShowImageInEditorArea = True
            Me.RadDropDownList1.Size = New System.Drawing.Size(190, 21)
            Me.RadDropDownList1.TabIndex = 0
            Me.RadDropDownList1.Text = "RadDropDownList1"
            '
            'RadButton1
            '
            Me.RadButton1.Location = New System.Drawing.Point(83, 84)
            Me.RadButton1.Name = "RadButton1"
            Me.RadButton1.Size = New System.Drawing.Size(130, 24)
            Me.RadButton1.TabIndex = 1
            Me.RadButton1.Text = "Save and Close"
            '
            'Form1
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(284, 144)
            Me.Controls.Add(Me.RadButton1)
            Me.Controls.Add(Me.RadDropDownList1)
            Me.Name = "Form1"
            Me.Text = "Form1"
            CType(Me.RadDropDownList1, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.RadButton1, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)
            Me.PerformLayout()
      
        End Sub
        Friend WithEvents RadDropDownList1 As Telerik.WinControls.UI.RadDropDownList
        Friend WithEvents RadButton1 As Telerik.WinControls.UI.RadButton
      
    End Class

    Form1.vb
    Public Class Form1
      
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim list As New System.Collections.Generic.List(Of Person)()
            list.Add(New Person(1, "Richard"))
            list.Add(New Person(2, "Bob"))
            list.Add(New Person(3, "Fred"))
            list.Add(New Person(4, "Peter"))
      
            Me.RadDropDownList1.DataSource = list
            Me.RadDropDownList1.DisplayMember = "Name"
            Me.RadDropDownList1.ValueMember = "Id"
            Me.RadDropDownList1.SelectedValue = My.Settings.SelectedValue
      
            Me.RadDropDownList1.SelectedValue = My.Settings.SelectedValue ' just text held in My.Settings (initial value was 1)
        End Sub
      
      
        Private Sub RadButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadButton1.Click
            My.Settings.SelectedValue = CInt(Me.RadDropDownList1.SelectedValue)
            Me.Close()
        End Sub
    End Class
      
    Public Class Person
        Public Property Id As Integer
        Public Property Name As String
      
        Public Sub New(ByVal id As Integer, ByVal name As String)
            Me.Name = name
            Me.Id = id
        End Sub
    End Class

    If you can alter my sample to re-produce this, i'll see if I can also replicate it
    Richard
  12. Nick Jones
    Nick Jones avatar
    18 posts
    Member since:
    Jun 2009

    Posted 14 Mar 2011 Link to this post

    Hi Richard,

    I tried out your code and didn't have an issue.  I added the following to see if it was something to do with the datatable:
    Dim dt As New DataTable
            Dim col1 As New DataColumn
            Dim col2 As New DataColumn
            col1.ColumnName = "Id"
            col2.ColumnName = "Name"
            dt.Columns.Add(col1)
            dt.Columns.Add(col2)
     
            For Each guy In list
                Dim newrow As DataRow = dt.NewRow()
                newrow.Item(0) = guy.Id
                newrow.Item(1) = guy.Name
                dt.Rows.Add(newrow)
            Next
     
            Me.RadDropDownList1.DataSource = dt
            Me.RadDropDownList1.DisplayMember = "Name"
            Me.RadDropDownList1.ValueMember = "Id"
    but that didn't do it either.  The only difference I can see is that you've put,
    Dim form As New Form1()

    I've taken this out, but it still works, however when I have added this to my project and I no longer get the issue.  So problem solved but not sure why I can't recreate.  Maybe it has something to do with the dataadapter.  Anyway, thank you for your help, it has been appreciated.
  13. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 14 Mar 2011 Link to this post

    Hi Nick,

    I'm glad that you have your issue sorted.
    If any of the answers have been helpful, then please remember to mark as answer and if you need anything further then do let me know
    Thanks
    Richard
Back to Top
UI for WinForms is Visual Studio 2017 Ready