Exemplo n.º 1
0
        public void AddValidation(Grid grid, DataViewBase dataView)
        {
            Action <string, Column> setValidator = delegate(string attributeName, Column col)
            {
                col.Validator = delegate(object value, object item)
                {
                    Func <string, GridValidatorDelegate> indexer = dataView.GridValidationIndexer();
                    GridValidatorDelegate validationRule         = indexer(attributeName);
                    if (validationRule != null)
                    {
                        return(validationRule(value, item));
                    }
                    else
                    {
                        ValidationResult result = new ValidationResult();
                        result.Valid = true;
                        return(result);
                    }
                };
            };

            if (dataView.GridValidationIndexer() != null)
            {
                foreach (Column col in grid.GetColumns())
                {
                    string fieldName = col.Field;
                    setValidator(fieldName, col);
                }
            }
        }
Exemplo n.º 2
0
        public Grid DataBindXrmGrid(DataViewBase 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.ForceFitColumns     = true;
            gridOptions.EnableColumnReorder = false;

            CheckboxSelectColumnOptions checkboxOptions = new CheckboxSelectColumnOptions();

            checkboxOptions.cssClass = "sparkle-checkbox-column";

            // Add check box column
            CheckboxSelectColumn checkBoxSelector = new CheckboxSelectColumn(checkboxOptions);
            Column checkBoxColumn = checkBoxSelector.GetColumnDefinition();

            columns.Insert(0, checkBoxColumn);


            Grid grid = new Grid("#" + gridId, dataView, columns, gridOptions);

            grid.RegisterPlugin(checkBoxSelector);
            this.DataBindSelectionModel(grid, dataView);
            if (!string.IsNullOrEmpty(pagerId))
            {
                CrmPagerControl pager = new CrmPagerControl(dataView, grid, jQuery.Select("#" + pagerId));
            }
            DataBindEvents(grid, dataView, gridId);
            AddValidation(grid, dataView);
            AddRefreshButton(gridId, dataView);

            // Add resize event
            jQuery.Window.Resize(delegate(jQueryEvent e){
                // Set each column to be non resizable while we do the resize
                FreezeColumns(grid, true);
                grid.ResizeCanvas();
                // Restore the resizing
                FreezeColumns(grid, false);
            });

            dataView.OnDataLoaded.Subscribe(delegate(EventData e, object o)
            {
                FreezeColumns(grid, false);
            });
            return(grid);
        }
Exemplo n.º 3
0
 public CrmPagerControl(DataViewBase dataView, Grid grid, jQueryObject container)
 {
     _dataView  = dataView;
     _grid      = grid;
     _container = container;
     jQuery.OnDocumentReady(delegate()
     {
         init();
     });
 }
Exemplo n.º 4
0
 public CrmPagerControl(DataViewBase dataView, Grid grid, jQueryObject container)
 {
     _dataView = dataView;
     _grid = grid;
     _container = container;
     jQuery.OnDocumentReady(delegate()
     {
         init();
     });
 }
Exemplo n.º 5
0
        public void AddRefreshButton(string gridId, DataViewBase dataView)
        {
            jQueryObject gridDiv       = jQuery.Select("#" + gridId);
            jQueryObject refreshButton = jQuery.FromHtml("<div id='refreshButton' class='sparkle-grid-refresh-button' style='left: auto; right: 0px; display: inline;'><a href='#' id='refreshButtonLink' tabindex='0'><span id='grid_refresh' class='sparkle-grid-refresh-button-img' style='cursor:pointer'></span></a></div>").AppendTo(gridDiv);

            refreshButton.Find("#refreshButtonLink").Click(delegate(jQueryEvent e)
            {
                dataView.Reset();
                dataView.Refresh();
            });
        }
