This is a migrated thread and some comments may be shown as answers.

RadGrid filtering with FilterTemplate

2 Answers 617 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Hrvach
Top achievements
Rank 1
Hrvach asked on 15 Jan 2012, 07:06 PM
Hello!

I'm not sure how to filter correctly RadGrid using FilterTemplates and RadButton which selects values from filters to create filtering expression. I'll explain more in the text below.

This is my RadGrid layout:

<telerik:RadGrid ID="gvDaily" runat="server" AllowPaging="True" PageSize="30" AllowSorting="True"
    EnableLinqExpressions="false" AllowFilteringByColumn="true" AutoGenerateColumns="False"
    CellSpacing="0" GridLines="None" OnNeedDataSource="gvDaily_NeedDataSource" Skin="Hay"
    OnItemDataBound="gvDaily_ItemDataBound" OnInsertCommand="gvDaily_InsertCommand"
    OnItemCommand="gvDaily_ItemCommand" OnUpdateCommand="gvDaily_UpdateCommand" OnPreRender="gvDaily_PreRender">
    <MasterTableView DataKeyNames="idDaily" CommandItemDisplay="Top" InsertItemPageIndexAction="ShowItemOnCurrentPage"
        Caption="Activity" TableLayout="Fixed">
        <CommandItemSettings ShowAddNewRecordButton="true" AddNewRecordText="Dodaj novi activity" />
        <Columns>
            <telerik:GridEditCommandColumn UniqueName="EditCommandColumnTicket" HeaderStyle-Width="50px">
            </telerik:GridEditCommandColumn>
            <telerik:GridBoundColumn UniqueName="Manager" HeaderText="Manager" DataField="DailyManager"
                HeaderStyle-Width="150px" ShowFilterIcon="false" AutoPostBackOnFilter="false">
                <FilterTemplate>
                    <telerik:RadComboBox ID="rcbManagerDailyFilter" runat="server" AppendDataBoundItems="true"
                        OnSelectedIndexChanged="rcbManagerDailyFilter_SelectedIndexChanged" MarkFirstMatch="true"
                        AutoPostBack="false" Width="130px" Skin="Hay">
                    </telerik:RadComboBox>
                </FilterTemplate>
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Datum" HeaderText="Datum" UniqueName="Datum"
                DataFormatString="{0:dd.MM.yyyy.}" AutoPostBackOnFilter="true" HeaderStyle-Width="200px">
                <FilterTemplate>
                    <telerik:RadDatePicker ID="txtDatumPrijaveDailyOdFilter" runat="server" Culture="hr-HR"
                        Width="80px" Skin="Hay">
                    </telerik:RadDatePicker>
                    -
                    <telerik:RadDatePicker ID="txtDatumPrijaveDailyDoFilter" runat="server" Culture="hr-HR"
                        Width="80px" Skin="Hay">
                    </telerik:RadDatePicker>
                </FilterTemplate>
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="Vrijeme" HeaderText="Vrijeme obavljanja" DataField="Vrijeme"
                HeaderStyle-Width="120px" AllowFiltering="false">
            </telerik:GridBoundColumn>
            <telerik:GridTemplateColumn UniqueName="TicketNumber" HeaderText="Broj incidenta"
                DataField="TicketNumber" HeaderStyle-Width="60px" FilterControlWidth="40px" AutoPostBackOnFilter="false"
                ShowFilterIcon="false" CurrentFilterFunction="Contains">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.TicketNumber") %>'>
                    </asp:Label>
                    <telerik:RadToolTip ID="RadToolTip1" runat="server" TargetControlID="Label1" Width="150px"
                        RelativeTo="Element" Position="MiddleRight" EnableShadow="false">
                        <%# DataBinder.Eval(Container, "DataItem.TicketOpis") %>
                    </telerik:RadToolTip>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridBoundColumn UniqueName="Tvrtka" DataField="Tvrtka" HeaderText="Tvrtka"
                CurrentFilterFunction="Contains" AutoPostBackOnFilter="false" HeaderStyle-Width="200px">
                <FilterTemplate>
                    <telerik:RadComboBox ID="rcbTvrtkaDailyFilter" runat="server" AppendDataBoundItems="true"
                        OnSelectedIndexChanged="rcbTvrtkaDailyFilter_SelectedIndexChanged" AutoPostBack="false"
                        MarkFirstMatch="true" Width="180px" Skin="Hay">
                    </telerik:RadComboBox>
                </FilterTemplate>
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="Opis" HeaderText="Opis" DataField="Opis" HeaderStyle-Width="300px"
                AllowFiltering="false">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="EfektivnoSati" HeaderText="Efektivno sati" DataField="EfektivnoSati"
                HeaderStyle-Width="60px" AllowFiltering="false">
            </telerik:GridBoundColumn>
            <telerik:GridCheckBoxColumn UniqueName="Dolazak" HeaderText="Dolazak" DataField="Dolazak"
                HeaderStyle-Width="120px">
                <FilterTemplate>
                    <asp:RadioButtonList ID="rblDolazakFilter" runat="server" RepeatDirection="Vertical"
                        RepeatLayout="Flow">
                        <asp:ListItem>Dolazak</asp:ListItem>
                        <asp:ListItem>Nije dolazak</asp:ListItem>
                        <asp:ListItem>Sve</asp:ListItem>
                    </asp:RadioButtonList>
                </FilterTemplate>
            </telerik:GridCheckBoxColumn>
            <telerik:GridButtonColumn UniqueName="DeleteColumn" Text="Delete" CommandName="Delete"
                ConfirmDialogType="RadWindow" ConfirmText="Brisanje activityja!" HeaderStyle-Width="60px">
            </telerik:GridButtonColumn>
            <telerik:GridTemplateColumn UniqueName="FilterColumn" AllowFiltering="False" HeaderStyle-Width="70px">
                <HeaderTemplate>
                    <telerik:RadButton ID="btnFilter" runat="server" Text="Filter" Skin="Hay" CommandName="FilterAll">
                    </telerik:RadButton>
                </HeaderTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
        <EditFormSettings UserControlName="UserControls/DailyUserControl.ascx" EditFormType="WebUserControl">
            <EditColumn UniqueName="EditCommandColumn2">
            </EditColumn>
        </EditFormSettings>
    </MasterTableView>
