On page load i bind data to the combobox control but if the user selects the ShowMoreResults arrow
down button to load more items(even though i display all items) it appends the same amount of items
to the box without clearing the original binded items. even though when the rcboSearch_ItemsRequested is launched it is set to clear the combobox and
indeed stepping through the code it says it has the output on screen is that
the page load data is mixed with the new data.
note if the user starts to type into the combobox the results get cleared.
the problem is only when i append data on page load and select ShowMoreResults
arrow which seems to be present even though there shouldnt be any more results to load,
this triggers rcboSearch_ItemsRequested and adds the same amount of data
as page load to the data already there
<telerik:RadComboBox runat="server" ID="ComboAllContacts" Width="300" ShowMoreResultsBox="true" MaxLength="250" EnableVirtualScrolling="true" EnableLoadOnDemand="true" EmptyMessage="Select Area" MarkFirstMatch="false" AllowCustomText="false" HighlightTemplatedItems="false" EnableItemCaching="false" MinFilterLength="1" CssClass="fx-areaselector" OnItemsRequested="rcboSearch_ItemsRequested" skin="Fluent" EnableEmbeddedSkins="false" DataValueField="CRMAreaID" ClientIDMode="Static" > <ItemTemplate> <div class="searchResult"> <div class="profilePicContainer"> <a title="View <%# DataBinder.Eval(Container, "Attributes['Name']")%>"><%# DataBinder.Eval(Container, "Attributes['Name']")%></a> </div> </div> <div class="separatorTemplate" style="display: none;"> <h2><%#DataBinder.Eval(Container, "Attributes['Name']")%></h2> </div> </ItemTemplate></telerik:RadComboBox><<< Page Load >>>
If Not IsPostBack Then Dim currentRowType = String.Empty Dim ds As DataSet = AreaHelper.GetMyAreas() Dim dt As DataTable = ds.Tables(0) ComboAllContacts.DataValueField = "CRMAreaID" For Each row As DataRow In dt.Rows Dim item As New RadComboBoxItem Dim CRMAreaID As String = row("CRMAreaID").ToString() Dim Name As String = row("Name").ToString() Dim Region As String = row("Region").ToString() If currentRowType <> Region Then ' Add separator Row ComboAllContacts.Items.Add(CreateSeparatorItem(Region)) currentRowType = Region End If item.Value = CRMAreaID.ToString() item.Text = Name item.Attributes.Add("CRMAreaID", CRMAreaID) item.Attributes.Add("Region", Region) item.Attributes.Add("Name", Name) item.Attributes.Add("IsSeparator", False) item.Attributes.Add("onclick", "NavigateAreaSelection(" + CRMAreaID + ")") If Not String.IsNullOrWhiteSpace(item.Text) Then ComboAllContacts.Items.Add(item) End If Next row ComboAllContacts.DataBind() End If<<<ItemsRequested>>>
Protected Sub Protected Sub rcboSearch_ItemsRequested(ByVal sender As Object, ByVal e As RadComboBoxItemsRequestedEventArgs) '' RadComboBox combo = this.FindControl("combo") as RadComboBox; ComboAllContacts.ClearSelection() ComboAllContacts.Items.Clear() ComboAllContacts.Dispose() ComboAllContacts.Text = "" Dim data As DataTable = GetData(e.Text) Dim itemOffset As Integer = e.NumberOfItems Dim endOffset As Integer = data.Rows.Count ''Math.Min(itemOffset + ItemsPerRequest, data.Rows.Count) e.EndOfItems = endOffset = data.Rows.Count 'If data.Rows.Count > 0 Then 'End If Dim currentRowType = String.Empty ''For i As Integer = itemOffset To endOffset - 1 For Each row As DataRow In data.Rows Dim item As New RadComboBoxItem 'Dim CRMAreaID As String = data.Rows(i)("RowID").ToString() 'Dim rowName As String = data.Rows(i)("Name").ToString() 'Dim Region As String = data.Rows(i)("Region").ToString() Dim CRMAreaID As String = row("RowID").ToString() Dim rowName As String = row("Name").ToString() Dim Region As String = row("Region").ToString() If currentRowType <> Region Then ' Add separator Row ComboAllContacts.Items.Add(CreateSeparatorItem(Region)) currentRowType = Region End If item.Value = CRMAreaID item.Text = rowName item.Attributes.Add("CRMAreaID", CRMAreaID) item.Attributes.Add("Region", Region) item.Attributes.Add("Name", rowName) item.Attributes.Add("IsSeparator", False) item.Attributes.Add("onclick", "NavigateAreaSelection(" + CRMAreaID + ")") If Not String.IsNullOrWhiteSpace(item.Text) Then ComboAllContacts.Items.Add(item) End If ''Next row Next If ComboAllContacts.Items.Count > 0 Then ComboAllContacts.DataBind() Else End If e.Message = GetStatusMessage(endOffset, ComboAllContacts.Items.Count)(ByVal sender As Object, ByVal e As RadComboBoxItemsRequestedEventArgs) '' RadComboBox combo = this.FindControl("combo") as RadComboBox; ComboAllContacts.ClearSelection() ComboAllContacts.Items.Clear() ComboAllContacts.Dispose() ComboAllContacts.Text = "" Dim data As DataTable = GetData(e.Text) Dim itemOffset As Integer = e.NumberOfItems Dim endOffset As Integer = data.Rows.Count ''Math.Min(itemOffset + ItemsPerRequest, data.Rows.Count) e.EndOfItems = endOffset = data.Rows.Count 'If data.Rows.Count > 0 Then 'End If Dim currentRowType = String.Empty ''For i As Integer = itemOffset To endOffset - 1 For Each row As DataRow In data.Rows Dim item As New RadComboBoxItem 'Dim CRMAreaID As String = data.Rows(i)("RowID").ToString() 'Dim rowName As String = data.Rows(i)("Name").ToString() 'Dim Region As String = data.Rows(i)("Region").ToString() Dim CRMAreaID As String = row("RowID").ToString() Dim rowName As String = row("Name").ToString() Dim Region As String = row("Region").ToString() If currentRowType <> Region Then ' Add separator Row ComboAllContacts.Items.Add(CreateSeparatorItem(Region)) currentRowType = Region End If item.Value = CRMAreaID item.Text = rowName item.Attributes.Add("CRMAreaID", CRMAreaID) item.Attributes.Add("Region", Region) item.Attributes.Add("Name", rowName) item.Attributes.Add("IsSeparator", False) item.Attributes.Add("onclick", "NavigateAreaSelection(" + CRMAreaID + ")") If Not String.IsNullOrWhiteSpace(item.Text) Then ComboAllContacts.Items.Add(item) End If ''Next row Next If ComboAllContacts.Items.Count > 0 Then ComboAllContacts.DataBind() Else End If e.Message = GetStatusMessage(endOffset, ComboAllContacts.Items.Count)