News in versions: FastGrid 1.0, TreeGrid 17.0
FastGrid FastSheet ExamplesSamples DocumentationDoc Download Licensing Prices Buy Development
services
References References Contacts
TreeGrid Gantt chart SpreadSheet ExamplesSamples DocumentationDoc Download Licensing Prices Buy Contacts
FastGrid documentation
Search in documentation
FastGrid versions compatibility

Changes log (txt file) Compare FastGrid 1.0 & TreeGrid 17.1

Using in JavaScript frameworks

Angular Ember Express React Svelte Vue Other frameworks NodeJS server SalesForce LWC

Data and creating FastGrid

Simple examples of creating FastGrid Create FastGrid Display grid Access grid by API Sheets, more grids switched in one place Layout and configuration Data rows, columns, toolbars, images Changes in data rows, columns, toolbars Saving changes to server Mark changes Loading children on expand parent Short format

Layout - grid parts

Parts - ColParts and RowParts Part size Part scroll position Sets Column sets Row sets

Toolbars

Toolbar Cells Icon Height Width Toolbar position Dragging and manipulating cells Special toolbars

Rows and columns
Default rows, columns, cells, toolbars
Row and column identity

Row / column id Row / column index Row / column name

Row and column manipulation

API to get grid objects Auto added columns & rows on scroll Blocks of rows / columns Adding / copying / moving Deleting Showing and hiding Layout menu Selecting rows and columns Fill cell values by dragging Locking grid against changes Undo & redo

Row and column tree

Row and column tree Row tree Column tree Expand & collapse

Cells
Cell values and attributes

Read and write any values by API Cell value Cell attributes Cell value & attributes in UTF8 Store

Editing cells

Editing During editing Validation and errors

Cell images

Row cell side icons Icons definition Mark icons and charts Mark icons list Row cell floating images

Cell size

Row height Column width Resizing rows and columns Padding Margin Cell span

Cell style

Grid style and look Cell style permissions Cell style Cell outer border Cell inner border Alternate row & column background

Other cell features

Cell hyperlink Cell tooltip Static cells Other cell attributes Row & column attributes to speed up

Cell types and formats
Cell type and format Range - more values / ranges in cell String type Html type Auto type
Bool type

Bool type Check side icon Bool type & Check side icon

Number type

Format Localization

Date type

Format Localization Calendar

Calculations - formulas
JavaScript formulas

JavaScript formulas Aggregate functions String aggregate functions Other functions

Editable formulas

Formula rules Formula attributes Defined names for editable formulas Conditional functions Lookup functions Cell reference functions Logical functions Informational functions Mathematical functions Trigonometry functions Rounding numbers Number conversions String functions Date functions Summary functions

Dialogs and menus

Dialog Dialog Place Dialog API Menu definition in Script Cell menu List Suggest

Features
Sorting rows / columns

Sorting Sorting settings Comparing strings

Grouping rows / columns

Grouping Grouping settings Comparing strings Pivot grid

Filtering rows and columns

Filtering Filter settings Comparing strings

Search in cells Import files to grid
Export files

Export files Export and copy to clipboard CSV data

Copy & paste via system clipboard

Copy & paste Copy to clipboard Paste from clipboard

Printing

Print Print to PDF

Global grid settings
Grid size & scroll

Grid size Grid scrollbars Paging and view Media rules - responsive design

Saving settings in storage or cookies
Focus and hover cells

Focus cell and cell ranges Mouse hover cells Highlight cells, rows and columns

Events

Mouse events Key events API events

Language

Translation Languages

Messages

Message Message style

Other API

API for iterating rows and columns Paint and repaint Various API methods

Debug & files

Debugging FastGrid files

UTF8 Store - fast & short data
Introduction - License & download

Basic description Main advantages Basic usage License Download Documentation

Script language implementations

JavaScript C# JAVA PHP

Suggested ucodes

Bits - small integers or enums Integers or enums with strings Date and time Floating point numbers Special strings

Basic ucodes

