@@ -432,6 +432,13 @@ public static void setDefaultMultiSortPriority(MultiSortPriority priority) {
432432 /**
433433 * Server-side component for the {@code <vaadin-grid-column>} element.
434434 *
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+ *
435442 * @param <T>
436443 * type of the underlying grid this column is compatible with
437444 */
@@ -443,6 +450,7 @@ public static class Column<T> extends AbstractColumn<Column<T>> {
443450 private String columnKey ; // defined and used by the user
444451
445452 private boolean sortingEnabled ;
453+ private boolean generateDataWhenHidden = true ;
446454
447455 private Component editorComponent ;
448456 private EditorRenderer <T > editorRenderer ;
@@ -502,7 +510,8 @@ public Column(Grid<T> grid, String columnId, Renderer<T> renderer) {
502510 var conditionalDataGenerator = new DataGenerator <T >() {
503511 @ Override
504512 public void generateData (T item , JsonObject jsonObject ) {
505- if (Column .this .isVisible ()) {
513+ if (isGenerateDataWhenHidden ()
514+ || Column .this .isVisible ()) {
506515 generator .generateData (item , jsonObject );
507516 }
508517 }
@@ -529,7 +538,9 @@ public void refreshData(T item) {
529538
530539 @ Override
531540 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 ();
533544 super .setVisible (visible );
534545 if (resetDataCommunicator ) {
535546 getGrid ().getDataCommunicator ().reset ();
@@ -926,6 +937,49 @@ public boolean isSortable() {
926937 return sortingEnabled ;
927938 }
928939
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+
929983 /**
930984 * Sets a header text to the column.
931985 * <p>
@@ -1891,6 +1945,12 @@ protected GridArrayUpdater createDefaultArrayUpdater(
18911945 * see {@link #addColumn(Renderer)}.
18921946 * </p>
18931947 * <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>
18941954 * <em>NOTE:</em> This method is a shorthand for
18951955 * {@link #addColumn(ValueProvider, BiFunction)}
18961956 * </p>
@@ -1918,6 +1978,12 @@ public Column<T> addColumn(ValueProvider<T, ?> valueProvider) {
19181978 * {@link #addComponentColumn(ValueProvider)}. For using build-in renderers,
19191979 * see {@link #addColumn(Renderer)}.
19201980 * </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>
19211987 *
19221988 * @param valueProvider
19231989 * the value provider
@@ -1977,6 +2043,13 @@ private String formatValueToSendToTheClient(Object value) {
19772043 * built in renderers or using {@link LitRenderer}.
19782044 * </p>
19792045 *
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+ *
19802053 * @param componentProvider
19812054 * a value provider that will return a component for the given
19822055 * item
@@ -1999,6 +2072,13 @@ public <V extends Component> Column<T> addComponentColumn(
19992072 * automatically configured using the return type of the given
20002073 * {@link ValueProvider}.
20012074 *
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+ *
20022082 * @see Column#setComparator(ValueProvider)
20032083 * @see Column#setSortProperty(String...)
20042084 * @see #removeColumn(Column)
@@ -2033,6 +2113,12 @@ public <V extends Comparable<? super V>> Column<T> addColumn(
20332113 * or using {@link LitRenderer}.
20342114 * </p>
20352115 * <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>
20362122 * <em>NOTE:</em> This method is a shorthand for
20372123 * {@link #addColumn(Renderer, BiFunction)}
20382124 * </p>
@@ -2065,6 +2151,12 @@ public Column<T> addColumn(Renderer<T> renderer) {
20652151 * {@link ComponentRenderer} is not as efficient as the built in renderers
20662152 * or using {@link LitRenderer}.
20672153 * </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>
20682160 *
20692161 * @param renderer
20702162 * the renderer used to create the grid cell structure
@@ -2168,6 +2260,13 @@ protected BiFunction<Renderer<T>, String, Column<T>> getDefaultColumnFactory() {
21682260 * from a bean type with {@link #Grid(Class)}.
21692261 *
21702262 * <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>
21712270 * <strong>Note:</strong> This method is a shorthand for
21722271 * {@link #addColumn(String, BiFunction)}
21732272 * </p>
@@ -2202,6 +2301,13 @@ public Column<T> addColumn(String propertyName) {
22022301 * <strong>Note:</strong> This method can only be used for a Grid created
22032302 * from a bean type with {@link #Grid(Class)}.
22042303 *
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+ *
22052311 * @see #addColumn(String)
22062312 * @see #removeColumn(Column)
22072313 *
@@ -2272,6 +2378,12 @@ private Object runPropertyValueGetter(PropertyDefinition<T, ?> property,
22722378 * <p>
22732379 * <strong>Note:</strong> This method can only be used for a Grid created
22742380 * 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>
22752387 *
22762388 * @param propertyNames
22772389 * the property names of the new columns, not <code>null</code>
0 commit comments