0

I want to bind data in telerik grid dynamically. Initially I used below code.

protected void radGridItemList_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            var gridItemList = sender as RadGrid;
            var repoItemMaster = CreateIItemMasterRepository();
            var ItemList = repoItemMaster.GetAll();
            gridItemList.DataSource = ItemList;
}

Now I want to reload gridItemList with filtered ItemNumbers (E.g select ItemNumber from ItemMaster where ItemNumber LIKE 'a%') and bind new data source to grid again.

I did something like this but It does not work.

private void LoadItemListByItemNumber(string ItemNumber)
        {
            var gridItemList = radcmbItemNumber.Items[0].FindControl("radGridItemList") as RadGrid;
            string whereCondition = "a.ItemNumber LIKE '"+ ItemNumber + "%'";

            var repoItemMaster = CreateIItemMasterRepository();        
            List<ItemMaster> itemList = repoItemMaster.FindbyItemNumber(ItemNumber, whereCondition);
            gridItemList.DataSource = itemList;
        }       

Any suggestions?

Lakshan
  • 15
  • 1
  • 5

2 Answers2

0

You can use the built in RadGrid functionality to filter a DataSource consisting of custom objects when using Advanced Data Binding(RadGrid1_OnNeedDataSource()).

To do so from within the RadGrid just enable filtering by setting AllowFilteringByColumn="True" and the RadGrid will automatically filter your DataSource.

You can also do this externally by setting the current Filter Expression and calling rebind() on the RadGrid.

ASPX:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:Button ID="Button1" runat="server" Text="Filter by 1" OnClick="Button1_Click" />
<telerik:RadGrid ID="RadGrid1" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource" AllowFilteringByColumn="True" CellSpacing="-1" GridLines="Both" EnableLinqExpressions="false" AllowPaging="True"></telerik:RadGrid>

C#:

 // <summary>
// Demo cusotm object
// </summary>
public class MyObject
{
    public int ItemNumber { get; set; }
    public string ItemName { get; set; }
}

protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    //  Bind RadGrid         
    RadGrid1.DataSource = this.GetData();
}

// <summary>
// Returns a Demo custom object DataSource
// </summary>
// <returns></returns>
private List<MyObject> GetData()
{
    List<MyObject> data = new List<MyObject>();
    for (int i = 0; (i <= 100); i++)
    {
        var item = new MyObject();
        item.ItemNumber = i;
        item.ItemName = ("Item # " + i);
        data.Add(item);
    }
    return data;
}

protected void Button1_Click(object sender, EventArgs e)
{
    RadGrid1.MasterTableView.FilterExpression = "([ItemName] LIKE \'%1%\')";
    RadGrid1.Rebind();
}

Some links to look at:

Advanced DataBinding

Advanced Data Binding Tips

Manual Filtering

mike100111
  • 920
  • 8
  • 16
  • Thanks for your help Mike. it works partially. In my grid, I have enabled paging . When I type some text in combo , search result can be seen when I go to second page of the grid and search result is correct.The first page of the grid is not refreshed – Lakshan Dec 07 '17 at 10:40
  • My pleasure. I don't quite understand your description of the issue you are facing. Also, what do you mean by combo? I have updated my answer to include paging. Everything seems to be working. Perhaps you should post your markup and code, otherwise there can be many reasons why its not working in your particular scenario. – mike100111 Dec 07 '17 at 17:41
  • Ok Here we go. I try give you details on my .aspx and .cs page. – Lakshan Dec 08 '17 at 10:02
0

.aspx