Integer 1 char String 1 char Date 1 char Bits 1 char Integer 2 chars String 2 chars Date 2 chars Float 2 chars Integer 3 chars String 3 chars Date 3 chars Integer and double float 5 chars String 5 chars Date 5 chars Fixed length string Separated strings Adjacent strings Prefix for escaping string Fixed length data Unused custom codes Prefix for stored separator or length Prefix for stored base number Unused basic ucodes

Complex ucodes

chars signed decimals multiple limits varstrings escape base chars2 signed2 decimals2 multiple2 limits2

Internal coding Profiling times for ucode options Function reference

Suggested ucode options for UTF8 Store

UTF8 Store documentation; version 1.0

Bits - very small integers or enums with a few strings
Small integers <0, 31> Can be coded more in one byte by ucode 0xB (<0,1>, 6 values per byte), 0xC (<0,3>, 3 values per byte), 0xD (<0,7>, 2 values per byte), 0xE (<0,15>, 3 values per 2 bytes), 0xF (<0,31>, 6 values per 5 bytes).
Codes can be combined into one byte, also with ucode 0x8 / 0x9 / 0xA.
JS: UTF8Store.WriteValues( [1,-10,6,199,30,4,13], [0xB,0x9,0xD,0x8,0xF,0xD,0xE] ) => 57,da,97,62,31 (5 bytes)
C#: UTF8Store.WriteValues(new UTF8Store.Value[] { 1,-10,6,199,30,4,13 }, new int[]{ 0xB,0x9,0xD,0x8,0xF,0xD,0xE })
JV: UTF8Store.WriteValues(new Object[] { 1,-10,6,199,30,4,13 }, new int[]{ 0xB,0x9,0xD,0x8,0xF,0xD,0xE })
PH: UTF8Store::WriteValues( [1,-10,6,199,30,4,13], [0xB,0x9,0xD,0x8,0xF,0xD,0xE] )
Up to 32 consecutive integers Can be coded more in one byte like numbers <0, 31> with ucode 0xB, 0xC, 0xD, 0xE, 0xF with added base number by AddToUCode method.
Codes can be combined into one byte, also with ucode 0x8 / 0x9 / 0xA. E.g. values in range <-3,4> can be coded with UTF8Store.AddToUCode(0xD,-3).
JS: UTF8Store.WriteValues( [-3,105,-105,90,10012,2], [ UTF8Store.AddToUCode(0xD,-3), UTF8Store.AddToUCode(0xD,100), UTF8Store.AddToUCode(0xE,-110), 0x8, UTF8Store.AddToUCode(0xE,10000), 0xC ] ) => 29,d7,ba,56 (4 bytes)
C#: UTF8Store.WriteValues(new UTF8Store.Value[] { -3,105,-105,90,10012,2 }, new int[]{ UTF8Store.AddToUCode(0xD,-3), UTF8Store.AddToUCode(0xD,100), UTF8Store.AddToUCode(0xE,-110), 0x8, UTF8Store.AddToUCode(0xE,10000), 0xC })
JV: UTF8Store.WriteValues(new Object[] { -3,105,-105,90,10012,2 }, new int[]{ UTF8Store.AddToUCode(0xD,-3), UTF8Store.AddToUCode(0xD,100), UTF8Store.AddToUCode(0xE,-110), 0x8, UTF8Store.AddToUCode(0xE,10000), 0xC })
PH: UTF8Store::WriteValues( [-3,105,-105,90,10012,2], [ UTF8Store::AddToUCode(0xD,-3), UTF8Store::AddToUCode(0xD,100), UTF8Store::AddToUCode(0xE,-110), 0x8, UTF8Store::AddToUCode(0xE,10000), 0xC ] )
Up to 32 different values (enum) Can be coded more in one byte and stored in texts by ucode 0x8B (<0,1>, 6 values per byte), 0x8C (<0,3>, 3 values per byte), 0x8D (<0,7>, 2 values per byte), 0x8E (<0,15>, 3 values per 2 bytes), 0x8F (<0,31>, 6 values per 5 bytes).
Codes can be combined into one byte, also with ucode 0x8 / 0x9 / 0xA.
JS: var texts = []; UTF8Store.WriteValues( ["one","three","one","two","four","three","one","three","two"], 0x8C, 0, texts ) => 28,51,2a (3 bytes), texts: ["one","three","two","four"]
Integers or enums with strings
Small integers mostly in <0, 2 000>
   or <-1 000, 1 000>
