@@ -432,6 +432,13 @@ public static void setDefaultMultiSortPriority(MultiSortPriority priority) {
432
432
/**
433
433
* Server-side component for the {@code <vaadin-grid-column>} element.
434
434
*
435
+ * <p>
436
+ * By default, every added column sends data to the client side regardless
437
+ * of its visibility state. To avoid sending extra data, either remove the
438
+ * column using {@link Grid#removeColumn(Column)} or use
439
+ * {@link #setGenerateDataWhenHidden(boolean)}.
440
+ * </p>
441
+ *
435
442
* @param <T>
436
443
* type of the underlying grid this column is compatible with
437
444
*/
@@ -443,6 +450,7 @@ public static class Column<T> extends AbstractColumn<Column<T>> {
443
450
private String columnKey ; // defined and used by the user
444
451
445
452
private boolean sortingEnabled ;
453
+ private boolean generateDataWhenHidden = true ;
446
454
447
455
private Component editorComponent ;
448
456
private EditorRenderer <T > editorRenderer ;
@@ -502,7 +510,8 @@ public Column(Grid<T> grid, String columnId, Renderer<T> renderer) {
502
510
var conditionalDataGenerator = new DataGenerator <T >() {
503
511
@ Override
504
512
public void generateData (T item , JsonObject jsonObject ) {
505
- if (Column .this .isVisible ()) {
513
+ if (isGenerateDataWhenHidden ()
514
+ || Column .this .isVisible ()) {
506
515
generator .generateData (item , jsonObject );
507
516
}
508
517
}
@@ -529,7 +538,9 @@ public void refreshData(T item) {
529
538
530
539
@ Override
531
540
public void setVisible (boolean visible ) {
532
- boolean resetDataCommunicator = visible && !isVisible ();
541
+ // Data has to be generated for previously hidden columns
542
+ boolean resetDataCommunicator = !isGenerateDataWhenHidden ()
543
+ && visible && !isVisible ();
533
544
super .setVisible (visible );
534
545
if (resetDataCommunicator ) {
535
546
getGrid ().getDataCommunicator ().reset ();
@@ -926,6 +937,49 @@ public boolean isSortable() {
926
937
return sortingEnabled ;
927
938
}
928
939
940
+ /**
941
+ * Sets whether the data for this column should be generated and sent to
942
+ * the client even when the column is hidden. By default, data for
943
+ * hidden columns is generated and sent to the client.
944
+ * <p>
945
+ * Setting this property to {@code false} will prevent the data for this
946
+ * column from being generated and sent to the client when the column is
947
+ * hidden. Alternatively, you can remove the column using
948
+ * {@link Grid#removeColumn(Column)} or avoid adding the column
949
+ * altogether.
950
+ * </p>
951
+ *
952
+ * @param generateDataWhenHidden
953
+ * {@code true} to generate data even when the column is
954
+ * hidden, {@code false} otherwise
955
+ * @return this column
956
+ */
957
+ public Column <T > setGenerateDataWhenHidden (
958
+ boolean generateDataWhenHidden ) {
959
+ if (this .generateDataWhenHidden == generateDataWhenHidden ) {
960
+ return this ;
961
+ }
962
+ // Data has to be generated for hidden columns.
963
+ if (!isVisible () && generateDataWhenHidden
964
+ && !isGenerateDataWhenHidden ()) {
965
+ getGrid ().getDataCommunicator ().reset ();
966
+ }
967
+ this .generateDataWhenHidden = generateDataWhenHidden ;
968
+ return this ;
969
+ }
970
+
971
+ /**
972
+ * Returns whether the data for this column is generated and sent to the
973
+ * client when the column is hidden. The default is {@code true}.
974
+ *
975
+ * @return {@code true} if data is generated even when the column is
976
+ * hidden, {@code false} otherwise
977
+ * @see #setGenerateDataWhenHidden(boolean)
978
+ */
979
+ public boolean isGenerateDataWhenHidden () {
980
+ return generateDataWhenHidden ;
981
+ }
982
+
929
983
/**
930
984
* Sets a header text to the column.
931
985
* <p>
@@ -1891,6 +1945,12 @@ protected GridArrayUpdater createDefaultArrayUpdater(
1891
1945
* see {@link #addColumn(Renderer)}.
1892
1946
* </p>
1893
1947
* <p>
1948
+ * By default, every added column sends data to the client side regardless
1949
+ * of its visibility state. To avoid sending extra data, either remove the
1950
+ * column using {@link #removeColumn(Column)} or use
1951
+ * {@link Column#setGenerateDataWhenHidden(boolean)}.
1952
+ * </p>
1953
+ * <p>
1894
1954
* <em>NOTE:</em> This method is a shorthand for
1895
1955
* {@link #addColumn(ValueProvider, BiFunction)}
1896
1956
* </p>
@@ -1918,6 +1978,12 @@ public Column<T> addColumn(ValueProvider<T, ?> valueProvider) {
1918
1978
* {@link #addComponentColumn(ValueProvider)}. For using build-in renderers,
1919
1979
* see {@link #addColumn(Renderer)}.
1920
1980
* </p>
1981
+ * <p>
1982
+ * By default, every added column sends data to the client side regardless
1983
+ * of its visibility state. To avoid sending extra data, either remove the
1984
+ * column using {@link #removeColumn(Column)} or use
1985
+ * {@link Column#setGenerateDataWhenHidden(boolean)}.
1986
+ * </p>
1921
1987
*
1922
1988
* @param valueProvider
1923
1989
* the value provider
@@ -1977,6 +2043,13 @@ private String formatValueToSendToTheClient(Object value) {
1977
2043
* built in renderers or using {@link LitRenderer}.
1978
2044
* </p>
1979
2045
*
2046
+ * <p>
2047
+ * By default, every added column sends data to the client side regardless
2048
+ * of its visibility state. To avoid sending extra data, either remove the
2049
+ * column using {@link #removeColumn(Column)} or use
2050
+ * {@link Column#setGenerateDataWhenHidden(boolean)}.
2051
+ * </p>
2052
+ *
1980
2053
* @param componentProvider
1981
2054
* a value provider that will return a component for the given
1982
2055
* item
@@ -1999,6 +2072,13 @@ public <V extends Component> Column<T> addComponentColumn(
1999
2072
* automatically configured using the return type of the given
2000
2073
* {@link ValueProvider}.
2001
2074
*
2075
+ * <p>
2076
+ * By default, every added column sends data to the client side regardless
2077
+ * of its visibility state. To avoid sending extra data, either remove the
2078
+ * column using {@link #removeColumn(Column)} or use
2079
+ * {@link Column#setGenerateDataWhenHidden(boolean)}.
2080
+ * </p>
2081
+ *
2002
2082
* @see Column#setComparator(ValueProvider)
2003
2083
* @see Column#setSortProperty(String...)
2004
2084
* @see #removeColumn(Column)
@@ -2033,6 +2113,12 @@ public <V extends Comparable<? super V>> Column<T> addColumn(
2033
2113
* or using {@link LitRenderer}.
2034
2114
* </p>
2035
2115
* <p>
2116
+ * By default, every added column sends data to the client side regardless
2117
+ * of its visibility state. To avoid sending extra data, either remove the
2118
+ * column using {@link #removeColumn(Column)} or use
2119
+ * {@link Column#setGenerateDataWhenHidden(boolean)}.
2120
+ * </p>
2121
+ * <p>
2036
2122
* <em>NOTE:</em> This method is a shorthand for
2037
2123
* {@link #addColumn(Renderer, BiFunction)}
2038
2124
* </p>
@@ -2065,6 +2151,12 @@ public Column<T> addColumn(Renderer<T> renderer) {
2065
2151
* {@link ComponentRenderer} is not as efficient as the built in renderers
2066
2152
* or using {@link LitRenderer}.
2067
2153
* </p>
2154
+ * <p>
2155
+ * By default, every added column sends data to the client side regardless
2156
+ * of its visibility state. To avoid sending extra data, either remove the
2157
+ * column using {@link #removeColumn(Column)} or use
2158
+ * {@link Column#setGenerateDataWhenHidden(boolean)}.
2159
+ * </p>
2068
2160
*
2069
2161
* @param renderer
2070
2162
* the renderer used to create the grid cell structure
@@ -2168,6 +2260,13 @@ protected BiFunction<Renderer<T>, String, Column<T>> getDefaultColumnFactory() {
2168
2260
* from a bean type with {@link #Grid(Class)}.
2169
2261
*
2170
2262
* <p>
2263
+ * By default, every added column sends data to the client side regardless
2264
+ * of its visibility state. To avoid sending extra data, either remove the
2265
+ * column using {@link #removeColumn(Column)} or use
2266
+ * {@link Column#setGenerateDataWhenHidden(boolean)}.
2267
+ * </p>
2268
+ *
2269
+ * <p>
2171
2270
* <strong>Note:</strong> This method is a shorthand for
2172
2271
* {@link #addColumn(String, BiFunction)}
2173
2272
* </p>
@@ -2202,6 +2301,13 @@ public Column<T> addColumn(String propertyName) {
2202
2301
* <strong>Note:</strong> This method can only be used for a Grid created
2203
2302
* from a bean type with {@link #Grid(Class)}.
2204
2303
*
2304
+ * <p>
2305
+ * By default, every added column sends data to the client side regardless
2306
+ * of its visibility state. To avoid sending extra data, either remove the
2307
+ * column using {@link #removeColumn(Column)} or use
2308
+ * {@link Column#setGenerateDataWhenHidden(boolean)}.
2309
+ * </p>
2310
+ *
2205
2311
* @see #addColumn(String)
2206
2312
* @see #removeColumn(Column)
2207
2313
*
@@ -2272,6 +2378,12 @@ private Object runPropertyValueGetter(PropertyDefinition<T, ?> property,
2272
2378
* <p>
2273
2379
* <strong>Note:</strong> This method can only be used for a Grid created
2274
2380
* from a bean type with {@link #Grid(Class)}.
2381
+ * <p>
2382
+ * By default, every added column sends data to the client side regardless
2383
+ * of its visibility state. To avoid sending extra data, either remove the
2384
+ * column using {@link #removeColumn(Column)} or use
2385
+ * {@link Column#setGenerateDataWhenHidden(boolean)}.
2386
+ * </p>
2275
2387
*
2276
2388
* @param propertyNames
2277
2389
* the property names of the new columns, not <code>null</code>
0 commit comments