AngularJS DataGrid Component - Markup structure for Angular DataGrid

clock January 31, 2016 00:40 by author htmltreegrid

If you have looked at our demo page, you already know that HTMLTreeGrid is arguably among the most powerful datagrid options available for JavaScript SPA developers. With our integration with Angular, we expose the power of our product to developers of Angular apps in a way that feels natural. 

Angular JS is one of the most widely used framework among our customer base. React is catching up fast, and with Angular 2 being such a major rewrite, things are moving very fast in this arena. We are also working on a React component that wraps the HTMLTreeGrid, but that is a subject for another blog post. 

Today, we want to talk about our offering specifically as it relates to angular 1.x. 

One of the most powerful features of Angular is the ability to define all markup in the HTML (this becomes your 'view' in MVC). Almost all other third party components that integrate with angular do it in a way that defeats the purpose of Angular's elegance.

For example, you will see them have a directive like this (Note that there is a ton of JavaScript code JUST to do the configuration of the grid - this makes it a lot harder to understand the HTML markup and how it relates to the actual grid structure):

 

<!--THIS PART GOES SOMEWHERE BURIED IN YOUR VIEW HIERARCY-->
<div ng-app="app" ng-controller="MyCtrl">
<div third-party--grid-component component-options="componentOptions" />
</div>
<!--THIS PART GOES SOMEWHERE BURIED IN YOUR SCRIPTS-->
<script>
angular.module("app", [ "thirdPartyDirective" ]).controller("MyCtrl", function($scope) {
$scope.componentOptions = {
gridOption1 : "val1",
gridOption2 : "val2",
gridOption3 : "val3",
columns : [
{
columnOption1 : "val1",
columnOption2 : "val2",
columnOption3 : "val3",
},
{
columnOption1 : "val1",
columnOption2 : "val2",
columnOption3 : "val3",
}
]
};
});
</script>

Now contrast this with our Angular Datagrid declaration
<html>
<body> ..rest of the html
<div id="gridContainer" fd-grid="" ng-model="gridOptions" style="height: 725px;width: 100%;"...>
<level xirow-Height="49">
<columns>
<column xidata-Field="id" xiheader-Text="ID" xicolumn-Width-Mode="fixed" xiwidth="150" />
            <column xidata-Field="City Name" xiheader-Text="City Name" />
        </columns>
</level>
</div>
... rest of the html
Do you see the difference? Our Angular markup is clean, self contained, and requires very little JavaScript -
everything is loaded straight from the view which makes Clear separation of presentation and logic possible.


Another nice thing about our product is we hate to 'reinvent the wheel'. 
We rely on well established frameworks, plugins, and libraries that our customers are already using. 
For example, all of our UI is built using either jQuery UI, EXT, or DOJO 
in a plugin mechansim - (which allowed us to recently and quite easily add integration with Bootstrap).

If you like what you see, feel free to check out a few examples that use our AngularJS integration directive : 
http://blog.htmltreegrid.com/post/Angular-JS-Support.aspx


Inner Level Toolbars with v2.1

clock January 30, 2016 06:03 by author htmltreegrid

With the recent 2.1 release, we fixed a bug that is actually causing behavior that is different from the previous version. The behavior now is the correct one, but customers are used to the older behavior.

 

Here is a question we got: 

Question : With the new minified jquery file in with our existing treegrid files we noticed that in our grids which use nested hierarchical data the pager header shows up at the bottom of each nested level where as previously it did not. We aren't doing any paging but are using the forcePager attribute to show the icons for filtering and exporting. 

Solution:

This was actually a bug fix for another customer. If forcePagerRow is set to true, it is supposed to render a pager at each level. What you can do is set forcePagerRow=false at inner levels.  If you have dynamiclevels, you can set it in an event handler:

<grid dynamicLevelCreated="dynamicLevelsCreated(event)"

                  function dynamicLevelsCreated(event) {

                        if(event.level.getNestDepth()>1){

                             event.level.forcePagerRow=false;

                        }

 

                  }

 




HTMLTreeGrid - version 2.1 released

clock January 1, 2016 03:03 by author htmltreegrid

As we close out a terrific 2015 and ring in 2016, we have been hard at work here at HTMLTreeGrid wrapping up our newest release 2.1. As with the past couple releases, this one is huge as well, and the full scope of this release has been broken into almost half a dozen individual blog posts that we've been publishing over the past few weeks.