Can be coded in single char by ucode 0x1 / 0x2 (the fastest option)
or with other small values in the same char by ucode 0x8 / 0x9 (also consecutive numbers by base)
or by complex ucode GetUCode (1, 0/1,...) (with outside numbers or strings in up to 53414 texts and many other options).
Maximal numbers are in range <0, 63400> / <-31700, 31700>.
JS: UTF8Store.WriteValues( [4,40,3,1500,6,32,56,5,200,61234], 0x1 ) => 28,4c,27,d8,81,2a,44,5d,29,c3, ad,ef,9d,99 (14 bytes)
JS: UTF8Store.WriteValues( [300,100,-2000,86,31000,-1500,2600,123000,1.234,"two",-1300], UTF8Store.GetUCode(1,1,0,100,8) ) => 2a,26,4b,ce,ab,cb,b5,41,58,6e, 6f,70,3d (13 bytes), texts: [123000,1.234,"two"]
C#: UTF8Store.WriteValues(new UTF8Store.Value[] { 300,100,-2000,86,31000,-1500,2600,123000,1.234,"two",-1300 }, new int[]{ UTF8Store.GetUCode(1,1,0,100,8) })
JV: UTF8Store.WriteValues(new Object[] { 300,100,-2000,86,31000,-1500,2600,123000,1.234,"two",-1300 }, new int[]{ UTF8Store.GetUCode(1,1,0,100,8) })
PH: UTF8Store::WriteValues( [300,100,-2000,86,31000,-1500,2600,123000,1.234,"two",-1300], UTF8Store::GetUCode(1,1,0,100,8) )
About 2000 different values (enum) Can be coded in single char by ucode 0x3 (the fastest option)
or with other small values in the same char by ucode 0xA.
Values are stored in texts. Maximal count of the values is 63400 (or less in 0xA depending on other bits).
JS: var texts = []; UTF8Store.WriteValues( ["one","three","one","two","four","three","one","three","two"], 0x3, 0, texts ) => 4,25,24,26,27,25,24,25,26 (9 bytes), texts: ["one","three","two","four"]
JS: var texts = []; UTF8Store.WriteValues( [1,"one",0,"three",2,"one",0,"two",3,"four",3,"three",1,"one",2,"three",0,"two"], [0xC,0xA], 0, texts ) => 34,25,44,26,57,55,34,45,26 (9 bytes), texts: ["one","three","two","four"]
Integers mostly in <-200, 300 000>
   or <-150 000, 150 000>
Can be coded in two chars by ucode 0x11 / 0x12 (the fastest option)
or by complex ucode GetUCode (2, 0/1,...) (with outside and floating numbers or strings in texts and many other options).
Maximal numbers are in range <-1e7, 4e9> / <-2e9, 2e9> (or more in complex ucode, depending on limits).
JS: UTF8Store.WriteValues( [12345,320,45607,8690,-45,93453,485067,1234567890,-1.23e8,333], 0x12 ) => 66,d2,bb,23,2d,31,ce,be,68,cb, b2,3c,24,cc,a0,3c,da,9c,d6,98, eb,a1,bc,e5,96,8e,e5,b1,97,e1, 96,9c,3d,2d (34 bytes)
JS: var texts = []; UTF8Store.WriteValues( [3000,1000,-20000,867,3100000,-15000,2612,1234567890,1.234,"two",-13000], UTF8Store.GetUCode(2,1,0,1000,0), 0, texts ) => 29,23,25,23,4a,23,29,e3,97,8e, 6c,36,40,23,47,e3,98,84,e9,91, ae,e5,97,ac,76,23,77,23,3c,23 (30 bytes), texts: [1.234,"two"]
About 300 000 different values (enum) Can be coded in single char by ucode 0x13 (the fastest option).
Values are stored in texts. Maximal count of the values is 4 000 000 000.
JS: var texts = []; UTF8Store.WriteValues( ["one","three","one","two","four","three","one","three","two"], 0x13, 0, texts ) => 23,23,24,23,23,23,25,23,26,23, 24,23,23,23,24,23,25,23 (18 bytes), texts: ["one","three","two","four"]
Integers mostly in
   <-1 000 000 000, 1 000 000 000>
