public static void Init() { ActivitySubGridViewModel vm = new ActivitySubGridViewModel(); // Add resize height event jQuery.Window.Resize(delegate(jQueryEvent e) { OnChangeHeight(); }); // Create Grid FetchQuerySettings config = vm.ViewConfig; GridDataViewBinder dataViewBinder = new GridDataViewBinder(); Grid grid = dataViewBinder.DataBindXrmGrid(config.DataView, config.Columns, "gridcontainer", "gridpager", true, false); dataViewBinder.BindClickHandler(grid); // Data Bind ViewBase.RegisterViewModel(vm); Window.SetTimeout(delegate() { vm.Init(); OnChangeHeight(); grid.ResizeCanvas(); }, 0); }
public static void Init() { PageEx.MajorVersion = 2013; jQuery.OnDocumentReady(delegate() { ValidationApi.RegisterExtenders(); // Init settings OrganizationServiceProxy.GetUserSettings(); SimpleEditableGridViewModel vm = new SimpleEditableGridViewModel(); // Create Grid GridDataViewBinder dataViewBinder = new GridDataViewBinder(); dataViewBinder.AddCheckBoxSelectColumn = true; dataViewBinder.SelectActiveRow = true; dataViewBinder.MultiSelect = false; List<Column> columns = new List<Column>(); EditorFactory textEditor = (EditorFactory)Script.Literal("Slick.Editors.Text"); XrmTextEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Title", 300, "title")); XrmTextEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Author", 300, "author")); dataViewBinder.DataBindXrmGrid(vm.Books, columns, "booksGridContainer", null, true, true); ViewBase.RegisterViewModel(vm); }); }
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 init() { ContactsEditorViewModel vm = new ContactsEditorViewModel(); OrganizationServiceProxy.GetUserSettings(); // Data Bind Grid List<Column> columns = GridDataViewBinder.ParseLayout(",entityState,20,First Name,firstname,200,Last Name,lastname,200,Birth Date,birthdate,200,Account Role Code,accountrolecode,200,Number of Children,numberofchildren,100,Currency,transactioncurrencyid,200,Credit Limit,creditlimit,100,Gender,gendercode,100,Owner,ownerid,100"); // Set Column formatters and editors columns[0].Formatter = delegate(int row, int cell, object value, Column columnDef, object dataContext) { EntityStates state = (EntityStates)value; return ((state == EntityStates.Changed) || (state == EntityStates.Created)) ? "<span class='grid-edit-indicator'></span>" : ""; }; // First Name Column XrmTextEditor.BindColumn(columns[1]); // Last Name Column XrmTextEditor.BindColumn(columns[2]); // Birth Date Column XrmDateEditor.BindColumn(columns[3], false); // Account Code Column XrmOptionSetEditor.BindColumn(columns[4], "contact", columns[4].Field, true); // Number of Children Column XrmNumberEditor.BindColumn(columns[5], 0, 100, 0); // Currency Column XrmLookupEditor.BindColumn(columns[6], vm.TransactionCurrencySearchCommand, "transactioncurrencyid", "currencyname", ""); // Credit Limit Column XrmMoneyEditor.BindColumn(columns[7], -10000, 10000); // Another optionset XrmOptionSetEditor.BindColumn(columns[8], "contact", columns[8].Field, true); // OWner Column XrmLookupEditor.BindColumn(columns[9], vm.OwnerSearchCommand, "id", "name", ""); // Create Grid GridDataViewBinder contactGridDataBinder = new GridDataViewBinder(); Grid contactsGrid = contactGridDataBinder.DataBindXrmGrid(vm.Contacts, columns, "container", "pager",true,false); //contactGridDataBinder.BindClickHandler(contactsGrid); // Data Bind ViewBase.RegisterViewModel(vm); Window.SetTimeout(delegate() { vm.Init(); }, 0); }
public static void init() { TreeDataViewModel vm = new TreeDataViewModel(); GridDataViewBinder binder = new GridDataViewBinder(); List<Column> columns = new List<Column>( new Column( ColumnProperties.Id, "status", ColumnProperties.Name, "Status", ColumnProperties.Field, "status", ColumnProperties.Width, 70, ColumnProperties.MinWidth, 50, ColumnProperties.CssClass, "cell-title", ColumnProperties.Sortable, true ), new Column( ColumnProperties.Id, "project", ColumnProperties.Name, "Project", ColumnProperties.Field, "project", ColumnProperties.Width, 70, ColumnProperties.MinWidth, 50, ColumnProperties.CssClass, "cell-title", ColumnProperties.Sortable, true, ColumnProperties.Editor, XrmTextEditor.TextEditor), new Column( ColumnProperties.Id, "date", ColumnProperties.Name, "Date", ColumnProperties.Field, "date", ColumnProperties.Width, 70, ColumnProperties.Sortable, true ), new Column( ColumnProperties.Id, "employee", ColumnProperties.Name, "Employee", ColumnProperties.Field, "employee", ColumnProperties.Width, 80, ColumnProperties.Sortable, true ), new Column( ColumnProperties.Id, "duration", ColumnProperties.Name, "Duration", ColumnProperties.Field, "duration", ColumnProperties.MinWidth, 60, ColumnProperties.Sortable, true) ); vm.Items.OnGetItemMetaData += Items_OnGetItemMetaData; Grid grid = binder.DataBindXrmGrid(vm.Items,columns,"projectsGrid",null,true,false); grid.RegisterPlugin(new GroupGridRowPlugin()); // Data Bind ViewBase.RegisterViewModel(vm); }
public static void Init() { PageEx.MajorVersion = 2013; jQuery.OnDocumentReady(delegate() { ValidationApi.RegisterExtenders(); // Init settings OrganizationServiceProxy.GetUserSettings(); SimpleEditableGridViewModel vm = new SimpleEditableGridViewModel(); // Create Grid GridDataViewBinder dataViewBinder = new GridDataViewBinder(); dataViewBinder.AddCheckBoxSelectColumn = true; dataViewBinder.SelectActiveRow = true; dataViewBinder.MultiSelect = false; List<Column> columns = new List<Column>(); EditorFactory textEditor = (EditorFactory)Script.Literal("Slick.Editors.Text"); XrmTextEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Title", 150, "title")); XrmTextEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Author", 150, "author")); XrmDateEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Published", 150, "publishdate"), true); XrmMoneyEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Price", 150, "price"), 0, 100); XrmNumberEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Copies", 150, "numberofcopies"), 0, 1000, 0); XrmLookupEditorOptions languageLookupOptions = (XrmLookupEditorOptions)XrmLookupEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Language", 150, "language"), vm.GetLanguages, "id", "name", null).Options; languageLookupOptions.showImage = false; OptionSetBindingOptions formatBindingOptions = new OptionSetBindingOptions(); formatBindingOptions.allowEmpty = true; formatBindingOptions.GetOptionSetsDelegate = vm.GetFormats; XrmOptionSetEditor.BindColumnWithOptions(GridDataViewBinder.AddColumn(columns, "Format", 150, "format"), formatBindingOptions); XrmDurationEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Audio Length", 150, "audiolength")); XrmTimeEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Start Time", 150, "starttime")); Grid grid = dataViewBinder.DataBindXrmGrid(vm.Books, columns, "booksGridContainer", null, true, true); ViewBase.RegisterViewModel(vm); Window.SetTimeout(delegate() { vm.LoadBooks(); grid.ResizeCanvas(); }, 0); }); }
public static void init() { QuoteLineItemEditorViewModel vm = new QuoteLineItemEditorViewModel(); List<Column> columns = new List<Column>(); GridDataViewBinder.AddEditIndicatorColumn(columns); XrmNumberEditor.BindReadOnlyColumn( GridDataViewBinder.AddColumn(columns, "#", 40, "lineitemnumber"), 0); XrmLookupEditor.BindColumn( GridDataViewBinder.AddColumn(columns, "Existing Product", 200, "productid"), vm.ProductSearchCommand, "productid", "name", ""); XrmLookupEditor.BindColumn( GridDataViewBinder.AddColumn(columns, "Units", 100, "uomid"), vm.UoMSearchCommand, "uomid", "name", ""); XrmTextEditor.BindColumn( GridDataViewBinder.AddColumn(columns, "Write-In Product", 200, "productdescription")); XrmMoneyEditor.BindColumn( GridDataViewBinder.AddColumn(columns, "Price Per Unit", 200, "priceperunit"), 0, 1000); XrmNumberEditor.BindColumn( GridDataViewBinder.AddColumn(columns, "Quantity", 200, "quantity"), 0, 1000, 2); XrmMoneyEditor.BindReadOnlyColumn( GridDataViewBinder.AddColumn(columns, "Extended Amount", 100, "extendedamount")); GridDataViewBinder contactGridDataBinder = new GridDataViewBinder(); Grid contactsGrid = contactGridDataBinder.DataBindXrmGrid(vm.Lines, columns, "quoteproductGrid", "quoteproductPager", true, true); contactGridDataBinder.BindCommitEdit(vm); ViewBase.RegisterViewModel(vm); Window.SetTimeout(delegate() { vm.Lines.Refresh(); }, 0); }
private static void InitLocalisedContent() { Dictionary<string, string> entityTypes; string id; string logicalName; #if DEBUG id = "C489707F-B5E2-E411-80D5-080027846324"; logicalName = "account"; entityTypes = new Dictionary<string, string>(); entityTypes["account"] = "name"; entityTypes["contact"] = "fullname"; entityTypes["opportunity"] = "name"; #else entityTypes = PageEx.GetWebResourceData(); // The allowed lookup types for the connections - e.g. account, contact, opportunity. This must be passed as a data parameter to the webresource 'account=name&contact=fullname&opportunity=name id = ParentPage.Data.Entity.GetId(); logicalName = ParentPage.Data.Entity.GetEntityName(); #endif EntityReference parent = new EntityReference(new Guid(id), logicalName, null); vm = new ConnectionsViewModel(parent, entityTypes); // Bind Connections grid GridDataViewBinder contactGridDataBinder = new GridDataViewBinder(); List<Column> columns = GridDataViewBinder.ParseLayout(String.Format("{0},record1id,250,{1},record1roleid,250", ResourceStrings.ConnectTo, ResourceStrings.Role)); // Role2Id Column XrmLookupEditor.BindColumn(columns[1], vm.RoleSearchCommand, "connectionroleid", "name", ""); connectionsGrid = contactGridDataBinder.DataBindXrmGrid(vm.Connections, columns, "container", "pager", true, false); connectionsGrid.OnActiveCellChanged.Subscribe(delegate(EventData e, object data) { OnCellChangedEventData eventData = (OnCellChangedEventData)data; vm.SelectedConnection.SetValue((Connection)connectionsGrid.GetDataItem(eventData.Row)); }); // Let's not use a hover button because it get's n the way of the editable grid! //RowHoverPlugin rowButtons = new RowHoverPlugin("gridButtons"); //connectionsGrid.RegisterPlugin(rowButtons); ViewBase.RegisterViewModel(vm); OverrideMetadata(); jQuery.Window.Resize(OnResize); jQuery.OnDocumentReady(delegate() { OnResize(null); vm.Search(); }); }
public static void Init() { PageEx.MajorVersion = 2013; // Use the CRM2013/2015 styles vm = new ConnectionsViewModel(); ViewBase.RegisterViewModel(vm); GridDataViewBinder connectionsDataBinder = new GridDataViewBinder(); List<Column> columns = GridDataViewBinder.ParseLayout("Connect to, record1id,250,Role,record1roleid,250"); XrmLookupEditor.BindColumn(columns[1], vm.RoleSearchCommand, "connectionroleid", "name", ""); Grid connectionsGrid = connectionsDataBinder.DataBindXrmGrid(vm.Connections, columns, "container", "pager", true, false); ViewBase.RegisterViewModel(vm); jQuery.OnDocumentReady(delegate() { vm.Search(); }); }
public static void SetUpGrids(ScheduledJobsEditorViewModel vm) { // Create Scheduled Jobs Grid GridDataViewBinder jobsDataBinder = new GridDataViewBinder(); List<Column> jobCols = GridDataViewBinder.ParseLayout("dev1_name,Name,300,dev1_recurrancepattern,Pattern,300,createdon,Created On, 300"); jobsGrid = jobsDataBinder.DataBindXrmGrid(vm.JobsViewModel, jobCols, "jobsGrid", "jobsGridPager",false,false); GridDataViewBinder bulkDeleteDataBinder = new GridDataViewBinder(); List<Column> bulkDeleteCols = GridDataViewBinder.ParseLayout("name,Name,300,asyncoperation_statuscode,Status,100,asyncoperation_postponeuntil,Next Run,150,asyncoperation_recurrencepattern,Pattern,150,createdon,Created On,150"); bulkDeleteJobsGrid = bulkDeleteDataBinder.DataBindXrmGrid(vm.bulkDeleteJobsViewModel,bulkDeleteCols, "bulkDeleteJobGrid", "bulkDeleteJobGridPager",false, false); // Load first page vm.JobsViewModel.Refresh(); }
public static void init() { ContactsEditorViewModel vm = new ContactsEditorViewModel(); // Data Bind Grid List<Column> columns = GridDataViewBinder.ParseLayout("entityState,,20,firstname,First Name,200,lastname,Last Name,200,birthdate,Birth Date,200,accountrolecode,Account Role Code,200,numberofchildren,Number of Children,100,transactioncurrencyid,Currency,200,creditlimit,Credit Limit,100"); // Set Column formatters and editors columns[0].Formatter = delegate(int row, int cell, object value, Column columnDef, object dataContext) { EntityStates state = (EntityStates)value; return ((state == EntityStates.Changed) || (state == EntityStates.Created)) ? "<span class='grid-edit-indicator'></span>" : ""; }; // First Name Column XrmTextEditor.BindColumn(columns[1]); // Last Name Column XrmTextEditor.BindColumn(columns[2]); // Birth Date Column XrmDateEditor.BindColumn(columns[3], false); // Account Code Column XrmOptionSetEditor.BindColumn(columns[4], "contact", columns[4].Field, true); // Number of Children Column XrmNumberEditor.BindColumn(columns[5], 0, 100, 0); // Currency Column XrmLookupEditor.BindColumn(columns[6], vm.TransactionCurrencySearchCommand, "transactioncurrencyid", "currencyname", ""); // Credit Limit Column XrmMoneyEditor.BindColumn(columns[7], -10000, 10000); // Create Grid GridDataViewBinder contactGridDataBinder = new GridDataViewBinder(); Grid contactsGrid = contactGridDataBinder.DataBindXrmGrid(vm.Contacts, columns, "container", "pager",true,false); // Data Bind ViewBase.RegisterViewModel(vm); }
/// <summary> /// Adds a column that shows the state of the row as edited/new /// </summary> /// <param name="columns"></param> public static void AddEditIndicatorColumn(List <Column> columns) { GridDataViewBinder.AddColumn(columns, "", 20, "entityState") .Formatter = delegate(int row, int cell, object value, Column columnDef, object dataContext) { EntityStates state = (EntityStates)value; switch (state) { case EntityStates.Created: case EntityStates.Changed: return("<span class='grid-edit-indicator'></span>"); case EntityStates.ReadOnly: return("<span class='grid-readonly-indicator'></span>"); default: return(""); } }; }
public static void init() { MultiSearchViewModel vm = new MultiSearchViewModel(); PageEx.MajorVersion = 2013; // Create Grids FetchQuerySettings[] searches = vm.Config.GetItems(); int i = 0; foreach (FetchQuerySettings config in searches) { GridDataViewBinder dataViewBinder = new GridDataViewBinder(); Grid grid = dataViewBinder.DataBindXrmGrid(config.DataView, config.Columns, "grid" + i.ToString() + "container", "grid" + i.ToString() + "pager", true, false); dataViewBinder.BindClickHandler(grid); i++; } // Data Bind ViewBase.RegisterViewModel(vm); }
/// <summary> /// Data Binds the standard Slick.DataView /// </summary> /// <param name="columns"></param> /// <param name="dataView"></param> /// <returns></returns> public Grid DataBindDataViewGrid(DataView dataView, List <Column> columns, string gridId, string pagerId, bool editable, bool allowAddNewRow) { // Always add an empty column on the end for reszing purposes ArrayEx.Add(columns, new Column()); GridOptions gridOptions = new GridOptions(); gridOptions.EnableCellNavigation = true; gridOptions.AutoEdit = editable; gridOptions.Editable = editable; gridOptions.EnableAddRow = allowAddNewRow; // Set non-variable options gridOptions.RowHeight = 20; gridOptions.HeaderRowHeight = 25; gridOptions.EnableColumnReorder = false; CheckboxSelectColumn checkBoxSelector = null; if (AddCheckBoxSelectColumn) { CheckboxSelectColumnOptions checkboxOptions = new CheckboxSelectColumnOptions(); checkboxOptions.cssClass = "sparkle-checkbox-column"; // Add check box column checkBoxSelector = new CheckboxSelectColumn(checkboxOptions); Column checkBoxColumn = checkBoxSelector.GetColumnDefinition(); columns.Insert(0, checkBoxColumn); } Grid grid = new Grid("#" + gridId, dataView, columns, gridOptions); grid.RegisterPlugin(checkBoxSelector); dataView.OnRowsChanged.Subscribe(delegate(EventData e, object a) { // Only invalided the rows that have changed OnRowsChangedEventArgs args = (OnRowsChangedEventArgs)a; if (args != null && args.Rows != null) { grid.InvalidateRows(args.Rows); grid.Render(); } }); //AddValidation(grid, dataView); // Add resize event jQuery.Window.Resize(delegate(jQueryEvent e) { // Set each column to be non resizable while we do the resize GridDataViewBinder.FreezeColumns(grid, true); grid.ResizeCanvas(); // Restore the resizing GridDataViewBinder.FreezeColumns(grid, false); }); // Add Reset binding Action reset = delegate() { }; Script.Literal("{0}.reset={1}", dataView, reset); // Add Refresh button AddRefreshButton(gridId, (DataViewBase)(object)dataView); // Add Selection Model RowSelectionModelOptions selectionModelOptions = new RowSelectionModelOptions(); selectionModelOptions.SelectActiveRow = true; RowSelectionModel selectionModel = new RowSelectionModel(selectionModelOptions); grid.SetSelectionModel(selectionModel); // Set sorting Action <EventData, object> onSort = delegate(EventData e, object a) { SortColData args = (SortColData)a; //SortDir = args.SortAsc ? 1 : -1; _sortColumnName = args.SortCol.Field; dataView.Sort(Comparer, args.SortAsc); }; grid.OnSort.Subscribe(onSort); return(grid); }
public static void SetUpGrids(TimeSheetViewModel vm) { // 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, "Account", 300, "account"), vm.AccountSeachCommand, "accountid", "name", null); XrmLookupEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Regarding", 300, "regardingObjectId"), vm.RegardingObjectSearchCommand, "id", "displayName", null); XrmLookupEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Activity", 300, "activity"), vm.ActivitySearchCommand, "activityid", "subject", "activitytypecode"); string[] daysOfWeek = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun","Mon","Tue","Wed","Thu","Fri","Sat" }; int firstDayOfWeek = OrganizationServiceProxy.OrganizationSettings.WeekStartDayCode.Value.Value; GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek], 50, "day0"); GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 1], 50, "day1"); GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 2], 50, "day2"); GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 3], 50, "day3"); GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 4], 50, "day4"); GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 5], 50, "day5"); GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 6], 50, "day6"); GridDataViewBinder daysDataBinder = new GridDataViewBinder(); daysDataBinder.SelectActiveRow = true; daysDataBinder.AddCheckBoxSelectColumn = false; daysGrid = daysDataBinder.DataBindXrmGrid(daysDataView, columns, "timesheetGridContainer", null, true, true); // Set the totals row meta data daysDataView.OnGetItemMetaData += delegate(object item) { ItemMetaData metaData = new ItemMetaData(); DayEntry day = (DayEntry)item; if (day != null && day.isTotalRow) { metaData.Editor = delegate(EditorArguments args) { return null; }; metaData.Columns = new Dictionary<object, Column>(); metaData.Columns["Account"] = new Column("editor", null); metaData.Columns["Regarding"] = new Column("editor", null); metaData.Columns["Activity"] = new Column("editor", null); metaData.Formatter = delegate(int row, int cell, object value, Column columnDef, object dataContext) { switch (columnDef.Field) { case "account": case "regardingObjectId": return ""; case "activity": return "Total"; default: return XrmDurationEditor.Formatter(row, cell, value, columnDef, dataContext); } }; metaData.CssClasses = "days_total_row"; } else { metaData.Formatter = delegate(int row, int cell, object value, Column columnDef, object dataContext) { switch (columnDef.Field) { case "account": case "regardingObjectId": case "activity": return XrmLookupEditor.Formatter(row, cell, value, columnDef, dataContext); default: return XrmDurationEditor.Formatter(row, cell, value, columnDef, dataContext); } }; } return metaData; }; daysDataBinder.DataBindSelectionModel(daysGrid, daysDataView); // --------------------------------------- // Sessions Grid // --------------------------------------- DataViewBase sessionsDataView = vm.SessionDataView; List<Column> sessionGridCols = new List<Column>(); GridDataViewBinder.AddEditIndicatorColumn(sessionGridCols); XrmTextEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Activity", 300, "activitypointer_subject")).Editor = null; XrmDateEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Date", 100, "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", 70, "dev1_duration")); XrmTextEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Description", 300, "dev1_description")); GridDataViewBinder sessionsDataBinder = new GridDataViewBinder(); sessionsDataBinder.SelectActiveRow = false; sessionsDataBinder.AddCheckBoxSelectColumn = true; sessionsGrid = sessionsDataBinder.DataBindXrmGrid(sessionsDataView, sessionGridCols, "sessionsGridContainer", null, true, true); sessionsGrid.OnBeforeEditCell.Subscribe(delegate(EventData e, object args) { // Stop the row from being edited if locked Entity item = (Entity)((EditEventData)args).item; bool result = sessionsDataView.OnBeforeEdit(item); Script.Literal("return {0}", result); }); daysGrid.OnActiveCellChanged.Subscribe(delegate(EventData e, object args) { CellSelection activeCell = daysGrid.GetActiveCell(); if (activeCell != null) { if (activeCell.Cell < StartDaysColumnIndex) { // Whole activity is selected vm.Days.SelectedDay = null; } else { vm.Days.SelectedDay = activeCell.Cell - (StartDaysColumnIndex-1); } } }); }
private static void InitLocalisedContent() { Dictionary<string, string> parameters; string id; string logicalName; int pageSize = 10; string defaultView=null; #if DEBUG id = "C489707F-B5E2-E411-80D5-080027846324"; logicalName = "account"; parameters = new Dictionary<string, string>(); #else parameters = PageEx.GetWebResourceData(); // The allowed lookup types for the connections - e.g. account, contact, opportunity. This must be passed as a data parameter to the webresource 'account=name&contact=fullname&opportunity=name id = ParentPage.Data.Entity.GetId(); logicalName = ParentPage.Data.Entity.GetEntityName(); ParentPage.Data.Entity.AddOnSave(CheckForSaved); #endif EntityReference parent = new EntityReference(new Guid(id), logicalName, null); string entities = "account,contact,opportunity,systemuser"; foreach (string key in parameters.Keys) { switch (key.ToLowerCase()) { case "entities": entities = parameters[key]; break; case "pageSize": pageSize = int.Parse(parameters[key]); break; case "view": defaultView = parameters[key]; break; case "category": category = int.Parse(parameters[key]); break; } } // Get the view QueryParser queryParser = new QueryParser(new string[] {"connection"}); queryParser.GetView("connection", defaultView); queryParser.QueryMetadata(); EntityQuery connectionViews = queryParser.EntityLookup["connection"]; string viewName = connectionViews.Views.Keys[0]; FetchQuerySettings view = connectionViews.Views[viewName]; vm = new ConnectionsViewModel(parent, entities.Split(","), pageSize, view); // Bind Connections grid GridDataViewBinder connectionsGridDataBinder = new GridDataViewBinder(); List<Column> columns = view.Columns; // Role2Id Column - provided it is in the view! foreach (Column col in columns) { switch (col.Field) { case "record2roleid": XrmLookupEditor.BindColumn(col, vm.RoleSearchCommand, "connectionroleid", "name,category", ""); break; case "description": XrmTextEditor.BindColumn(col); break; case "effectivestart": case "effectiveend": XrmDateEditor.BindColumn(col, true); break; } } connectionsGrid = connectionsGridDataBinder.DataBindXrmGrid(vm.Connections, columns, "container", "pager", true, false); connectionsGrid.OnActiveCellChanged.Subscribe(delegate(EventData e, object data) { OnCellChangedEventData eventData = (OnCellChangedEventData)data; vm.SelectedConnection.SetValue((Connection)connectionsGrid.GetDataItem(eventData.Row)); }); connectionsGridDataBinder.BindClickHandler(connectionsGrid); // Let's not use a hover button because it get's in the way of the editable grid! //RowHoverPlugin rowButtons = new RowHoverPlugin("gridButtons"); //connectionsGrid.RegisterPlugin(rowButtons); ViewBase.RegisterViewModel(vm); OverrideMetadata(); jQuery.Window.Resize(OnResize); jQuery.OnDocumentReady(delegate() { OnResize(null); vm.Search(); }); }
public static void init() { DataGroupingViewModel vm = new DataGroupingViewModel(); NumberFormatInfo numberFormatInfo = NumberEx.GetNumberFormatInfo(); numberFormatInfo.MinValue = 0; numberFormatInfo.MaxValue = 1000; numberFormatInfo.Precision = 2; BooleanBindingOptions boolFormatInfo = new BooleanBindingOptions(); boolFormatInfo.FalseOptionDisplayName = "No"; boolFormatInfo.TrueOptionDisplayName = "Yes"; // Add Columns SubTotalsFormatterDelegate sumTotalsFormatterDelegate = SumTotalsFormatter; SubTotalsFormatterDelegate avgTotalsFormatterDelegate = AvgTotalsFormatter; FormatterDelegate percentageFormatter = XrmNumberEditor.Formatter; FormatterDelegate checkboxFormatter = XrmBooleanEditor.Formatter; List<Column> columns = new List<Column>( new Column( ColumnProperties.Id, "sel", ColumnProperties.Name, "#", ColumnProperties.Field, "num", ColumnProperties.CssClass, "cell-selection", ColumnProperties.Width, 40, ColumnProperties.Resizable, false, ColumnProperties.Selectable, false, ColumnProperties.Focusable, false), new Column( ColumnProperties.Id, "title", ColumnProperties.Name, "Title", ColumnProperties.Field, "title", ColumnProperties.Width, 70, ColumnProperties.MinWidth, 50, ColumnProperties.CssClass, "cell-title", ColumnProperties.Sortable, true, ColumnProperties.Editor, XrmTextEditor.TextEditor), new Column( ColumnProperties.Id, "duration", ColumnProperties.Name, "Duration", ColumnProperties.Field, "duration", ColumnProperties.Width, 70, ColumnProperties.Sortable, true, ColumnProperties.GroupTotalsFormatter, sumTotalsFormatterDelegate), new Column( ColumnProperties.Id, "%", ColumnProperties.Name, "% Complete", ColumnProperties.Field, "percentComplete", ColumnProperties.Width, 80, ColumnProperties.Formatter, percentageFormatter, ColumnProperties.Options, numberFormatInfo, ColumnProperties.Sortable, true, ColumnProperties.GroupTotalsFormatter, avgTotalsFormatterDelegate), new Column( ColumnProperties.Id, "start", ColumnProperties.Name, "Start", ColumnProperties.Field, "start", ColumnProperties.MinWidth, 60, ColumnProperties.Sortable, true), new Column( ColumnProperties.Id, "finish", ColumnProperties.Name, "Finish", ColumnProperties.Field, "finish", ColumnProperties.MinWidth, 60, ColumnProperties.Sortable, true), new Column( ColumnProperties.Id, "cost", ColumnProperties.Name, "Cost", ColumnProperties.Field, "cost", ColumnProperties.Width, 90, ColumnProperties.Sortable, true, ColumnProperties.GroupTotalsFormatter, sumTotalsFormatterDelegate), new Column( ColumnProperties.Id, "effort-driven", ColumnProperties.Name, "Effort Driven", ColumnProperties.Width, 80, ColumnProperties.MinWidth, 20, ColumnProperties.CssClass, "cell-effort-driven", ColumnProperties.Field, "effortDriven", ColumnProperties.Formatter, checkboxFormatter, ColumnProperties.Options, boolFormatInfo, ColumnProperties.Sortable, true) ); GridOptions options = new GridOptions(); options.EnableCellNavigation = true; options.Editable = true; DataViewBase view = (DataViewBase)(object)vm.Projects; GridDataViewBinder binder = new GridDataViewBinder(); Grid grid = binder.DataBindDataViewGrid(vm.Projects, columns, "myGrid", null, true, false); // register the group item metadata provider to add expand/collapse group handlers grid.RegisterPlugin(new GroupItemMetadataProvider()); // 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; } } }); }