2015-10-08 9 views
1

У меня есть RadGrid, у которого есть FilterTemplate с помощью RadComboBox. Когда я загружаю данные в RadGrid, я хочу показать данные, отфильтрованные пользователем. Вот моя колонка:Фильтрация данных при загрузке в RadGrid FilterTemplate

<telerik:GridTemplateColumn FilterControlAltText="Filter tclmArrangement column" 
HeaderText="Arrangement" UniqueName="tclmArrangement" DefaultInsertValue="-" 
DataField="IsDemoAssigned"> 
    <HeaderStyle Width="2%" /> 
    <ItemTemplate> 
     <asp:Repeater ID="rptchkarrangement" runat="server" 
     DataSource='<%# IIf(DataBinder.Eval(Container, "DataItem.IsDEmoAssigned") = 0, 
     DataBinder.Eval(Container, "DataItem.Employees"), Nothing)%> '> 
      <ItemTemplate> 
       <table> 
        <tr class="clsParent"> 
         <input type="checkbox" class="clsEmployee" id="cbSelect" 
          checked='<%# DataBinder.Eval(Container, "DataItem.IsAssigned")%>' 
          runat="server" /> 
        </tr> 
       </table> 
      </ItemTemplate> 
     </asp:Repeater> 
    </ItemTemplate> 
    <FilterTemplate> 
     <telerik:RadComboBox ID="RadComboBoxAssignmentStatus" Height="80px" Width="80px" 
     AppendDataBoundItems="true" runat="server" 
     OnClientSelectedIndexChanged="AssignmentStatusIndexChanged"> 
     </telerik:RadComboBox> 
     <telerik:RadScriptBlock ID="rsbAssignmentStatus" runat="server"> 
      <script type="text/javascript"> 
       function AssignmentStatusIndexChanged(sender, args) { 

        var tableView = $find("<%# TryCast(Container,GridItem) 
            .OwnerTableView.ClientID %>"); 
        var selectedValue = sender.get_value(); 

        if (selectedValue) { 
         if (parseInt(selectedValue) < 0) { 
          tableView.filter("tclmArrangement", selectedValue, "NoFilter"); 
         } 
         else { 
          tableView.filter("tclmArrangement", selectedValue, "EqualTo"); 
         } 
        } 
       } 

      </script> 
     </telerik:RadScriptBlock> 
    </FilterTemplate> 
</telerik:GridTemplateColumn> 

Фильтр отлично работает, когда полные данные отображаются первоначально с использованием опции «Все». Фильтр имеет значения (All, Assigned и UnAssigned). Как показать данные в RadGrid, который относится к категории UnAssigned?

+0

Просто интересно, действительно ли вы нужен ретранслятор в RadGrid? Основываясь на моем понимании, вы хотите отфильтровать эти флажки, не отмеченные в репитере. Во всяком случае, вы отсутствуете – Nic

ответ

0

Эта ссылка помогли мне.

http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/functionality/filtering/how-to/apply-default-filter-on-initial-load

Одна вещь, которая не указана в ссылке, чтобы установить «EnableLinqExpression = ложь»

Я решил взять «Установка начального фильтра в коде-за» подход. Выражения фильтра могут быть сформированы следующим образом.

http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/functionality/filtering/how-to/operate-with-the-filterexpression-manually

0

Не уверен, что это то, что вы хотите, но я фильтрую через GridTemplateColumn DataFields. Я удалил ретранслятор.

Я надеюсь, что это поможет вам

.aspx

<telerik:RadGrid ID="rg" runat="server" AutoGenerateColumns="false" 
OnNeedDataSource="rg_NeedDataSource" AllowFilteringByColumn="true"> 
<MasterTableView> 
    <Columns> 
     <telerik:GridTemplateColumn DataField="IsAssigned" DefaultInsertValue="-" 
     UniqueName="tclmArrangement"> 
      <HeaderStyle Width="2%" /> 
      <ItemTemplate> 
       <asp:CheckBox ID="chk" runat="server" 
       Checked='<%# Eval("IsAssigned") %>' /> 
       <asp:Label ID="lbl" runat="server" Text='<%# Eval("EmployeeName") %>'> 
       </asp:Label> 
      </ItemTemplate> 
      <FilterTemplate> 
       <telerik:RadComboBox ID="rcbAssignmentStatus" Height="80px" Width="80px" 
        runat="server" 
        OnClientSelectedIndexChanged="AssignmentStatusIndexChanged" 
        SelectedValue='<%# ((GridItem)Container) 
            .OwnerTableView 
            .GetColumn("tclmArrangement").CurrentFilterValue %>'> 
        <Items> 
         <telerik:RadComboBoxItem Text="All" Value="" /> 
         <telerik:RadComboBoxItem Text="All Assigned" Value="true" /> 
         <telerik:RadComboBoxItem Text="Unassigned" Value="false" /> 
        </Items> 
       </telerik:RadComboBox> 
       <telerik:RadCodeBlock ID="rcb" runat="server"> 
        <script type="text/javascript"> 
         function AssignmentStatusIndexChanged(sender, args) { 
          var tableView = $find('<%# ((GridItem)Container) 
              .OwnerTableView.ClientID %>'); 
          var value = sender.get_selectedItem().get_value(); 

          if (value != "") 
           tableView.filter('tclmArrangement', args.get_item() 
           .get_value(), 'EqualTo'); 
          else 
           tableView.filter('tclmArrangement', args.get_item() 
           .get_value(), 'NoFilter') 
         } 
        </script> 
       </telerik:RadCodeBlock> 
      </FilterTemplate> 
     </telerik:GridTemplateColumn> 
    </Columns> 
</MasterTableView> 
</telerik:RadGrid> 

.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Check 
    if (!IsPostBack) 
    { 
     // Variable 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("IsAssigned", typeof(bool)); 
     dt.Columns.Add("EmployeeName", typeof(string)); 

     string[] employeeName = { "Patrick", "Bucky", "Henry", "Jesus", "Linda" }; 
     int[] isAssigned = { 1, 1, 0, 0, 0 }; 

     // Loop 
     for (int i = 0; i < employeeName.Length; i++) 
      dt.Rows.Add(isAssigned[i], employeeName[i]); 

     ViewState["Data"] = dt; 

     rg.DataSource = dt; 
     rg.DataBind(); 

     dt.Dispose(); 

    } 
} 

protected void rg_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) 
{ 
    rg.DataSource = ViewState["Data"] as DataTable; 
}