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:
NeedDataSource event:
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.
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
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