简体   繁体   English

C#Telerik Grid数据绑定未重新加载

[英]C# Telerik Grid data binding not reloading

I want to bind data in telerik grid dynamically. 我想将数据动态绑定到telerik网格中。 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. 现在,我想重新加载带有过滤的ItemNumbers的gridItemList(例如,从ItemMaster中选择ItemNumber,其中ItemNumber喜欢'a%'),然后将新的数据源再次绑定到网格。

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() ). 使用高级数据绑定( RadGrid1_OnNeedDataSource() )时,可以使用内置的RadGrid功能过滤由自定义对象组成的数据源。

To do so from within the RadGrid just enable filtering by setting AllowFilteringByColumn="True" and the RadGrid will automatically filter your DataSource. 为此,只需在AllowFilteringByColumn="True"内通过设置AllowFilteringByColumn="True"启用过滤, AllowFilteringByColumn="True"就会自动过滤您的数据源。

You can also do this externally by setting the current Filter Expression and calling rebind() on the RadGrid. 您还可以通过设置当前的Filter Expression并在RadGrid上调用rebind()来从外部进行此操作。

ASPX: 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#: 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 手动过滤

.aspx .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 这是我的.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 谢谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM