Example #1
0
        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);
        }
Example #2
0
        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);
        }