@esfaenza/es-table 19.2.20 → 19.2.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1661,29 +1661,32 @@ class HierarchyModeHandler {
1661
1661
  */
1662
1662
  assignLevel(objs, levelToAssign) {
1663
1663
  let assigned = 0;
1664
+ let own = this.est.OwnKey();
1665
+ let parent = this.est.ParentKey();
1666
+ let expanded = this.est.StartsExpanded();
1664
1667
  for (let i = 0; i < objs.length; i++) {
1665
1668
  let obj = objs[i];
1666
1669
  // Se la parentKey non è valorizzata, questo è il livello 0 (1... perché gli 0 son perciolosi)
1667
- if (!obj[this.est.ParentKey()] && levelToAssign == 1) {
1670
+ if (!obj[parent] && levelToAssign == 1) {
1668
1671
  obj._level = 1;
1669
1672
  obj._visible = true;
1670
- obj._expanded = this.est.StartsExpanded;
1673
+ obj._expanded = expanded;
1671
1674
  assigned++;
1672
1675
  continue;
1673
1676
  }
1674
1677
  // Per i livelli superiore al primo
1675
- if (obj[this.est.ParentKey()] && levelToAssign > 1) {
1678
+ if (obj[parent] && levelToAssign > 1) {
1676
1679
  // trovo il parent
1677
1680
  for (let p = 0; p < objs.length; p++) {
1678
1681
  let possibleParent = objs[p];
1679
1682
  // Trovato il parent dell'item, assegno all'item il livello giusto
1680
- if (possibleParent[this.est.OwnKey()] == obj[this.est.ParentKey()] && possibleParent._level == levelToAssign - 1) {
1683
+ if (possibleParent[own] == obj[parent] && possibleParent._level == levelToAssign - 1) {
1681
1684
  obj._level = levelToAssign;
1682
1685
  // So che questo item ha un parent. Ribadisco che il parent è espanso in base alle impostazione e stessa logica
1683
1686
  // per la visibilità del figlio
1684
- possibleParent._expanded = this.est.StartsExpanded;
1687
+ possibleParent._expanded = expanded;
1685
1688
  possibleParent.parent = true;
1686
- obj._visible = this.est.StartsExpanded;
1689
+ obj._visible = expanded;
1687
1690
  assigned++;
1688
1691
  break;
1689
1692
  }
@@ -1699,15 +1702,17 @@ class HierarchyModeHandler {
1699
1702
  */
1700
1703
  expandParent(key) {
1701
1704
  let bs = this.est.boundSource();
1705
+ let own = this.est.OwnKey();
1706
+ let parent = this.est.ParentKey();
1702
1707
  for (let i = 0; i < bs.length; i++) {
1703
1708
  let obj = bs[i];
1704
1709
  // Trovo il parent con quell'id e lo espando
1705
- if (obj[this.est.OwnKey()] == key) {
1710
+ if (obj[own] == key) {
1706
1711
  obj._expanded = true;
1707
1712
  for (let ic = 0; ic < bs.length; ic++) {
1708
1713
  let child = bs[ic];
1709
1714
  // Trovo tutti i child di quel parent e li rendo visibili
1710
- if (child[this.est.ParentKey()] == key)
1715
+ if (child[parent] == key)
1711
1716
  child._visible = true;
1712
1717
  }
1713
1718
  return;
@@ -1721,10 +1726,11 @@ class HierarchyModeHandler {
1721
1726
  */
1722
1727
  collapseParent(key) {
1723
1728
  let bs = this.est.boundSource();
1729
+ let own = this.est.OwnKey();
1724
1730
  for (let i = 0; i < bs.length; i++) {
1725
1731
  let obj = bs[i];
1726
1732
  // Trovo il parent con quell'id e lo collasso
1727
- if (obj[this.est.OwnKey()] == key) {
1733
+ if (obj[own] == key) {
1728
1734
  obj._expanded = false;
1729
1735
  // Collasso/nascondo tutti i child del parent
1730
1736
  this.collapseChildOfParent(key);
@@ -1739,16 +1745,18 @@ class HierarchyModeHandler {
1739
1745
  */
1740
1746
  collapseChildOfParent(parentKey) {
1741
1747
  let bs = this.est.boundSource();
1748
+ let parent = this.est.ParentKey();
1749
+ let own = this.est.OwnKey();
1742
1750
  for (let ic = 0; ic < bs.length; ic++) {
1743
1751
  let child = bs[ic];
1744
1752
  // Trovo tutti i child di quel parent e li rendo invisibili. Se il child trovato è a sua volta un parent,
1745
1753
  // lo collasso e vado in ricorsione sui figli
1746
- if (child[this.est.ParentKey()] == parentKey && !child.parent)
1754
+ if (child[parent] == parentKey && !child.parent)
1747
1755
  child._visible = false;
1748
- else if (child[this.est.ParentKey()] == parentKey && child.parent) {
1756
+ else if (child[parent] == parentKey && child.parent) {
1749
1757
  child._expanded = false;
1750
1758
  child._visible = false;
1751
- this.collapseChildOfParent(child[this.est.OwnKey()]);
1759
+ this.collapseChildOfParent(child[own]);
1752
1760
  }
1753
1761
  }
1754
1762
  }
@@ -4349,15 +4357,15 @@ class EsTableComponent {
4349
4357
  if (usesThsAndTdsDirectives || hasNoContentProjection) {
4350
4358
  if (this.UseCustomCells() == null)
4351
4359
  this.UseCustomCells.set(true);
4352
- if (this.HiddenColumns() == null && this.UseCustomCells)
4360
+ if (this.HiddenColumns() == null && this.UseCustomCells())
4353
4361
  this.HiddenColumns.set(true);
4354
- if (this.ColumnsOrdering() == null && this.UseCustomCells)
4362
+ if (this.ColumnsOrdering() == null && this.UseCustomCells())
4355
4363
  this.ColumnsOrdering.set(true);
4356
- if (this.OrderByColumn() == null && this.UseCustomCells)
4364
+ if (this.OrderByColumn() == null && this.UseCustomCells())
4357
4365
  this.OrderByColumn.set(true);
4358
- if (this.SelectAll() == null && this.Selection)
4366
+ if (this.SelectAll() == null && this.Selection())
4359
4367
  this.SelectAll.set(true);
4360
- if (this.ShiftClick() == null && this.Selection)
4368
+ if (this.ShiftClick() == null && this.Selection())
4361
4369
  this.ShiftClick.set(true);
4362
4370
  this.DirectivesBased.set(true);
4363
4371
  }
@@ -4418,13 +4426,14 @@ class EsTableComponent {
4418
4426
  else if (this.SearchView() && typeof this.SearchView().itemsperpageoverride != 'undefined' && !(this.SearchView() instanceof AppSearch))
4419
4427
  this.SearchView().__proto__ = new AppSearch();
4420
4428
  // -------------------------------------------------------------------------------------------------------------------------
4429
+ let isp = this.ItemSourceProperty();
4421
4430
  if (this.View && this.View instanceof AppSearch) {
4422
4431
  // Se cambia l'oggetto intero significa che ho rimandato la ricerca
4423
4432
  this.setMode('view');
4424
4433
  let firstItemGroupOrNoGrouping = (this.View.requestedgroups?.length || 0) == 0;
4425
4434
  // Queste sono item source custom. Le valorizzo al default se non esistono
4426
- if (this.ItemSourceProperty() && !this.View[this.ItemSourceProperty()])
4427
- this.View[this.ItemSourceProperty()] = [];
4435
+ if (isp && !this.View[isp])
4436
+ this.View[isp] = [];
4428
4437
  // Se vengo da una ricerca interna mantengo lo stato di selezione precedente (quindi su cambio pagina, cambio ipp, ecc...)
4429
4438
  // se invece l'utente ha fatto una ricerca lui (quindi cambiando filtri), secco le info di selezione
4430
4439
  if (!this.View.selection || (!this.View.internalsearchrequest && firstItemGroupOrNoGrouping) || !this.UseSelectionCache())
@@ -4483,7 +4492,7 @@ class EsTableComponent {
4483
4492
  }
4484
4493
  }
4485
4494
  if (firstItemGroupOrNoGrouping)
4486
- this.arrayPulsanti.set(this.utilities_H.getPagesArray(6, this.View.page, this.View.pages || 1, (this.ItemSourceProperty() ? this.View[this.ItemSourceProperty()] : this.View.items).length, this.View.itemsperpageoverride));
4495
+ this.arrayPulsanti.set(this.utilities_H.getPagesArray(6, this.View.page, this.View.pages || 1, (isp ? this.View[isp] : this.View.items).length, this.View.itemsperpageoverride));
4487
4496
  }
4488
4497
  else if (this.View && (this.View.length != null && this.View.length != undefined)) {
4489
4498
  this.setMode('array');
@@ -4533,12 +4542,14 @@ class EsTableComponent {
4533
4542
  }
4534
4543
  this.finalizeContext();
4535
4544
  this.postBoundSourceCalculation();
4536
- if (this.View && !this.View.selfsearch && this.EsTableHandledSearch() && !this.View.firstsearch) {
4545
+ if (!this.EsTableHandledSearch() || !this.View)
4546
+ return;
4547
+ if (!this.View.selfsearch && !this.View.firstsearch) {
4537
4548
  this.View.selfsearch = true;
4538
4549
  this.changed(true);
4539
4550
  this.onSearchRequest.emit(false);
4540
4551
  }
4541
- else if (this.View && this.View.selfsearch && this.EsTableHandledSearch()) {
4552
+ else if (this.View.selfsearch) {
4542
4553
  this.View.selfsearch = false;
4543
4554
  this.changed();
4544
4555
  }
@@ -4577,22 +4588,23 @@ class EsTableComponent {
4577
4588
  this.PagerOptions.ShowButtons = !this.HidePagingButtons();
4578
4589
  this.PagerOptions.ShowPaging = !this.HidePaging();
4579
4590
  this.PagerOptions.UsesView = true;
4580
- if (this.arrayMode() && this.UseArrayModePaging() && !this.SearchView()) {
4591
+ let sv = this.SearchView();
4592
+ if (this.arrayMode() && this.UseArrayModePaging() && !sv) {
4581
4593
  this.PagerOptions.PagerCount = this.View.length || 0;
4582
4594
  this.PagerOptions.ShowButtons = this.PagerOptions.ShowButtons && this.View.length > 10;
4583
4595
  this.PagerOptions.View = this.View;
4584
4596
  this.PagerOptions.UsesView = false;
4585
4597
  this.PagerOptions.ShowPagingOptions = this.PagerOptions.ShowButtons;
4586
4598
  }
4587
- else if (this.arrayMode() && (!this.UseArrayModePaging() || this.SearchView())) {
4588
- if (this.SearchView()) {
4589
- this.PagerOptions.View = this.SearchView();
4590
- this.PagerOptions.PagerCount = this.SearchView().objectcount || 0;
4599
+ else if (this.arrayMode() && (!this.UseArrayModePaging() || sv)) {
4600
+ if (sv) {
4601
+ this.PagerOptions.View = sv;
4602
+ this.PagerOptions.PagerCount = sv.objectcount || 0;
4591
4603
  }
4592
4604
  else
4593
4605
  this.PagerOptions.PagerCount = this.View.length || 0;
4594
- this.PagerOptions.ShowButtons = this.PagerOptions.ShowButtons && (this.View.length > 10 || (this.SearchView()?.objectcount || 0) > 10);
4595
- this.PagerOptions.ShowCount = this.PagerOptions.ShowCount || (this.View && this.View.length) || (this.SearchView() && this.SearchView().objectcount && this.SearchView().objectcount != -1);
4606
+ this.PagerOptions.ShowButtons = this.PagerOptions.ShowButtons && (this.View.length > 10 || (sv?.objectcount || 0) > 10);
4607
+ this.PagerOptions.ShowCount = this.PagerOptions.ShowCount || (this.View && this.View.length) || (sv && sv.objectcount && sv.objectcount != -1);
4596
4608
  this.PagerOptions.ShowPaging = this.PagerOptions.ShowPaging && (this.PagerOptions.ShowButtons || this.PagerOptions.ShowCount);
4597
4609
  this.PagerOptions.ShowPagingOptions = this.PagerOptions.ShowButtons;
4598
4610
  }
@@ -4621,6 +4633,11 @@ class EsTableComponent {
4621
4633
  /** Per poter distinguere le chiamate a questo metodo: Dopo il setTimeout se uso gli EsTd/EsTh vecchi, senza il setTimeout se uso le nuove direttive */
4622
4634
  async internalPostBoundSource() {
4623
4635
  let View = this.View;
4636
+ let viewMode = this.viewMode();
4637
+ let arrayMode = this.arrayMode();
4638
+ let isp = this.ItemSourceProperty();
4639
+ let customCells = this.UseCustomCells();
4640
+ let dynColDefs = this.DynamicRowColumnsDefinition();
4624
4641
  let thsTdsProviders = [...(this.EsThTdProvider ? [this.EsThTdProvider] : []), ...this.ThTdProvider];
4625
4642
  if (thsTdsProviders?.length > 0)
4626
4643
  await forkJoin(thsTdsProviders.map(t => t.LoadedSignal)).toPromise();
@@ -4631,14 +4648,14 @@ class EsTableComponent {
4631
4648
  // Questo dev'essere per forza lanciato dopo **bindDisplayToLoadedItemsOrGroups** dato che è lì che alcune cose vengono valorizzate
4632
4649
  this.setupPagingInformations();
4633
4650
  // Molte cose sono ovviamente disponibili solo in modalità View
4634
- if ((this.viewMode() || this.arrayMode()) && this.UseCustomCells()) {
4635
- let view = this.viewMode() ? View : null;
4636
- let itemsAndGroups = this.viewMode() ? [...((this.ItemSourceProperty() ? view[this.ItemSourceProperty()] : view.items) || []), ...(view.groups || [])] : View;
4637
- let si = this.viewMode() ? view.selection : this.arraymodeSelection;
4651
+ if ((viewMode || arrayMode) && customCells) {
4652
+ let view = viewMode ? View : null;
4653
+ let itemsAndGroups = viewMode ? [...((isp ? view[isp] : view.items) || []), ...(view.groups || [])] : View;
4654
+ let si = viewMode ? view.selection : this.arraymodeSelection;
4638
4655
  // N.B: Rispettare l'ordine di queste 3 macrocategorie è VITALE
4639
4656
  // ************************************* Sistemazioni di TH, TD, e visibilità varie *************************************
4640
4657
  // Se ho definizioni dinamiche, prima di qualsiasi altra cosa devo trasformarle in th/td in modo che poi il codice qui sotto faccia le sue magie
4641
- if ((this.DynamicRowColumnsDefinition()?.length || 0) > 0) {
4658
+ if ((dynColDefs?.length || 0) > 0) {
4642
4659
  this.logger.log("Generating ths and tds from Dynamic definition");
4643
4660
  let ret = this.dynamicMode_H.emitThsAndTdsBasedOnDynamicDefinition();
4644
4661
  this.EsThs = ret.ths;
@@ -4664,7 +4681,7 @@ class EsTableComponent {
4664
4681
  // Prepassaggio per tirare fuori tutte le info utili sugli headers in modo da non ricacolarseli sempre dopo
4665
4682
  let hI = this.columnMetadata_H.evaluateHeadersGroupingInfos(this.EsThs);
4666
4683
  // Valuta lo stato iniziale di selezione a range
4667
- this.selection_H.evaluateSingleCellSelection(itemsAndGroups, hI.leafs, this.DynamicRowColumnsDefinition());
4684
+ this.selection_H.evaluateSingleCellSelection(itemsAndGroups, hI.leafs, dynColDefs);
4668
4685
  if (this.arrayMode()) // In modalità array non ho un backend...
4669
4686
  this.rowGrouping_H.arrayModeReviewGroupings(hI.leafs); // ... i raggruppamenti li devo fare lato client
4670
4687
  this.columnMetadata_H.reviewColumnsList(hI.leafs); // Aggiorna la lista delle colonne da mostrare nella dialog per ordinamento ecc
@@ -4688,10 +4705,10 @@ class EsTableComponent {
4688
4705
  this.ResearchNeeded = false;
4689
4706
  }
4690
4707
  }
4691
- else if ((this.viewMode() || this.arrayMode()) && !this.UseCustomCells()) {
4708
+ else if ((viewMode || arrayMode) && !customCells) {
4692
4709
  // Riallineo le info di selezione degli elementi della View
4693
- let items = this.viewMode() ? (this.ItemSourceProperty() ? View[this.ItemSourceProperty()] : View.items) : View;
4694
- let si = this.viewMode() ? View.selection : this.arraymodeSelection;
4710
+ let items = viewMode ? (isp ? View[isp] : View.items) : View;
4711
+ let si = viewMode ? View.selection : this.arraymodeSelection;
4695
4712
  this.selection_H.evaluateSelection(items, si);
4696
4713
  }
4697
4714
  // Per essere sicuro che dopo un bind di oggetti la es-table aggiorni la grafica
@@ -4845,11 +4862,12 @@ class EsTableComponent {
4845
4862
  columnsCache[col.id] = col;
4846
4863
  }
4847
4864
  this.TMPRowTDs = {};
4865
+ let bs = this.boundSource();
4866
+ let defaultAlignment = this.DefaultAlignment();
4848
4867
  // Variabile d'appoggio per permettermi di inserire tutte le colonne "Fixed" davanti
4849
4868
  let contextFixeds = {};
4850
4869
  for (let i = 0; i < tds.length; i++) {
4851
4870
  let td = tds[i];
4852
- let bs = this.boundSource();
4853
4871
  for (let i = 0; i < bs.length; i++) {
4854
4872
  let item = bs[i];
4855
4873
  let ctx = item._hash;
@@ -4882,7 +4900,7 @@ class EsTableComponent {
4882
4900
  Multi: td._multi,
4883
4901
  MultiProp: td._multi ? td.td.split('_')[0] : null,
4884
4902
  MultiIndex: td._multi ? td.td.split('_')[1] : null,
4885
- Alignment: (td.tdAlignment || th.thAlignment || this.DefaultAlignment()).toLowerCase(),
4903
+ Alignment: (td.tdAlignment || th.thAlignment || defaultAlignment).toLowerCase(),
4886
4904
  Format: td.tdFormat || th.thFormat,
4887
4905
  PropertyName: th.thProperty,
4888
4906
  PropertyType: th.thType,
@@ -5070,10 +5088,10 @@ class EsTableComponent {
5070
5088
  * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti
5071
5089
  */
5072
5090
  globalCheckChanged(forcedVal = null) {
5073
- debugger;
5074
5091
  this.selection_H.clearSelectionStatusExcluding(null);
5092
+ let bs = this.boundSource();
5075
5093
  // Prendo tutti gli elementi presenti in questa vista. Se ho gruppi prendo solo i gruppi a livello 0, altrimenti prendo tutti gli oggetti per selezionarli
5076
- let items = this.boundSource().find(t => t._group) ? this.boundSource().filter(t => t._group && !t._parent) : this.boundSource();
5094
+ let items = bs.find(t => t._group) ? bs.filter(t => t._group && !t._parent) : bs;
5077
5095
  var itemSelection = this.selection_H.handleItemsSelection(items, forcedVal, this.globalCheck());
5078
5096
  this.changed();
5079
5097
  this.onSelectionChanged.emit(itemSelection);
@@ -5313,8 +5331,10 @@ class EsTableComponent {
5313
5331
  * @param {any} item Item che rappresenta il contesto su cui è stato effettuato un click
5314
5332
  */
5315
5333
  dbClickEditOrSingleClickRowSelection($event, rowItem, item) {
5334
+ let rowItm = rowItem();
5335
+ let selection = this.Selection();
5316
5336
  // Prima cosa da fare è controllare se ci sono dei range lasciati da operazioni precedenti (se applicabile) e ripulirli
5317
- if (this.rangeSelected && !$event.ctrlKey && this.Selection()) {
5337
+ if (this.rangeSelected && !$event.ctrlKey && selection) {
5318
5338
  this.logger.log("clearing previously selected range");
5319
5339
  this.selection_H.clearSelectionStatusExcluding(null);
5320
5340
  this.rangeSelected = false;
@@ -5324,11 +5344,11 @@ class EsTableComponent {
5324
5344
  if (this.Editable()) {
5325
5345
  // Secondo click: se il timer non è scaduto è un doppio click ed eseguo il resto
5326
5346
  if (this.cellDbClickTimer) {
5327
- this.logger.log("handling doubleclick on editable cell: " + (rowItem().PropertyName ? 'edit mode for property ' + rowItem().PropertyName : 'no property set, fallback to simple click'));
5328
- if (rowItem().PropertyName)
5347
+ this.logger.log("handling doubleclick on editable cell: " + (rowItm.PropertyName ? 'edit mode for property ' + rowItm.PropertyName : 'no property set, fallback to simple click'));
5348
+ if (rowItm.PropertyName)
5329
5349
  this.setupUserEdit(rowItem, item);
5330
5350
  else
5331
- this.handleRowClick($event, item, this.Selection(), true);
5351
+ this.handleRowClick($event, item, selection, true);
5332
5352
  this.clearCellClickTimer();
5333
5353
  return;
5334
5354
  }
@@ -5337,7 +5357,7 @@ class EsTableComponent {
5337
5357
  this.clearCellClickTimer();
5338
5358
  if (!this.RangeSelection() || !this.mouseIsDown) {
5339
5359
  this.logger.log("time's up for second click, handling single click");
5340
- this.handleRowClick($event, item, this.Selection(), true);
5360
+ this.handleRowClick($event, item, selection, true);
5341
5361
  }
5342
5362
  }, this.doubleClickBufferMs);
5343
5363
  }
@@ -5349,11 +5369,11 @@ class EsTableComponent {
5349
5369
  if ($event.ctrlKey)
5350
5370
  return;
5351
5371
  // Tutti i click su una cella già in edit non devono effettuare la selezione della riga
5352
- if (rowItem()._editing)
5372
+ if (rowItm._editing)
5353
5373
  return;
5354
5374
  // Per evitare di rallentare a prescindere
5355
5375
  if (!this.Editable()) {
5356
- this.handleRowClick($event, item, this.Selection(), true);
5376
+ this.handleRowClick($event, item, selection, true);
5357
5377
  return;
5358
5378
  }
5359
5379
  }
@@ -5457,10 +5477,11 @@ class EsTableComponent {
5457
5477
  */
5458
5478
  setupUserEdit(rowItem, item) {
5459
5479
  this.selection_H.clearSelectionStatusExcluding(null);
5460
- if (this.Editable() && rowItem().PropertyName) {
5480
+ let rowItm = rowItem();
5481
+ if (this.Editable() && rowItm.PropertyName) {
5461
5482
  let dynMode = (this.DynamicRowColumnsDefinition()?.length || 0) > 0;
5462
- let newValues = { _editing: true, old_value: dynMode ? item.properties[rowItem().PropertyName] : item[rowItem().PropertyName] };
5463
- rowItem.set(Object.assign(rowItem(), newValues));
5483
+ let newValues = { _editing: true, old_value: dynMode ? item.properties[rowItm.PropertyName] : item[rowItm.PropertyName] };
5484
+ rowItem.set(Object.assign(rowItm, newValues));
5464
5485
  }
5465
5486
  this.cdr.detectChanges();
5466
5487
  requestAnimationFrame(() => { this.FocusSubject.next(); });
@@ -5477,14 +5498,15 @@ class EsTableComponent {
5477
5498
  requestAnimationFrame(() => {
5478
5499
  let dynMode = (this.DynamicRowColumnsDefinition()?.length || 0) > 0;
5479
5500
  let newValues = { _editing: false };
5480
- rowItem.set(Object.assign(rowItem(), newValues));
5481
- let old = rowItem().old_value;
5482
- let niu = dynMode ? item.properties[rowItem().PropertyName] : item[rowItem().PropertyName];
5501
+ let newRowItem = Object.assign(rowItem(), newValues);
5502
+ rowItem.set(newRowItem);
5503
+ let old = newRowItem.old_value;
5504
+ let niu = dynMode ? item.properties[newRowItem.PropertyName] : item[newRowItem.PropertyName];
5483
5505
  let olddate = this.dateExts.getDateConvertion(old);
5484
5506
  let niudate = this.dateExts.getDateConvertion(niu);
5485
5507
  if ((olddate && niudate && olddate.isSame && olddate.isSame(niudate)) || old === niu)
5486
5508
  return;
5487
- this.onModelChange.emit([new EsTableModelChange(item, rowItem().ID, rowItem().PropertyName, old, niu)]);
5509
+ this.onModelChange.emit([new EsTableModelChange(item, newRowItem.ID, newRowItem.PropertyName, old, niu)]);
5488
5510
  this.selectionStatus[item._ordinal][columnIndex].val_setter(niu);
5489
5511
  });
5490
5512
  }