Can be coded in three chars by ucode 0x21 / 0x22 (the fastest option)
or by complex ucode GetUCode (3, 0/1,...) (with outside and floating numbers or strings in texts and many other options).
Maximal numbers are in range <-1e14, 1e14> (or more in complex ucode, depending on limits).
JS: UTF8Store.WriteValues( [12345,320,45607,8690,-45,93453,485067,1234567890,-1.23e8,333], 0x22 ) => 23,2f,c9,86,23,23,ca,a4,23,50, cb,86,23,2b,d4,a8,23,23,7d,24, 23,dc,ae,28,39,c6,82,e0,be,a7, 50,dd,ac,5a,c3,bd,cd,b7,23,23, ca,be (42 bytes)
JS: var texts = []; UTF8Store.WriteValues( [3000,1000,-20000,867,3100000,-15000,2612,1234567890,1.234,"two",-13000], UTF8Store.GetUCode(3,1,0,1000,0), 0, texts ) => 23,23,29,23,23,25,23,23,4a,4e, c6,af,cf,86,23,26,c3,88,23,23, 40,4e,c6,b1,c6,ac,e1,8f,92,5e, ca,82,21,23,23,21,24,23,23,23, 3c (41 bytes), texts: [1.234,"two"]
Date and time
Date Can be coded in one char by basic ucode 0x4, optionally with added base date by AddToUCode (default is 1/1/2025). Can code up to 65 years around the base date.
Or can be coded in two chars by basic ucode 0x15 with up to 3600 years around the base date.
Or can be coded in one char as UTC date as number of milliseconds since 1/1/1970 by complex ucode GetUCode (1, 1, 12, 1, 0, 0, 0, Date.UTC(2025,1,1)). Can code up to 85 years around the base date.
JS: UTF8Store.WriteValues( [ new Date(2000,12,31), new Date(2022,4,14), new Date(2030,10,20), new Date(2040,12,21), new Date(2100,7,8) ], UTF8Store.AddToUCode(0x4,new Date(2040,1,1)) ) => e7,94,aa,e3,95,8c,e1,ae,be,cc, 8d,eb,96,b5 (14 bytes)
JS: UTF8Store.WriteValues( [ Date.UTC(2000,12,31), Date.UTC(2022,4,14), Date.UTC(2030,10,20), Date.UTC(2040,12,21), Date.UTC(2100,7,8) ], UTF8Store.GetUCode(1,1,12,1,0,0,0,Date.UTC(2040,1,1)) ) => e6,bd,b0,e3,8a,b6,e1,a9,a4,cb, ab,ea,b3,95 (14 bytes)
C#: UTF8Store.WriteValues( new UTF8Store.Value[]{ new DateTime(2000,12,31), new DateTime(2022,4,14), new DateTime(2030,10,20), new DateTime(2040,12,21), new DateTime(2100,7,8) }, UTF8Store.AddToUCode(0x4,new DateTime(2040,1,1)) )
JV: UTF8Store.WriteValues( new Object[]{ LocalDate.of(2000,12,31), LocalDate.of(2022,4,14), LocalDate.of(2030,10,20), LocalDate.of(2040,12,21), LocalDate.of(2100,7,8) }, UTF8Store.AddToUCode(0x4,LocalDate.of(2040,1,1)) )
PH: UTF8Store::WriteValues( [ new DateTime("2000-12-31"), new DateTime("2022-4-14"), new DateTime("2030-10-20"), new DateTime("2040-12-21"), new DateTime("2100-7-8") ], UTF8Store::AddToUCode(0x4,new DateTime("2040-1-1")) )
Date with time Can be coded in two chars by basic ucode 0x14, optionally with added base date by AddToUCode (default is 1/1/2025). Can code up to 60 years around the base date.
Or can be coded in three chars by basic ucode 0x24 with up to 3000 years around the base date and stored also milliseconds.
Or can be coded in two chars as number of milliseconds since 1/1/1970 (without timezone) by complex ucode GetUCode (2, 1, 9, 1, 0, 0, 0, Date.UTC(2025,7,1)). Can code up to 75 years around the base date.
JS: UTF8Store.WriteValues( [ new Date('12/31/2000 13:30:56'), new Date('4/14/2022 12:44'), new Date('10/20/2030 16:56:30'), new Date('12/21/2040 13:33:33') ], 0x14 ) => ef,a5,93,e7,94,90,e3,8f,9d,cf, 8f,e6,86,be,ef,98,b7,ea,b3,b8, e1,b9,84 (23 bytes)
JS: UTF8Store.WriteValues( [ new Date('12/31/2000 13:30:56'), new Date('4/14/2022 12:44'), new Date('10/20/2030 16:56:30'), new Date('12/21/2040 13:33:33') ], UTF8Store.GetUCode(2, 1, 9, 1, 0, 0, 0, Date.UTC(2025,1,1)) ) => e2,aa,b7,ea,91,9e,ec,9a,97,d0, b3,e2,b8,b4,e2,b1,b2,e5,90,b2, e7,a3,b8 (23 bytes)
CS: UTF8Store.WriteValues( new UTF8Store.Value[]{ new DateTime(2000,12,31,13,30,56), new DateTime(2022,4,14,12,44,0), new DateTime(2030,10,20,16,56,30), new DateTime(2040,12,21,13,33,33) }, 0x14 )
JV: UTF8Store.WriteValues( new Object[]{ LocalDateTime.of(2000,12,31,13,30,56), LocalDateTime.of(2022,4,14,12,44,0), LocalDateTime.of(2030,10,20,16,56,30), LocalDateTime.of(2040,12,21,13,33,33) }, 0x14 )
PH: UTF8Store::WriteValues( [ new DateTime('12/31/2000 13:30:56'), new DateTime('4/14/2022 12:44'), new DateTime('10/20/2030 16:56:30'), new DateTime('12/21/2040 13:33:33') ], 0x14 )
Time Can be coded in one char by basic ucode 0x7, without seconds or with limited seconds. If returned as date, it adds base date (added by AddToUCode) or 1/1/1970.
Or can be coded in two chars by basic ucode 0x17, with seconds and milliseconds. If returned as date, it adds base date (added by AddToUCode) or 1/1/1970.
Or can be coded in one char as ellapsed seconds as number of milliseconds since 1/1/1970 by complex ucode GetUCode (1, 1, 9).
Or can be coded in two chars as ellapsed milliseconds as number of milliseconds since 1/1/1970 by basic ucode 0x11.
JS: UTF8Store.WriteValues( [ new Date('1/1/1970 13:30:56'), new Date('1/1/1970 12:44'), new Date('1/1/1970 16:56:30'), new Date('1/1/1970 13:33:35') ], 0x7 ) => ea,82,84,d1,91,e5,a7,97,eb,b3,ac (11 bytes)
CS: UTF8Store.WriteValues( new UTF8Store.Value[]{ new TimeOnly(13,30,56), new TimeOnly(12,44,0), new TimeOnly(16,56,30), new TimeOnly(13,33,35) }, 0x7 )
JV: UTF8Store.WriteValues( new Object[]{ LocalTime.of(13,30,56), LocalTime.of(12,44,0), LocalTime.of(16,56,30), LocalTime.of(13,33,35) }, 0x7 )
PH: UTF8Store::WriteValues( [ new DateTime('1/1/1970 13:30:56'), new DateTime('1/1/1970 12:44'), new DateTime('1/1/1970 16:56:30'), new DateTime('1/1/1970 13:33:35') ], 0x7 )
Floating point numbers
Small float numbers with one decimal
   mostly in <0,200.0> or <-100.0, 100.0>
