This is a migrated thread and some comments may be shown as answers.

get_items().get_count() always return total bound items

4 Answers 309 Views
ComboBox
This is a migrated thread and some comments may be shown as answers.
Duncan
Top achievements
Rank 2
Duncan asked on 17 Feb 2012, 01:19 AM
I need to get the number of items being filtered in the drop down? Is this possible?

Duncan

4 Answers, 1 is accepted

Sort by
0
Kalina
Telerik team
answered on 17 Feb 2012, 04:01 PM
Hi Duncan,

In general get_items().get_count() should return the number of RadComboBox items.

Maybe with some more details about your scenario we will be able to help you?
Can you provide us some working code that illustrates your implementation?

Regards,
Kalina
the Telerik team
Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
0
Duncan
Top achievements
Rank 2
answered on 17 Feb 2012, 04:59 PM
I have a script that hides the prop down if no items are found... If there are items, the script is supposed to resize the height of the dropdown. However... Even if there are only 2 items being shown, sender.get_items().get_count() = 78, whihc is the number of total item that are originally bound to the control.

Here is my implementation:

<telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">
    <script type="text/javascript">
        function OnClientItemsRequestedHandler(sender, eventArgs) {
            if (sender.get_visibleItems().length == 0) {
                sender.hideDropDown()
            }
            else {
                //set the max allowed height of the combo 
                var max_allowed_height = 200;
                //this is the single item's height 
                var single_item_height = 22;
 
                var calculatedHeight = sender.get_items().get_count() * single_item_height;
 
                var dropDownDiv = sender.get_dropDownElement();
 
                if (calculatedHeight > max_allowed_height) {
                    setTimeout(
        function () {
            dropDownDiv.firstChild.style.height = max_allowed_height + "px";
        }, 20
    );
                }
                else {
                    setTimeout(
        function () {
            dropDownDiv.firstChild.style.height = calculatedHeight + "px";
        }, 20
    );
                }
            }
        }   
    </script>
</telerik:RadScriptBlock>

This is my control, LoadOnDemand is set to true:

<telerik:RadComboBox ID="cboTags" runat="server" CssClass="combo" AutoPostBack="true"
    Width="394px" EnableEmbeddedBaseStylesheet="False" EnableEmbeddedSkins="False"
    EnableTheming="False" MarkFirstMatch="True" ShowMoreResultsBox="False" ShowToggleImage="False"
    EmptyMessage="Tag Name" DropDownCssClass="combo-input-drop" Filter="Contains"
    DropDownWidth="410" EnableAutomaticLoadOnDemand="False" EnableLoadOnDemand="True"
    OffsetX="-38" OffsetY="-3" ShowDropDownOnTextboxClick="False" DataTextField="Tag"
    DataValueField="TagId" EnableTextSelection="False" NoWrap="True" AllowCustomText="True"
    Height="208" OnItemsRequested="cboTags_ItemsRequested" ValidationGroup="Form"
    OnClientItemsRequesting="OnClientItemsRequestedHandler"
    OnClientItemsRequested="OnClientItemsRequestedHandler"
    OnClientDropDownOpening="OnClientItemsRequestedHandler" ShowWhileLoading="False">
    <ExpandAnimation Type="none" />
    <CollapseAnimation Type="none" />
</telerik:RadComboBox>

And this is where it is bound in the code behind:

public void Tags_DataBind()
{
    TagsBL tagsbl = new TagsBL(conn);
 
    cboTags.DataSource = tagsbl.GetAllTags(contextuser);
    cboTags.DataBind();
    cboTags.SortItems();
}
 
protected void cboTags_ItemsRequested(object sender, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs e)
{
    Tags_DataBind();
}

tagsbl.GetAllTags(contextuser) returns a list of tags... 78 in total. However, as the user is typing, this gets filtered down.

Duncan
0
Accepted
Kalina
Telerik team
answered on 23 Feb 2012, 11:29 AM
Hello Duncan,

Please excuse me for the delay.

As far as I understand you want to re \size the RadComboBox dropdown after the items have been requested.
I am afraid that you cannot make this with custom logic, but you can remove the Height property of the control and set the MaxHeight property instead.
Based on this online demo (the "Product" combo) I prepared a small sample for you:
<telerik:RadComboBox ID="RadComboBoxProduct" runat="server"
    Width="200px" MaxHeight="300px"
    DropDownWidth="298px" EmptyMessage="Choose a Product"
    HighlightTemplatedItems="true"
    EnableLoadOnDemand="true"
    Filter="StartsWith"
    OnItemsRequested="RadComboBoxProduct_ItemsRequested">
</telerik:RadComboBox>
protected void RadComboBoxProduct_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)
    {
        string sqlSelectCommand = "SELECT [ProductID], [ProductName], [UnitPrice], [UnitsInStock] from [Products] WHERE [ProductName] LIKE @text + '%' ORDER BY [ProductName]";
 
        SqlDataAdapter adapter = new SqlDataAdapter(sqlSelectCommand,
            ConfigurationManager.ConnectionStrings["NorthwindConnectionString2"].ConnectionString);
        adapter.SelectCommand.Parameters.AddWithValue("@text", e.Text);
        DataTable dataTable = new DataTable();
        adapter.Fill(dataTable);
 
        foreach (DataRow dataRow in dataTable.Rows)
        {
            RadComboBoxItem item = new RadComboBoxItem();
 
            item.Text = (string)dataRow["ProductName"];
            item.Value = dataRow["ProductID"].ToString();
 
            RadComboBoxProduct.Items.Add(item);
 
            item.DataBind();
        }
    }

Please find the full sample attached.

Regards,
Kalina
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.
0
Duncan
Top achievements
Rank 2
answered on 23 Feb 2012, 09:31 PM
Awesome. I did not know that property existed... That's close enough... Thanks
Tags
ComboBox
Asked by
Duncan
Top achievements
Rank 2
Answers by
Kalina
Telerik team
Duncan
Top achievements
Rank 2
Share this question
or