2017-12-05 14 views
0

データを動的にバインドしたいと考えています。 最初は以下のコードを使用しました。C#Telerikグリッドデータバインディングがリロードされない

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

今私は(例えばItemNumber LIKE「%」ItemMasterからItemNumberを選択)し、再びグリッドに新しいデータソースをバインドするフィルタItemNumbersでgridItemListをリロードします。

私はこのようなことをしましたが、動作しません。

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; 
     }  

お勧めはありますか?

+0

新しいデータソースを割り当てた後に 'Grid.Rebind()'を試してください。 –

+0

いいえそのようには動作しません。再バインドと言うと、radGridItemList_NeedDataSource()をもう一度呼び出し、前のデータセットをロードします。 – Lakshan

答えて

0

高度なデータバインディング(RadGrid1_OnNeedDataSource())を使用している場合、組み込みのRadGrid機能を使用して、カスタムオブジェクトで構成されるデータソースをフィルタリングできます。

RadGrid内でこれを行うには、AllowFilteringByColumn="True"を設定してフィルタリングを有効にするだけで、RadGridは自動的にデータソースをフィルタリングします。

また、現在のフィルタ式を設定し、RadGridでrebind()を呼び出すことで、これを外部的に行うこともできます。

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(); 
} 

を見ていくつかのリンク:

Advanced DataBinding

Advanced Data Binding Tips

Manual Filtering

+0

マイクのおかげでありがとう。部分的に機能します。私のグリッドでは、ページングを有効にしました。コンボでテキストを入力すると、グリッドの2番目のページに移動して検索結果が正しいときに検索結果が表示されます。グリッドの最初のページはリフレッシュされません。 – Lakshan

+0

私の喜びです。私はあなたが直面している問題についてのあなたの記述をよく理解していません。また、コンボはどういう意味ですか?私はページングを含めるために私の答えを更新しました。すべてが機能しているようです。マークアップとコードを投稿する必要があります。それ以外の場合は、特定のシナリオでは動作しない理由はたくさんあります。 – mike100111

+0

ここに行くよ。 .aspxと.csページの詳細を教えてください。 – Lakshan

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> 

私はコンボを使用し、それがクリックされたとき、私は、コンボボックスに入力されているもののために、グリッド内の検索結果をロードする必要があります。 は、ここに私は.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(); 
} 

だから、このテキストの変更が完璧に動作しますが、私は2番目のページに移動するまで、私のグリッドに新しい検索結果がリロードされていないです。これが意味をなさないことを願っています。さらなる情報が必要な場合はお知らせください。ありがとう

+0

問題の原因を正確に把握していません。私はとして通常のHTMLテーブルを使用し、RadComboBoxの組み込みフィルタリングを使用してデータを検索します。このリンクを見る:[Databind Template](https://docs.telerik。com/devtools/aspnet-ajax/controls/combobox/templates/overview) – mike100111

+0

ありがとうマイク。私もこの方法を試みます。 – Lakshan

関連する問題