Can be coded in one char by complex ucode GetUCode (1, 0/1, 1,...), with outside numbers or strings in up to 53414 texts and many other options.
Maximal numbers are in range <-10.0, 6300.0> or <-3150.0, 3150.0>.
JS: var texts = []; UTF8Store.WriteValues( [ 5.6,1.1,3.5,"xxx",-12.4,6,0,-4.1,2345.6,1.234 ], UTF8Store.GetUCode(1,1,1,1,8), 0, texts ) => c3,b9,3a,6b,6e,c6,80,c4,81,24, c3,9a,eb,9f,8b,6f (16 bytes), texts: ["xxx", 1.234]
C#: UTF8Store.Strings texts = new UTF8Store.Strings(); UTF8Store.WriteValues(new UTF8Store.Value[] { 5.6,1.1,3.5,"xxx",-12.4,6,0,-4.1,2345.6,1.234 }, UTF8Store.GetUCode(1, 1, 1, 1 ,8), 0, texts)
JV: UTF8Store.Strings texts = new UTF8Store.Strings(); UTF8Store.WriteValues(new Object[] { 5.6,1.1,3.5,"xxx",-12.4,6,0,-4.1,2345.6,1.234 }, UTF8Store.GetUCode(1, 1, 1, 1 ,8), 0, texts)
PH: $texts = new UTF8Strings(); UTF8Store::WriteValues( [ 5.6,1.1,3.5,"xxx",-12.4,6,0,-4.1,2345.6,1.234 ], UTF8Store::GetUCode(1,1,1,1,8), 0, $texts )
Small float numbers with two decimals
   mostly in <0,20.00> or <-10.00, 10.00>
