SelectedIndexChanged not firing from suggested dropdownlist

5 posts, 1 answers
  1. Karl Golling
    Karl Golling avatar
    226 posts
    Member since:
    Jun 2005

    Posted 25 Sep 2012 Link to this post

    Hi,

    I have a commandbardropdownlist control with AutoCompleteMode set to SuggestAppend. When data is entered, typed into the textbox, the suggested dropdown list works correct. Selecting an item of this suggested list does not seem to fire the SeletedIndexChanged event. Could you check out this issue or what could I have set incorrect?

    Thanks,

    Karl
  2. Stefan
    Admin
    Stefan avatar
    2891 posts

    Posted 28 Sep 2012 Link to this post

    Hi Karl,

    Thank you for writing.

    I have tested the described behavior and on my end the event si fired correctly in all three cases - typing the item name and pressing enter, selecting it with mouse from the autocomplete popup and moving through the items in the autocomplete popup with arrow keys.

    Attached you can find a sample video.

    Could you please provide me with a sample where the issue can be reproduced, so we can investigate it and provide you with adequate support.

    I am looking forward to your reply.
     
    Greetings,
    Stefan
    the Telerik team
    RadControls for WinForms Q2'12 release is now live! Check out what's new or download a free trial >>
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Karl Golling
    Karl Golling avatar
    226 posts
    Member since:
    Jun 2005

    Posted 29 Sep 2012 Link to this post

    Dear Stephan,
    Thank you for the movie - and I can see it works at your end. 

    I'm going to send you some relevant code and lets see if we can track this down.
    //
    // commandBarDropDownList1
    //
    this.commandBarDropDownList1.AccessibleDescription = "commandBarDropDownList1";
    this.commandBarDropDownList1.AccessibleName = "commandBarDropDownList1";
    this.commandBarDropDownList1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
    this.commandBarDropDownList1.DefaultItemsCountInDropDown = 35;
    this.commandBarDropDownList1.DisplayName = "commandBarDropDownList1";
    this.commandBarDropDownList1.DropDownAnimationEnabled = true;
    this.commandBarDropDownList1.MaxDropDownItems = 0;
    this.commandBarDropDownList1.MinSize = new System.Drawing.Size(156, 22);
    this.commandBarDropDownList1.Name = "commandBarDropDownList1";
    this.commandBarDropDownList1.Text = "";
    this.commandBarDropDownList1.Visibility = Telerik.WinControls.ElementVisibility.Visible;
    this.commandBarDropDownList1.SelectedIndexChanged += new Telerik.WinControls.UI.Data.PositionChangedEventHandler(this.commandBarDropDownList1_SelectedIndexChanged);
    this.commandBarDropDownList1.ItemDataBound += new Telerik.WinControls.UI.ListItemDataBoundEventHandler(this.commandBarDropDownList1_ItemDataBound);

    this is where i fill it

    private void RadForm6ListView_Load(object sender, EventArgs e)
    {
        // this.commandBarDropDownList1.ItemDataBound -= new Telerik.WinControls.UI.ListItemDataBoundEventHandler(this.commandBarDropDownList1_ItemDataBound);
        this.Text = "Liste";
        this.FillTableAndConnect2ListView();
        this.radListView1.AllowEdit = false;
        this.radListView1.AllowRemove = false;
        this.radListView1.ViewType = ListViewType.IconsView;
        string thisSQL = " SELECT Count(T_Tag.GlossarID) AS Anzahl, T_Glossar.DE as Begriff, T_Glossar.GlossarID as ID ";
        thisSQL += " FROM T_Glossar LEFT JOIN T_Tag ON T_Glossar.GlossarID = T_Tag.GlossarID ";
        thisSQL += " GROUP BY T_Glossar.DE, T_Glossar.GlossarID ";
        thisSQL += " HAVING (((Count(T_Tag.GlossarID))>0)) ";
        thisSQL += " ORDER BY T_Glossar.DE;";
        FillDropDown(thisSQL, this.commandBarDropDownList1);

    and here if it is selected
    private void commandBarDropDownList1_ItemDataBound(object sender, ListItemDataBoundEventArgs args)
    {
        //  DataRow newrow = (DataRow)args.NewItem.DataBoundItem;
        DataRowView view = (DataRowView)args.NewItem.DataBoundItem;
        args.NewItem.Text = view["Begriff"].ToString().Trim() + "  " + view["Anzahl"];
    }
     
    private void commandBarDropDownList1_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
    {
        if (commandBarDropDownList1.SelectedValue == null) return;
        this.radListView1.FilterDescriptors.Clear();
        string smyGlossarID = commandBarDropDownList1.SelectedValue.ToString();
        if (smyGlossarID == "System.Data.DataRowView") return;
    The SelectedIndexChanged is never reached if I type text into the textbox.

    I hope this helps.

    Karl
  5. Answer
    Stefan
    Admin
    Stefan avatar
    2891 posts

    Posted 01 Oct 2012 Link to this post

    Hi Karl,

    The observed behavior is caused by the fact that you are changing the item text in the ItemDataBound event. When you attempt to change the selected item it searches for the item text and since you have changed it, the control is not able to find the corresponding item to select it. This is the default behavior and it cannot be changed. 

    What I can offer is to change the item text in the VisualItemFormatting event instead of the ItemDataBound event, however, this will only change the item appearace in the main drop down:
    void commandBarDropDownList1_VisualItemFormatting(object sender, Telerik.WinControls.UI.VisualItemFormattingEventArgs args)
    {
        DataRowView view = (DataRowView)args.VisualItem.Data.DataBoundItem;
        args.VisualItem.Text = view["Name"].ToString().Trim() + "  " + view["Id"];
    }

    Alternatively, you can use unbound mode and populate the control with items with whatever text you want.

    I hope this helps.
     
    Kind regards,
    Stefan
    the Telerik team
    RadControls for WinForms Q2'12 release is now live! Check out what's new or download a free trial >>
  6. Karl Golling
    Karl Golling avatar
    226 posts
    Member since:
    Jun 2005

    Posted 01 Oct 2012 Link to this post

    Thank you Stephan!
    It works perfectly!
    Karl
Back to Top
UI for WinForms is Visual Studio 2017 Ready