Search code examples
c#telerikgriddynamic-binding

C# Telerik Grid data binding not reloading


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?


Solution

  • 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