Exemplo n.º 6
0
        public void DataBindSelectionModel(Grid grid, DataViewBase dataView)
        {
            // Set up selection model if needed
            // Create selection model

            RowSelectionModelOptions selectionModelOptions = new RowSelectionModelOptions();

            selectionModelOptions.SelectActiveRow = true;
            RowSelectionModel selectionModel = new RowSelectionModel(selectionModelOptions);

            // Bind two way sync of selected rows
            // NOTE: the row index on the grid is not the row index in the data view due to paging
            bool inHandler = false;

            selectionModel.OnSelectedRangesChanged.Subscribe(delegate(EventData e, object args)
            {
                if (inHandler)
                {
                    return;
                }
                inHandler = true;
                dataView.RaiseOnSelectedRowsChanged((SelectedRange[])args);
                inHandler = false;
            });
            dataView.OnSelectedRowsChanged += delegate()
            {
                if (inHandler)
                {
                    return;
                }
                inHandler = true;
                SelectedRange[] ranges       = dataView.GetSelectedRows();
                int[]           selectedRows = new int[ranges.Length];
                for (int i = 0; i < selectedRows.Length; i++)
                {
                    selectedRows[i] = ranges[i].FromRow.Value;
                }

                grid.SetSelectedRows(selectedRows);


                inHandler = false;
            };
            grid.SetSelectionModel(selectionModel);
        }
Exemplo n.º 7
0
        public void DataBindEvents(Grid grid, DataViewBase dataView, string gridContainerDivId)
        {
            // Data Sorting
            grid.OnSort.Subscribe(delegate(EventData o, Object item)
            {
                SortColData sorting = (SortColData)item;
                dataView.Sort(sorting);
                grid.Invalidate();
                grid.Render();
            });

            // Session Grid DataBinding
            grid.OnAddNewRow.Subscribe(delegate(EventData o, Object item)
            {
                EditEventData data = (EditEventData)item;
                dataView.AddItem(data.item);


                Column column = data.column;
                grid.InvalidateRow(dataView.GetLength() - 1);

                grid.UpdateRowCount();
                grid.Render();
            });

            dataView.OnRowsChanged.Subscribe(delegate(EventData e, object a)
            {
                OnRowsChangedEventArgs args = (OnRowsChangedEventArgs)a;
                if (args != null && args.Rows != null)
                {
                    grid.InvalidateRows(args.Rows);
                    grid.Render();
                }
                else
                {
                    // Assume that a new row has been added
                    grid.InvalidateRow(dataView.GetLength());
                    grid.UpdateRowCount();
                    grid.Render();
                }
                grid.ResizeCanvas();
            });


            jQueryObject loadingIndicator = null;


            // Wire up the validation error
            jQueryObject validationIndicator = null;
            Action <EventData, object> clearValidationIndicator = delegate(EventData e, object a)
            {
                if (validationIndicator != null)
                {
                    validationIndicator.Hide();
                    validationIndicator.Remove();
                }
            };

            grid.OnCellChange.Subscribe(clearValidationIndicator);
            grid.OnActiveCellChanged.Subscribe(clearValidationIndicator);
            grid.OnBeforeCellEditorDestroy.Subscribe(clearValidationIndicator);

            grid.OnValidationError.Subscribe(delegate(EventData e, object a)
            {
                ValidationEventArgs args          = (ValidationEventArgs)a;
                ValidationResult validationResult = (ValidationResult)args.ValidationResults;
                jQueryObject activeCellNode       = (jQueryObject)args.CellNode;
                object editor       = args.Editor;
                string errorMessage = "";
                if (validationResult.Message != null)
                {
                    errorMessage = validationResult.Message;
                }
                bool valid_result = validationResult.Valid;

                // Add the message to the tooltip on the cell
                if (!valid_result)
                {
                    jQuery.FromObject(activeCellNode).Attribute("title", errorMessage);
                    clearValidationIndicator(e, a);
                    validationIndicator = jQuery.FromHtml("<div class='popup-box-container'><div width='16px' height='16px' class='sparkle-imagestrip-inlineedit_warning popup-box-icon' alt='Error' id='icon'/><div class='popup-box validation-text'/></div>").AppendTo(Document.Body);
                    validationIndicator.Find(".validation-text").Text(errorMessage);

                    string colisionPosition = ValidationPopupUseFitPosition ? "fit fit" : "none none";
                    Script.Literal(@"{0}.position({{
                                            my: 'left bottom',
                                            at: 'left top',
                                            collision: '{2}',
                                            of: {1}
                                        }})
                                        .show({{
                                        effect: 'blind'
                                        }})
                                        .delay( 500000 )
                                        .hide({{
                                            effect: 'fade',
                                            duration: 'slow', 
                                        }},
                                            function() {{
                                                $( this ).remove();
                                                
                                            }});
                                        ", validationIndicator, activeCellNode, colisionPosition);
                }
                else
                {
                    clearValidationIndicator(e, a);
                    jQuery.FromObject(activeCellNode).Attribute("title", "");
                }
            });

            // Wire up the loading spinner
            dataView.OnDataLoading.Subscribe(delegate(EventData e, object a)
            {
                loadingIndicator = ShowLoadingIndicator(loadingIndicator, gridContainerDivId);
                foreach (Column col in grid.GetColumns())
                {
                    if (col.MaxWidth != null)
                    {
                        col.MaxWidth = 400;
                    }
                }
            });

            dataView.OnDataLoaded.Subscribe(delegate(EventData e, object a)
            {
                DataLoadedNotifyEventArgs args = (DataLoadedNotifyEventArgs)a;
                if (args != null)
                {
                    if (args.ErrorMessage == null)
                    {
                        for (int i = args.From; i <= args.To; i++)
                        {
                            grid.InvalidateRow(i);
                        }
                        grid.UpdateRowCount();
                        grid.Render();
                    }
                    else
                    {
                        Script.Alert("There was a problem refreshing the grid.\nPlease contact your system administrator:\n" + args.ErrorMessage);
                    }
                }
                if (loadingIndicator != null)
                {
                    loadingIndicator.Plugin <jQueryBlockUI>().Unblock();
                }
            });

            // Wire up edit complete to property changed
            grid.OnCellChange.Subscribe(delegate(EventData e, object data)
            {
                OnCellChangedEventData eventData = (OnCellChangedEventData)data;
                dataView.RaisePropertyChanged("");
            });
        }
