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?
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: