public static Configurator <Toy, Row> Filtering(this Configurator <Toy, Row> conf) { conf.ClientPagination(); conf.LoadImmediately(true); conf .DatePicker(new DatepickerOptions( // set up functions for 3rd party datepickers "createDatePicker", "putDateToDatepicker", "getDateFromDatepicker", "destroyDatepicker" )) .AppendEmptyFilters() // tell table to draw empty filters for columns without filters // it is needed when using table-look-like templating ; conf.Column(c => c.Price).FilterRange(c => c.Price, ui => ui.Placeholders("< price", "> price")); conf.Column(c => c.Preorders).Title("Preorders (pure client)").FilterRangeUi(ui => ui.Placeholders("Min. Id", "Max. Id").Inputdelay(50).ClientFiltering()); conf.Column(c => c.TypeOfToy).Title("Type (client, multiple)") .FilterMultiSelect(c => c.GroupType, ui => ui.SelectItems(EnumHelper.GetSelectList(typeof(ToyType))).ClientFiltering()); conf.Column(c => c.IsPaid).Title("Paid (server filter)").FilterBoolean(c => c.Paid, "Paid", "Unpaid", "Any"); conf.Column(c => c.CreatedDate).FilterValue(c => c.CreatedDate); // datepicker will be added automatically /* * Ok, here should be few words said * When you specify source column and it is nullable then things become complicated, * so you can encounter null-related errors from time to time * * In this case you should alter column filtering expression with null-coalescing (??) operator or with .GetValueOrDefault * to make it suitable for query provider. * Otherwise, Lattice will alter your column expression (if it is nullable) with .Value property. It may not work for all * query providers, so if you dont like this behavior use .By call and handle null values by yourself */ conf.Column(c => c.LastSoldDate).FilterRange(c => c.LastSoldDate.GetValueOrDefault(), ui => ui.RangeDefault(DateTime.Now.AddDays(-50), DateTime.Now)); // filter by range of dates with default values /* * We hide unrelated columns just for convinence */ conf.Column(c => c.DeliveryDelay).DataOnly(); conf.Column(c => c.Id).DataOnly(); conf.Column(c => c.ResponsibleUserName).DataOnly(); conf.Column(c => c.ItemsWasInitially).DataOnly(); conf.Column(c => c.PreviousState).Title("Prev. state").FilterSelect(c => c.PreviousStateCode, ui => ui.SelectNotPresent().SelectItems(EnumHelper.GetSelectList(typeof(State))).ClientFiltering()); return(conf); }
public static Configurator <Toy, Row> Editor(this Configurator <Toy, Row> conf) { conf.ClientPagination(); conf .DatePicker(new DatepickerOptions( // set up functions for 3rd party datepickers "createDatePicker", "putDateToDatepicker", "getDateFromDatepicker", "destroyDatepicker" )); conf.LoadingOverlap(ui => ui.Overlap()); conf.LoadImmediately(true); conf.Column(c => c.SupplierAddress).DataOnly(false); conf.Column(c => c.ItemsSold).DataOnly(); conf.Column(c => c.DeliveryDelay).DataOnly(); conf.Column(c => c.ItemsWasInitially).DataOnly(); conf.Column(c => c.Preorders).DataOnly(); conf.Column(c => c.LastSoldDate).DataOnly(); conf.Column(c => c.ResponsibleUserName).DataOnly(); conf.Column(c => c.Price).OrderableUi(ui => ui.DefaultOrdering(Ordering.Neutral)); conf.Column(c => c.Id).Orderable(c => c.Id, ui => ui.DefaultOrdering(Ordering.Descending)); conf.AdjustmentTemplates("updatedRow", "updatedCell", "addedRow"); conf.Column(c => c.Name) .Template(t => t.Returns(v => v.Tag("span") .Attr("style", "background-color:aliceblue") .Data("editcell", "true").Content("{Name}") )) .EditPlainText(); conf.Column(c => c.CreatedDate) .Template(t => t.Returns( v => v.Tag("div").Content( c => c.Tag("span").Content("`dateFormat({CreatedDate},'dd mmm yyyy',false)`").EditPencil()))) .EditPlainText() ; conf.Column(c => c.Price) .Template(t => t.Returns( v => v.Tag("div").Content( c => c.Tag("span").Content("{Price}").EditPencil()))) .EditPlainText(t => t.TemplateId("plainTextEditorAlternate")) ; conf.Column(c => c.IsPaid) .Template(t => { t.Returns(v => v.Tag("div").Content(c => c.Tag("span").Content("`{IsPaid}.toString() + ({^IsUpdated}?'edited':'')`").EditPencil())); }) .EditCheck() ; conf.Column(c => c.SupplierAddress) .Template(t => t.Returns( v => v.Tag("div").Content( c => c.Tag("span").Content("{SupplierAddress}").EditPencil()))) .EditMemo(c => c.Size(3, 10)) ; conf.Column(c => c.TypeOfToy) .FormatEnumWithDisplayAttribute((tpl, v) => tpl.Content(v.Text).EditPencil()) .EditSelectList(c => c.Items(EnumHelper.GetSelectList(typeof(ToyType))).WithEmptyElement("---Select---", false)) ; return(conf); }