Exemplo n.º 8
0
        public void DataBindSelectionModel(Grid grid, DataViewBase dataView)
        {
            // Set up selection model if needed
            // Create selection model

            RowSelectionModelOptions selectionModelOptions = new RowSelectionModelOptions();

            selectionModelOptions.SelectActiveRow = SelectActiveRow;
            selectionModelOptions.MultiRowSelect  = this.MultiSelect;
            RowSelectionModel selectionModel = new RowSelectionModel(selectionModelOptions);

            // Bind two way sync of selected rows
            // NOTE: the row index on the grid is not the row index in the data view due to paging
            bool inHandler = false;

            selectionModel.OnSelectedRangesChanged.Subscribe(delegate(EventData e, object args)
            {
                //if (grid.GetEditorLock().IsActive())
                //{
                //    e.StopPropagation();
                //    return;
                //}
                if (inHandler)
                {
                    return;
                }
                inHandler = true;
                // Has the selected row changeD?
                SelectedRange[] selectedRows    = dataView.GetSelectedRows();
                SelectedRange[] newSelectedRows = (SelectedRange[])args;
                bool changed = selectedRows.Length != newSelectedRows.Length;
                if (!changed)
                {
                    // Compare the actual selected rows
                    for (int i = 0; i < selectedRows.Length; i++)
                    {
                        if (selectedRows[i].FromRow != newSelectedRows[i].FromRow)
                        {
                            changed = true;
                            break;
                        }
                    }
                }



                if (changed)
                {
                    dataView.RaiseOnSelectedRowsChanged(newSelectedRows);
                }
                inHandler = false;
            });
            dataView.OnSelectedRowsChanged += delegate()
            {
                //if (grid.GetEditorLock().IsActive())
                //    return;
                if (inHandler)
                {
                    return;
                }
                inHandler = true;
                SelectedRange[] ranges       = dataView.GetSelectedRows();
                int[]           selectedRows = new int[ranges.Length];
                for (int i = 0; i < selectedRows.Length; i++)
                {
                    selectedRows[i] = ranges[i].FromRow.Value;
                }

                grid.SetSelectedRows(selectedRows);


                inHandler = false;
            };
            grid.SetSelectionModel(selectionModel);
        }