</telerik:RadGrid>

NeedDataSource event:

protected void gvDaily_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
        {
 
            var dailyList = (from d in db.Daily
                             select d).ToList();
 
            gvDaily.DataSource = (from d in dailyList
                                  orderby d.Datum descending
                                  select new { d.idDaily, d.Biljeske, d.Datum, d.EfektivnoSati, Tvrtka = d.Ticket.Firma.Naziv, DailyManager = d.Kontakt.Ime + " " + d.Kontakt.Prezime, Ticket = d.Ticket.Opis, Vrijeme = d.VrijemeOd + "-" + d.VrijemeDo, d.VrijemeDo, d.VrijemeOd, d.Opis, d.Ticket.Zatvoren, d.Ticket.IzdanRacun, TicketNumber = d.Ticket.idNadredeniTicket + "-" + d.Ticket.RedniBroj, d.Dolazak, TicketOpis = d.Ticket.Opis }).ToList();
        }


This is the ItemCommand inside RadGrid ItemCommand event used for filtering, but it doesn't work properly. When I try to execute filtering separately (for example, when I'm filtering only "rcbManagerDailyFilter" or only "rcbTvrtkaDailyFilter") it works perfectly, but when I try to filter RadGrid using multiple filters only get my RadGrid filtered by one of those filters). Also, I'm not sure how to properly filter using RadDatePicker control.

else if (e.CommandName == "FilterAll")
{
    GridFilteringItem item = gvDaily.MasterTableView.GetItems(GridItemType.FilteringItem)[0] as GridFilteringItem;
 
    RadComboBox rcbManagerDailyFilter = (RadComboBox)item.FindControl("rcbManagerDailyFilter");
    RadComboBox rcbTvrtkaDailyFilter = (RadComboBox)item.FindControl("rcbTvrtkaDailyFilter");
    RadDatePicker txtDatumPrijaveDailyOdFilter = (RadDatePicker)item.FindControl("txtDatumPrijaveDailyOdFilter");
    RadDatePicker txtDatumPrijaveDailyDoFilter = (RadDatePicker)item.FindControl("txtDatumPrijaveDailyDoFilter");
    RadioButtonList rblDolazakFilter = (RadioButtonList)item.FindControl("rblDolazakFilter");
 
    string tvrtka = rcbTvrtkaDailyFilter.SelectedItem.Text;
    string manager = rcbManagerDailyFilter.SelectedItem.Text;
    string datumPrijaveOd = (txtDatumPrijaveDailyOdFilter.SelectedDate).ToString();
    string datumPrijaveDo = (txtDatumPrijaveDailyDoFilter.SelectedDate).ToString();
 
    string expression = "";
 
    if (tvrtka != "Odaberi tvrtku")
    {
        expression += "([Tvrtka] = '" + tvrtka + "')";
    }
 
    if (manager != "Odaberi managera")
    {
        expression += " AND ";
        expression += "([DailyManager] = '" + manager + "')";
    }
 
    if (datumPrijaveOd.Length != 0)
    {
        expression += " AND ";
        expression += "([Datum] >= '" + datumPrijaveOd + "')";
    }
 
    if (datumPrijaveDo.Length != 0)
    {
        expression += " AND ";
        expression += "([Datum] = '" + datumPrijaveDo + "')";
    }
 
 
    gvDaily.MasterTableView.FilterExpression = expression;
    gvDaily.Rebind();
}

EDIT: It seems like code is ok, but the problem is that values are lost on postback. Any help on how to fix it would be appreciated.

Regards,

Hrvoje

2 Answers, 1 is accepted

Sort by
0
Shinu
Top achievements
Rank 2
answered on 16 Jan 2012, 05:01 AM
Hello,

Check the following demo which implements the same.
Grid / Filter Templates

-Shinu.
0
Hrvach
Top achievements
Rank 1
answered on 16 Jan 2012, 09:52 AM
Hello,

thank you for the reply but that's not the solution to my question. What I need is how to properly build filter expression. Please refer to the last paragraph of my post.

Regards,

Hrvoje
Tags
Grid
Asked by
Hrvach
Top achievements
Rank 1
Answers by
Shinu
Top achievements
Rank 2
Hrvach
Top achievements
Rank 1
Share this question
or