With no further ado, presenting HTMLTreeGrid v2.1:





  • Bug Fixes

    • Fixed issue with drag and drop enabled grids having scrolling issues with column resizing

    • Item filters setValue bugfix

    • Issue with scrollbar being shown when not necessary

    • Fixed issue with processSort with multiple column sort only the last sort was being added

    • Fixed issue with renderer height calculation for variable row heights. (When variableRowHeightUseRendererForCalculation = true)

    • Jquery adapter - fix issue with positioning – this caused the MSCB and the popups to render outside the default middle of the screen settings (and the MSCB dropdown to display below the screen)

    • MSCB added fix for this.allUnchecked not being updated correctly

    • footerOperationPrecision was being ignored

    • Fix for unnecessary horizontal scrollbar when scrollpolicy=auto

    • Fix for when headerText is numeric only, export does not work

    • Fix for format="currency" or format="number" formatterPrecision was being ignored.

    • Fix for Combobox data provider and selected issue change

    • Renamed hasHey to hasKey in KeyValuePairCollection

    • Fixed PdfExporter.js so it closes the popup window after export

    • IE 10 bug fix for HTMLTreeGrid not scrolling on select all

    • Bug fix for resize sometimes resizing the wrong column

    • Fix for filesaver and removal of popup after export

    • Close export options view when export is done

    • Support for disabling items in ComboBox

    • Bug fix for FlexDataGrid.js focus issue

    • Fixed CsvExporter.js to export numbers with a tab ahead

    • ensureAutoAjustHeight and horizontalScrollBar causes issues (Auto adjust does not account for scrollbar).

    • Fix to prevent text characters from being entered into Numeric RangeBox

    • Fix for XML Exporter not writing out footer.

    • Fix for when date picker opens in middle of edit, the textbox disappears.

    • Bug Fix to close the mscb when mouse down outside instead of mouseup

    • Bug FixScroll to the right in the table. Reorder one of the columns by dragging it to a new location. You’ll notice that the grid auto-scrolls all the way back to the reset position.



  • Enhancements

    • Changed signature of setEditedItemPosition to make it easier FlexDataGrid.prototype.setEditedItemPosition = function (rowIndex,colIndex)

    • Changes so that responsive behavior only kicks in once per resize

    • Added maxlength to TextInput.js.

    • Added documentation for responsive behaviors/ResponsiveBehavior.js

    • Updated build scripts to include new files for Responsive code

    • Changed the default for enhancedPDF to false

    • Added support for useEnhancedPDF + fixes for useEnhancedPrint.

    • Added pdfOptionsBasic when useEnhancedPDF =false.

    • Added Bug fix so no extra padding column needed to generate good quality print

    • Added printOptionsWindowTitle + printPreviewWindowTitle to PDFOptions

    • Added exportOptionsWindowTitle to ExportOptions.js

    • Bug Fix for useEnhancedPrint=false and the HTML print not printing

    • Upgraded js-pdf and js-pdf autotable plugin to latest versions

    • Added support for drag drop grouping from one grid to another

    • Added * @property enableSelectAllOnPageChange @type Boolean @default true - In server mode, if the user selects all and hits page change, this flag will control if the next page of newly loaded records is automatically selected.

    • Added @property enableMaintainSelectionOnSelectAll @type Boolean @default false- In server mode, if this flag is set to true and the user hits select all on a particular page, the grid will maintain the selections made on previous pages. If this flag is set to false, (default) selections on othere pages will be cleared.

    • Added flxConstants.DISABLE_POPUP_BLOCKERS – Message to show when print operation fails because of a popup blocker, instead of crapping out, display a nice friendly error message

    • Added event FlexDataGridEvent.WIDTH_CHANGED = "widthChanged";

    • Added support for exporting footer values

    • Added support for column headers to include the full column group text in the excel/word/html export (Not just the header text of the column, but also the concatenated column group header text)

    • Added support for export and print picker popup views to include full column group text.

    • Added Numeric Range Box Validation

    • Make JSPDF output landscape format and line height

    • Added support for hideHeaderText (when you set this flag to true, the header text is removed – this can be used to disable checkbox headers – so if you want the grid to not allow selectAll)

    • On select of a row, set the text in the entire row to bold – added via a css class - .flexiciousGrid .selectedCell

    • Maintain horizontal and vertical scroll position after a resize or a reorder.

    • Added support to filter by a specific Date instead of a Date Range – If you use Custom and enter the same Date for Start and End it will search on that specific date (from 00:00:00 to 11:59:59 PM).