Exemplo n.º 9
0
        /// <summary>
        /// DataBinds a DataView that inherits from DataViewBase
        /// 
        /// </summary>
        /// <param name="dataView"></param>
        /// <param name="columns"></param>
        /// <param name="gridId"></param>
        /// <param name="pagerId"></param>
        /// <param name="editable"></param>
        /// <param name="allowAddNewRow"></param>
        /// <returns></returns>
        public Grid DataBindXrmGrid(DataViewBase 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 = PageEx.MajorVersion==2013 ? 30 : 20;
            gridOptions.HeaderRowHeight = 25;
            //gridOptions.ForceFitColumns = true;
            gridOptions.EnableColumnReorder = false;

            CheckboxSelectColumnOptions checkboxOptions = new CheckboxSelectColumnOptions();
            checkboxOptions.cssClass = "sparkle-checkbox-column";

            // Add check box column
            CheckboxSelectColumn checkBoxSelector = new CheckboxSelectColumn(checkboxOptions);
            Column checkBoxColumn = checkBoxSelector.GetColumnDefinition();
            columns.Insert(0, checkBoxColumn);

            Grid grid = new Grid("#" + gridId, dataView, columns, gridOptions);

            grid.RegisterPlugin(checkBoxSelector);
            this.DataBindSelectionModel(grid, dataView);
            if (!string.IsNullOrEmpty(pagerId))
            {
                CrmPagerControl pager = new CrmPagerControl(dataView, grid, jQuery.Select("#" + pagerId));
            }
            DataBindEvents(grid, dataView, gridId);
            AddValidation(grid, dataView);
            AddRefreshButton(gridId, dataView);

            // Add resize event
            jQuery.Window.Resize(delegate(jQueryEvent e){
                // Set each column to be non resizable while we do the resize
                FreezeColumns(grid, true);
                grid.ResizeCanvas();
                // Restore the resizing
                FreezeColumns(grid, false);
            });

            dataView.OnDataLoaded.Subscribe(delegate(EventData e, object o)
            {
                FreezeColumns(grid,false);
            });
            _grid = grid;
            return grid;
        }
Exemplo n.º 10
0
        public void DataBindSelectionModel(Grid grid, DataViewBase dataView)
        {
            // Set up selection model if needed
            // Create selection model

            RowSelectionModelOptions selectionModelOptions = new RowSelectionModelOptions();
            selectionModelOptions.SelectActiveRow = true;
            RowSelectionModel selectionModel = new RowSelectionModel(selectionModelOptions);

            // Bind two way sync of selected rows
            // NOTE: the row index on the grid is not the row index in the data view due to paging
            bool inHandler = false;
            selectionModel.OnSelectedRangesChanged.Subscribe(delegate(EventData e, object args)
            {
                if (inHandler)
                    return;
                inHandler = true;
                dataView.RaiseOnSelectedRowsChanged((SelectedRange[])args);
                inHandler = false;
            });
            dataView.OnSelectedRowsChanged+=delegate()
            {
                if (inHandler)
                    return;
                inHandler = true;
                SelectedRange[] ranges = dataView.GetSelectedRows();
                int[] selectedRows = new int[ranges.Length];
                for (int i=0;i<selectedRows.Length;i++)
                {
                    selectedRows[i] = ranges[i].FromRow.Value;
                }

                grid.SetSelectedRows(selectedRows);

                inHandler = false;
            };
            grid.SetSelectionModel(selectionModel);
        }