Can be coded in one char by complex ucode GetUCode (1, 0/1, 2,...), with outside numbers or strings in up to 53414 texts and many other options.
Maximal numbers are in range <-1.00, 630.00> or <-315.00, 315.00>.
JS: var texts = []; UTF8Store.WriteValues( [ 5.63,1.12,3.5,"xxx",-12.41,6,0,-4.14,234.56,1.234 ], UTF8Store.GetUCode(1,1,2,1,8), 0, texts ) => d3,af,c5,a9,cd,85,6e,e0,a8,ba, d4,b9,24,cf,84,eb,9f,8b,6f (19 bytes), texts: ["xxx", 1.234]
Float numbers with two decimals mostly in
   <0.00, 3 000.00> or <-1 500.00, 1 500.00>
Can be coded in two chars by complex ucode GetUCode (2, 0/1, 2,...), with outside and more precise numbers or strings in texts and many other options.
Maximal numbers are in range <0.00, 40 000 000.00> or <-20 000 000.00, 20 000 000.00>.
JS: var texts = []; UTF8Store.WriteValues( [ 56789.63,1.12,3.5,"xxx",-12.41,6,0,-4.14,1234567.89,1.234 ], UTF8Store.GetUCode(2,1,2), 0, texts ) => ec,95,be,2d,43,26,60,2d,76,23, 54,49,53,35,23,23,5f,2f,e4,b4, 82,e1,96,b8,77,23 (26 bytes), texts: ["xxx", 1.234]
Float numbers with three decimals
   mostly in <-1 000 000.000, 1 000 000.000>
   with 14 digits precision
Can be coded in three chars by complex ucode GetUCode (3, 0/1, 3,...), with outside and more precise numbers or strings in texts and many other options.
Maximal numbers are in range <-1.000e11, 1.000e11>.
JS: var texts = []; UTF8Store.WriteValues( [ 56789.635,1.12,3.556,"xxx",-12.41,6,0,-4.14,1234567.889,-12345678901.234,1.23456 ], UTF8Store.GetUCode(3,1,2), 0, texts ) => (48 bytes), texts: ["xxx", 1.23456]
Single float with 7 digits precision
   in range <-1e38, 1e38> and min 1e-33
