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 (Eg 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:
.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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.