<div class="col-lg-8 qb-col">
                                                    <telerik:RadComboBox ID="radcmbItemNumber" runat="server"
                                                        MarkFirstMatch="True" 
                                                        AllowCustomText="true"
                                                        OnClientDropDownOpening="radcmbItemNumberOnClientDropDownOpening"                                                      
                                                        OnClientKeyPressing="radcmbItemNumberOnKeyPress"                                                                                                                
                                                        OnTextChanged="radcmbItemNumber_TextChanged"                                                      
                                                        Width="95%" 
                                                        CssClass="qb-input-combo"
                                                        ExpandAnimation-Type="None">
                                                        <ItemTemplate>
                                                            <telerik:RadGrid ID="radGridItemList" runat="server" CssClass="GridStyle1"
                                                                AutoGenerateColumns="false" AllowPaging="true"
                                                                AllowSorting="true" AllowFilteringByColumn="true"
                                                                OnNeedDataSource="radGridItemList_NeedDataSource"
                                                                EnableLinqExpressions="false">
                                                                <GroupingSettings CaseSensitive="false" />
                                                                <PagerStyle Mode="NextPrevAndNumeric" />
                                                                <MasterTableView DataKeyNames="ItemNumber" ClientDataKeyNames="ItemNumber">
                                                                    <Columns>
                                                                        <telerik:GridBoundColumn UniqueName="ItemNumber" DataField="ItemNumber"
                                                                            HeaderText="Item Number" AutoPostBackOnFilter="true"
                                                                            FilterControlWidth="100px">
                                                                            <HeaderStyle Width="150px" />
                                                                        </telerik:GridBoundColumn>
                                                                        <telerik:GridBoundColumn UniqueName="RevisionNumber" DataField="RevisionNumber"
                                                                            HeaderText="Revision Number" AutoPostBackOnFilter="true"
                                                                            FilterControlWidth="100px">
                                                                            <HeaderStyle Width="150px" />
                                                                        </telerik:GridBoundColumn>
                                                                        <telerik:GridBoundColumn UniqueName="Description" DataField="Description"
                                                                            HeaderText="Description" AutoPostBackOnFilter="true"
                                                                            FilterControlWidth="100px">
                                                                            <HeaderStyle Width="150px" />
                                                                        </telerik:GridBoundColumn>

                                                                    </Columns>
                                                                </MasterTableView>
                                                                <ClientSettings>
                                                                    <ClientEvents OnRowClick="radGridItemListOnRowClicked" />
                                                                    <Scrolling AllowScroll="true" UseStaticHeaders="true" />
                                                                </ClientSettings>
                                                            </telerik:RadGrid>
                                                        </ItemTemplate>
                                                        <Items>
                                                            <telerik:RadComboBoxItem runat="server" Text=" "></telerik:RadComboBoxItem>
                                                        </Items>
                                                    </telerik:RadComboBox>
                                                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
                                                                                        ControlToValidate="radcmbItemNumber" ErrorMessage="!"
                                                                                        ForeColor="Red" 
                                                                                        SetFocusOnError="true" />
                                                </div>

I used a combo and when it it clicked, I need to load search result in a grid for what is typed in the combo box. Here is my .cs

 protected void radcmbItemNumber_TextChanged(object sender, EventArgs e)
        {
            string textToSearch = radcmbItemNumber.Text.ToString();
            var gridItemList = radcmbItemNumber.Items[0].FindControl("radGridItemList") as RadGrid;
            if (!string.IsNullOrEmpty(textToSearch))
                gridItemList.MasterTableView.FilterExpression = "([ItemNumber] LIKE \'%" + textToSearch + "%\')";

            gridItemList.MasterTableView.Rebind();
}

So this text change works perfectly but in my grid new search result is not reloaded until I go to second page. Hope this makes sense.Let me know if you need further info. Thanks

Lakshan
  • 15
  • 1
  • 5
  • Not sure what exactly is causing your issue. I would use a regular html table as the and use the RadComboBox's built in filtering to search the data. View this link: [Databind Template](https://docs.telerik.com/devtools/aspnet-ajax/controls/combobox/templates/overview) – mike100111 Dec 08 '17 at 19:02
  • Thanks Mike. I will try this way too. – Lakshan Dec 08 '17 at 23:15