or
   in range <-1e100, 1e100> and min 1e-100
Can be coded in two chars by ucode 0x1F in range <-1e38, 1e38> and min 1e-33, with outside numbers or strings in up to 10 000 000 texts.
Or it can be coded in two chars by complex ucode GetUCode (2, 1, 0, 0, 3,...) in range <-1e100, 1e100> and min 1e-100, with outside numbers or strings in unlimited texts.
The 0x1F number differs from IEEE 754 Single float in maximal negative exponent, it is reduced from 38 to 33.
The numbers with more than 7 significant digits are always rounded when storing.
JS: var texts = []; UTF8Store.WriteValues( [ -56789.63,0.000003456,-1.234567e-20,3.556,1.234567e37,1.12,"xxx",-12.41,6,0,-4.14,1234567.889,9.87654e-32,-12345678900,1.23456 ], 0x1F, 0, texts ) => (78 bytes), texts: ["xxx"]
JS: var texts = []; UTF8Store.WriteValues( [ -56789.63,0.000003456,-1.234567e-20,3.556,1.234567e37,1.12,"xxx",-12.41,6,0,-4.14,1234567.889,9.87654e-32,-12345678900,1.23456 ], UTF8Store.GetUCode(2,1,0,0,3), 0, texts ) => (81 bytes), texts: ["xxx"]
Double float with 15 digits precision
   in range <-1e308, 1e308> and min 1e-323
Can be coded in five chars by ucode 0x31 or 0x32, with strings with 5 and more characters in texts.
It can store every JavaScript number or any Double type and strings up to 4 characters.
JS: var texts = []; UTF8Store.WriteValues( [ -56789.63,0.000003456,-1.234567e-20,3.556,1.234567e37,1.12,"xxx",-12.41,6,0,-4.14,1234567.889,9.87654e-32,-12345678900,1.23456,-9.87654e99,9.87654e-99,5e13,-5e13,1.5e14,-1.5e14,-9.87654321012345e307,9.87654321012345e-318,"abcdefg" ], 0x31, 0, texts ) => (270 bytes), texts: ["abcdefgh"]
Special strings
Fixed length strings (like uuid)
   directly coded to the resulted UTF8 string
Can be coded in the fixed length chars by ucode from 0x41 (1 char) to 0x80 (64 chars). The strings cannot contain chars like "\x7f" or "\x380".
If the string exceeds the fixed length, it is saved to texts (except the 0x41 (1 char), where is cut off).
JS: UTF8Store.WriteValues( [ "one","two","three",1.045,"four","five","six",1234,"seven","eight",-16,"nine","ten" ], 0x45 ) => (65 bytes)
Fixed length data (like coded UT8Store)
   directly coded to the resulted UTF8 string