Exemplo n.º 11
0
        public void DataBindEvents(Grid grid,DataViewBase dataView,string gridContainerDivId)
        {
            // Data Sorting
            grid.OnSort.Subscribe(delegate(EventData o, Object item)
            {
                SortColData sorting = (SortColData)item;
                dataView.Sort(sorting);
                grid.Invalidate();
                grid.Render();

            });

            // Session Grid DataBinding
            grid.OnAddNewRow.Subscribe(delegate(EventData o, Object item)
            {
                EditEventData data = (EditEventData)item;
                dataView.AddItem(data.item);

                Column column = data.column;
                grid.InvalidateRow(dataView.GetLength() - 1);

                grid.UpdateRowCount();
                grid.Render();

            });

            dataView.OnRowsChanged.Subscribe(delegate(EventData e, object a)
            {

                OnRowsChangedEventArgs args = (OnRowsChangedEventArgs)a;
                if (args != null && args.Rows != null)
                {
                    grid.InvalidateRows(args.Rows);
                    grid.Render();
                }
                else
                {
                    // Assume that a new row has been added
                    grid.InvalidateRow(dataView.GetLength());
                    grid.UpdateRowCount();
                    grid.Render();
                }

            });

            jQueryObject loadingIndicator = null;

            // Wire up the validation error
            jQueryObject validationIndicator = null;
            Action<EventData, object> clearValidationIndicator = delegate(EventData e, object a)
            {
                if (validationIndicator != null)
                {
                    validationIndicator.Hide();
                    validationIndicator.Remove();
                }
            };

            grid.OnCellChange.Subscribe(clearValidationIndicator);
            grid.OnActiveCellChanged.Subscribe(clearValidationIndicator);
            grid.OnBeforeCellEditorDestroy.Subscribe(clearValidationIndicator);

            grid.OnValidationError.Subscribe(delegate(EventData e, object a)
            {
                ValidationEventArgs args = (ValidationEventArgs)a;
                ValidationResult validationResult = (ValidationResult)args.ValidationResults;
                jQueryObject activeCellNode = (jQueryObject)args.CellNode;
                object editor = args.Editor;
                string errorMessage = "";
                if (validationResult.Message != null)
                    errorMessage = validationResult.Message;
                bool valid_result = validationResult.Valid;

                // Add the message to the tooltip on the cell
                if (!valid_result)
                {
                    jQuery.FromObject(activeCellNode).Attribute("title", errorMessage);
                    clearValidationIndicator(e,a);
                    validationIndicator = jQuery.FromHtml("<div class='popup-box-container'><div width='16px' height='16px' class='sparkle-imagestrip-inlineedit_warning popup-box-icon' alt='Error' id='icon'/><div class='popup-box validation-text'/></div>").AppendTo(Document.Body);
                    validationIndicator.Find(".validation-text").Text(errorMessage);

                    Script.Literal(@"{0}.position({{
                                            my: 'left bottom',
                                            at: 'left top',
                                            collision: 'fit fit',
                                            of: {1}
                                        }})
                                        .show({{
                                        effect: 'blind'
                                        }})
                                        .delay( 500000 )
                                        .hide({{
                                            effect: 'fade',
                                            duration: 'slow',
                                        }},
                                            function() {{
                                                $( this ).remove();

                                            }});
                                        ", validationIndicator, activeCellNode);

                }
                else
                {
                    clearValidationIndicator(e, a);
                    jQuery.FromObject(activeCellNode).Attribute("title", "");
                }
            });

            // Wire up the loading spinner
            dataView.OnDataLoading.Subscribe(delegate(EventData e, object a)
            {

                loadingIndicator = ShowLoadingIndicator(loadingIndicator, gridContainerDivId);
                foreach (Column col in grid.GetColumns())
                {
                    if (col.MaxWidth != null)
                        col.MaxWidth = 400;
                }

            });

            dataView.OnDataLoaded.Subscribe(delegate(EventData e, object a)
            {

                DataLoadedNotifyEventArgs args = (DataLoadedNotifyEventArgs)a;
                if (args.ErrorMessage == null)
                {
                    for (int i = args.From; i <= args.To; i++)
                    {
                        grid.InvalidateRow(i);
                    }
                    grid.UpdateRowCount();
                    grid.Render();
                }
                else
                    Script.Alert("There was a problem refreshing the grid.\nPlease contact your system administrator:\n" + args.ErrorMessage);

                if (loadingIndicator != null)
                    loadingIndicator.Plugin<jQueryBlockUI>().Unblock();
            });

            // Wire up edit complete to property changed
            grid.OnCellChange.Subscribe(delegate(EventData e, object data)
            {
                OnCellChangedEventData eventData = (OnCellChangedEventData)data;
                dataView.RaisePropertyChanged("");

            });
        }
