public static void init() { MultiSearchViewModel2013 vm = new MultiSearchViewModel2013(); // Create Grids FetchQuerySettings[] searches = vm.Config.GetItems(); jQueryObject searchResultsDiv = jQuery.Select("#searchResults"); jQuery.Window.Resize(delegate(jQueryEvent e) { OnResizeSearchResults(searchResultsDiv); }); OnResizeSearchResults(searchResultsDiv); jQuery.Select(".sparkle-xrm").Bind("onmousewheel mousewheel DOMMouseScroll", OnSearchResultsMouseScroll); int i = 0; foreach (FetchQuerySettings config in searches) { List <Column> cardColumn = new List <Column>(new Column(ColumnProperties.Id, "card-column", ColumnProperties.Options, config.Columns, ColumnProperties.Name, "Name", ColumnProperties.Width, 290, ColumnProperties.CssClass, "card-column-cell")); cardColumn[0].Formatter = RenderCardColumnCell; cardColumn[0].DataType = "PrimaryNameLookup"; config.Columns[0].DataType = "PrimaryNameLookup"; // This is so that clicking on the column opens the record GridDataViewBinder dataViewBinder = new GridDataViewBinder(); GridOptions gridOptions = new GridOptions(); gridOptions.EnableCellNavigation = true; gridOptions.AutoEdit = false; gridOptions.Editable = false; gridOptions.EnableAddRow = false; // Set height to the number of columns int columns = config.Columns.Count; gridOptions.RowHeight = (columns > 3? 3 : columns) * 16;; if (gridOptions.RowHeight < 70) { gridOptions.RowHeight = 70; } gridOptions.HeaderRowHeight = 0; string gridId = "grid" + i.ToString() + "container"; DataViewBase dataView = config.DataView; Grid grid = new Grid("#" + gridId, dataView, cardColumn, gridOptions); grids[i] = grid; AddResizeEventHandlers(grid, gridId); dataViewBinder.DataBindEvents(grid, dataView, gridId); dataViewBinder.BindClickHandler(grid); i++; } // Data Bind ViewBase.RegisterViewModel(vm); }
public static void SetUpGrids(TimeSheetViewModel vm) { GridOptions daysGridOpts = new GridOptions(); daysGridOpts.EnableCellNavigation = true; daysGridOpts.EnableColumnReorder = false; daysGridOpts.AutoEdit = false; daysGridOpts.Editable = true; daysGridOpts.RowHeight = 20; daysGridOpts.HeaderRowHeight = 25; daysGridOpts.ForceFitColumns = false; daysGridOpts.EnableAddRow = true; // Create Timesheet Grid DataViewBase daysDataView = vm.Days; List <Column> columns = new List <Column>(); GridDataViewBinder.BindRowIcon(GridDataViewBinder.AddColumn(columns, "", 50, "icon"), "activity"); XrmLookupEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Activity", 300, "activity"), vm.ActivitySearchCommand, "activityid", "subject", "activitytypecode"); GridDataViewBinder.AddColumn(columns, "Mon", 50, "day0"); GridDataViewBinder.AddColumn(columns, "Tue", 50, "day1"); GridDataViewBinder.AddColumn(columns, "Wed", 50, "day2"); GridDataViewBinder.AddColumn(columns, "Thu", 50, "day3"); GridDataViewBinder.AddColumn(columns, "Fri", 50, "day4"); GridDataViewBinder.AddColumn(columns, "Sat", 50, "day5"); GridDataViewBinder.AddColumn(columns, "Sun", 50, "day6"); daysGrid = new Grid("#timesheetGridContainer", daysDataView, columns, daysGridOpts); GridDataViewBinder daysDataBinder = new GridDataViewBinder(); daysDataBinder.DataBindEvents(daysGrid, daysDataView, "timesheetGridContainer"); // Set the totals row meta data daysDataView.OnGetItemMetaData += delegate(object item) { DayEntry day = (DayEntry)item; if (day != null && day.isTotalRow) { ItemMetaData metaData = new ItemMetaData(); metaData.Editor = null; metaData.Formatter = delegate(int row, int cell, object value, Column columnDef, object dataContext) { if (columnDef.Field == "activity") { return("Total"); } else { return(Formatters.DefaultFormatter(row, cell, value, columnDef, dataContext)); } }; metaData.CssClasses = "days_total_row"; return(metaData); } else { return(null); } }; daysDataBinder.DataBindSelectionModel(daysGrid, daysDataView); // --------------------------------------- // Sessions Grid // --------------------------------------- DataViewBase sessionsDataView = vm.SessionDataView; List <Column> sessionGridCols = new List <Column>(); GridDataViewBinder.AddEditIndicatorColumn(sessionGridCols); XrmTextEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Description", 200, "dev1_description")); XrmDateEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Date", 200, "dev1_starttime"), true); XrmTimeEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Start", 100, "dev1_starttime")).Validator = delegate(object value, object item) { dev1_session session = (dev1_session)item; DateTime newStartTime = (DateTime)value; ValidationResult result = new ValidationResult(); if (session.dev1_EndTime != null) { result.Valid = true; string valueText = (string)value; // Check if the end time is before the start time bool isValid = DateTimeEx.GetTimeDuration(newStartTime) < DateTimeEx.GetTimeDuration(session.dev1_EndTime); result.Valid = isValid; result.Message = "The start time must be before the end time"; } else { result.Valid = true; } return(result); }; XrmTimeEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "End", 100, "dev1_endtime")).Validator = delegate(object value, object item) { dev1_session session = (dev1_session)item; DateTime newEndTime = (DateTime)value; ValidationResult result = new ValidationResult(); if (session.dev1_StartTime != null) { result.Valid = true; string valueText = (string)value; // Check if the end time is before the start time bool isValid = DateTimeEx.GetTimeDuration(session.dev1_StartTime) < DateTimeEx.GetTimeDuration(newEndTime); result.Valid = isValid; result.Message = "The end time must be after the start time"; } else { result.Valid = true; } return(result); }; XrmDurationEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Duration", 200, "dev1_duration")); GridDataViewBinder sessionsDataBinder = new GridDataViewBinder(); sessionsGrid = sessionsDataBinder.DataBindXrmGrid(sessionsDataView, sessionGridCols, "sessionsGridContainer", null, true, true); sessionsDataBinder.DataBindSelectionModel(sessionsGrid, sessionsDataView); daysGrid.OnActiveCellChanged.Subscribe(delegate(EventData e, object args) { CellSelection activeCell = daysGrid.GetActiveCell(); if (activeCell != null) { if (activeCell.Cell < 2) { // Whole activity is selected vm.Days.SelectedDay = null; } else { vm.Days.SelectedDay = activeCell.Cell - 1; } } }); }