Can be coded in the fixed length chars by ucode from 0x2001 (1 char) to 0x23FF (1023 chars). The strings can contain any UTF8 chars.
If the data exceeds the fixed length, it is cut off. If the data is shorter than the fixed length, still full fixed length data is returned.
JS: var UC = [0xB,0x9,0xD,0x8,0xF,0xD,0xE]; UTF8Store.WriteValues( [ UTF8Store.WriteValues( [1,-10,6,199,30,4,13],UC), UTF8Store.WriteValues( [0,12,4,154,19,2,11],UC), UTF8Store.WriteValues( [1,132,3,98,13,2,9],UC) ], 0x2004 ) => 57,da,97,62,31,3c,d4,8a,4a,4f, c9,90,cd,82,3e,4d (16 bytes)
C#: int[] UC = new int[]{ 0xB,0x9,0xD,0x8,0xF,0xD,0xE }; UTF8Store.WriteValues( new UTF8Store.Value[] { UTF8Store.WriteValues( new UTF8Store.Value[] {1,-10,6,199,30,4,13},UC), UTF8Store.WriteValues( new UTF8Store.Value[] {0,12,4,154,19,2,11},UC), UTF8Store.WriteValues( new UTF8Store.Value[] {1,132,3,98,13,2,9},UC) }, new int[]{ 0x2004 })
JV: int[] UC = new int[]{ 0xB,0x9,0xD,0x8,0xF,0xD,0xE }; UTF8Store.WriteValues( new Object[] { UTF8Store.WriteValues( new Object[] {1,-10,6,199,30,4,13},UC), UTF8Store.WriteValues( new Object[] {0,12,4,154,19,2,11},UC), UTF8Store.WriteValues( new Object[] {1,132,3,98,13,2,9},UC) }, new int[]{ 0x2004 })
PH: $UC = [0xB,0x9,0xD,0x8,0xF,0xD,0xE]; UTF8Store::WriteValues( [ UTF8Store::WriteValues( [1,-10,6,199,30,4,13],$UC), UTF8Store::WriteValues( [0,12,4,154,19,2,11],$UC), UTF8Store::WriteValues( [1,132,3,98,13,2,9],$UC) ], 0x2004 )
Strings with 2 or 3 parts Used if coded string consists from two or three parts that are repeating among the stored strings.
For example people names as Name+' '+Surname or lists of keywords like color1+','+color2+','+color3.
The string parts are coded separately in texts and / or texts2.
Can be coded by ucode 0xC4 - 0xCB (separated string and number), 0xCC - 0xD1 (2 separated strings), 0xD2 - 0xDF (3 separated strings), 0xE4 - 0xEB (adjacent string and number), 0xEC - 0xF1 (2 adjacent strings), 0xF2 - 0xFF (3 adjacent strings).
The separator is space by default, the other separators or the lengths of the adjacent strings are coded into ucode, bits 15 - 30, can be added to ucode by AddToUCode.
JS: var texts = [], texts2 = []; UTF8Store.WriteValues( [ "John Smith", "Mary Smith", "John Brown", "Peter Taylor", "Susan Brown", "Mary Taylor" ], 0xCD, 0, texts, texts2 ) => 24,24,25,24,24,25,26,26,27,25, 25,26 (12 bytes), texts: ["John", "Mary", "Peter", "Susan"], texts2: ["Smith", "Brown", "Taylor"]
JS: var texts = []; UTF8Store.WriteValues( [ "red", "red,green", "blue,green,yellow", "green,red", "yellow,blue", "white,green" ], UTF8Store.AddToUCode(0xD2,","), 0, texts ) => 24,20,20,24,25,20,26,25,27,25, 24,20,27,26,20,28,25,20 (18 bytes), texts: ["red", "green", "blue", "yellow", "white"]
JS: var texts = [], texts2 = []; UTF8Store.WriteValues( [ "AA123BB", "AB300BB", "BB245AA", "CD980AB", "BN300CD" ], UTF8Store.AddToUCode(0xF4,2,3), 0, texts, texts2 ) => 24,24,25,26,25,25,25,26,24,27, 27,26,28,25,27 (15 bytes), texts: ["AA", "BB", "AB", "CD", "BN"], texts2: ["123", "300", "245", "980"]
C#: UTF8Store.Strings texts = new UTF8Store.Strings(), texts2 = new UTF8Store.Strings(); new UTF8Store.WriteValues(new UTF8Store.Value[] { "AA123BB", "AB300BB", "BB245AA", "CD980AB", "BN300CD" }, UTF8Store.AddToUCode(0xF2,2,3), 0, texts, texts2)
JV: UTF8Store.Strings texts = new UTF8Store.Strings(), texts2 = new UTF8Store.Strings(); UTF8Store.WriteValues(new Object[] { "AA123BB", "AB300BB", "BB245AA", "CD980AB", "BN300CD" }, UTF8Store.AddToUCode(0xF2,2,3), 0, texts, texts2 )
PH: $texts = new UTF8Strings(); $texts2 = new UTF8Strings(); UTF8Store::WriteValues( [ "AA123BB", "AB300BB", "BB245AA", "CD980AB", "BN300CD" ], UTF8Store::AddToUCode(0xF4,2,3), 0, $texts, $texts2 )