Exemplo n.º 12
0
        public void AddValidation(Grid grid, DataViewBase dataView)
        {
            Action<string, Column> setValidator = delegate(string attributeName, Column col)
            {
                col.Validator = delegate(object value, object item)
                {
                    Func<string,GridValidatorDelegate> indexer = dataView.GridValidationIndexer();
                    GridValidatorDelegate validationRule = indexer(attributeName);
                    if (validationRule != null)
                        return validationRule(value, item);
                    else
                    {
                        ValidationResult result = new ValidationResult();
                        result.Valid = true;
                        return result;
                    }
                };
            };

            if (dataView.GridValidationIndexer() != null)
            {
                foreach (Column col in grid.GetColumns())
                {
                    string fieldName = col.Field;
                    setValidator(fieldName, col);
                }
            }
        }
Exemplo n.º 13
0
 public void AddRefreshButton(string gridId, DataViewBase dataView)
 {
     jQueryObject gridDiv = jQuery.Select("#" + gridId);
     jQueryObject refreshButton = jQuery.FromHtml("<div id='refreshButton' class='sparkle-grid-refresh-button' style='left: auto; right: 0px; display: inline;'><a href='#' id='refreshButtonLink' tabindex='0'><img id='grid_refresh' src='../../sparkle_/css/images/transparent_spacer.gif' class='sparkle-grid-refresh-button-img' style='cursor:pointer' alt='Refresh list' title='Refresh list'></a></div>").AppendTo(gridDiv);
     refreshButton.Find("#refreshButtonLink").Click(delegate(jQueryEvent e)
     {
         dataView.Reset();
         dataView.Refresh();
     });
 }
Exemplo n.º 14
0
        public void DataBindSelectionModel(Grid grid, DataViewBase dataView)
        {
            // Set up selection model if needed
            // Create selection model

            RowSelectionModelOptions selectionModelOptions = new RowSelectionModelOptions();
            selectionModelOptions.SelectActiveRow = SelectActiveRow;
            selectionModelOptions.MultiRowSelect = this.MultiSelect;
            RowSelectionModel selectionModel = new RowSelectionModel(selectionModelOptions);

            // Bind two way sync of selected rows
            // NOTE: the row index on the grid is not the row index in the data view due to paging
            bool inHandler = false;
            selectionModel.OnSelectedRangesChanged.Subscribe(delegate(EventData e, object args)
            {
                //if (grid.GetEditorLock().IsActive())
                //{
                //    e.StopPropagation();
                //    return;
                //}
                if (inHandler)
                    return;
                inHandler = true;
                // Has the selected row changeD?
                SelectedRange[] selectedRows = dataView.GetSelectedRows();
                SelectedRange[] newSelectedRows = (SelectedRange[])args;
                bool changed = selectedRows.Length!=newSelectedRows.Length;
                if (!changed)
                {
                    // Compare the actual selected rows
                    for (int i = 0; i < selectedRows.Length; i++)
                    {
                        if (selectedRows[i].FromRow!=newSelectedRows[i].FromRow)
                        {
                            changed = true;
                            break;
                        }
                    }

                }

                if (changed)
                {
                    dataView.RaiseOnSelectedRowsChanged(newSelectedRows);
                }
                inHandler = false;
            });
            dataView.OnSelectedRowsChanged+=delegate()
            {
                //if (grid.GetEditorLock().IsActive())
                //    return;
                if (inHandler)
                    return;
                inHandler = true;
                SelectedRange[] ranges = dataView.GetSelectedRows();
                int[] selectedRows = new int[ranges.Length];
                for (int i=0;i<selectedRows.Length;i++)
                {
                    selectedRows[i] = ranges[i].FromRow.Value;
                }

                grid.SetSelectedRows(selectedRows);

                inHandler = false;
            };
            grid.SetSelectionModel(selectionModel);
        }