You're viewing the legacy site. Visit cxjs.io/docs for the latest documentation. Legacy site. Visit cxjs.io/docs for new docs.

Documentation

Report Edit

Grid with Row Expanding

Grid supports rendering rows in multiple lines. Lines can be shown or hidden which is convenient for implementing drill-downs and on demand content. Click on the search icon to expand the grid header with search controls. Click on the arrows to expand individual rows. Please note that search is not implemented in this example.

NameContinentBrowserOSVisits
Catherine BeattyAsiaFirefoxAndroid73
Lorena WittingAfricaSafariAndroid10
Lilly KozeySouth AmericaSafariMac OS91
Joany KesslerAsiaOperaMac OS2
Sam CroninAsiaFirefoxMac OS98
Addie JastNorth AmericaChromeUbuntu66
Delbert MayertAsiaFirefoxUbuntu91
Gideon RusselEuropeInternet ExplorerWindows12
Benedict StarkSouth AmericaOperaUbuntu46
Lewis FeestAfricaOperaWindows46
Kevon VolkmanAntarcticaInternet ExplorerAndroid71
Nyah ConroyAsiaFirefoxMac OS48
Hilma ZemlakNorth AmericaFirefoxWindows29
Trenton ParisianAustraliaSafariWindows78
Liliane SawaynEuropeEdgeUbuntu48
Frederick GottliebAntarcticaInternet ExplorerWindows45
Isidro KundeEuropeEdgeMac OS34
Peyton McCulloughSouth AmericaFirefoxiOS50
Mckenna PourosNorth AmericaOperaUbuntu68
Hillary ChamplinNorth AmericaEdgeUbuntu12
<Grid
    records-bind="$page.records"
    lockColumnWidths
    cached
    row={{
        style: {
            background: {expr: "{$record.showDescription} ? '#fff7e6' : null"}
        },
        line1: {
            columns: [
                {
                    header: "Name",
                    field: "fullName",
                    sortable: true
                },
                {
                    header: "Continent",
                    field: "continent",
                    sortable: true
                },
                {
                    header: "Browser",
                    field: "browser",
                    sortable: true
                },
                {
                    header: "OS",
                    field: "os",
                    sortable: true
                },
                {
                    header: "Visits",
                    field: "visits",
                    sortable: true,
                    align: "right"
                }, {
                    header: {
                        items: <cx>
                            <cx>
                                <Button
                                    mod="hollow"
                                    icon="search"
                                    onClick={(e, {store}) => {
                                        store.toggle('$page.showGridFilter');
                                    }}
                                />
                            </cx>
                        </cx>
                    },
                    align: "center",
                    items: <cx>
                        <cx>
                            <Button
                                mod="hollow"
                                icon="drop-down"
                                onClick={(e, {store}) => {
                                    store.toggle('$record.showDescription');
                                }}
                            />
                        </cx>
                    </cx>
                }
            ]
        },
        line2: {
            showHeader: { expr: '!!{$page.showGridFilter}' },
            visible: false,
            columns: [
                {
                    header: {
                        items: <cx>
                            <TextField
                                value-bind="$page.filter.fullName"
                                style="width: 100%"
                                autoFocus
                            />
                        </cx>
                    }
                },
                {
                    header: {
                        items: <cx>
                            <TextField
                                value-bind="$page.filter.continent"
                                style="width: 100%"
                            />
                        </cx>
                    }
                },
                {
                    header: {
                        items: <cx>
                            <TextField
                                value-bind="$page.filter.browser"
                                style="width: 100%"
                            />
                        </cx>
                    }
                },
                {
                    header: {
                        items: <cx>
                            <TextField
                                value-bind="$page.filter.os"
                                style="width: 100%"
                            />
                        </cx>
                    }
                },
                {
                    header: {
                        items: <cx>
                            <NumberField
                                value-bind="$page.filter.visits"
                                style="width: 100%"
                                inputStyle="text-align: right"
                            />
                        </cx>
                    }
                }, {
                    header: {
                        align: 'center',
                        items: <cx>
                            <cx>
                                <Button
                                    mod="hollow"
                                    icon="close"
                                    onClick={(e, {store}) => {
                                        store.toggle('$page.showGridFilter');
                                    }}
                                />
                            </cx>
                        </cx>
                    }
                }
            ]
        },
        line3: {
            visible: {expr: "{$record.showDescription}"},
            columns: [{
                colSpan: 1000,
                style: 'border-top-color: rgba(0, 0, 0, 0.05)',
                items: <cx>
                    <Svg style="width:100%px; height:400px;">
                        <Chart offset="20 -10 -40 40"
                               axes={{x: {type: NumericAxis}, y: {type: NumericAxis, vertical: true}}}>
                            <Gridlines/>
                            <LineGraph data-bind="$record.points" colorIndex={8}/>
                        </Chart>
                    </Svg>
                </cx>
            }]
        }
    }}
/>
Copied!Cx Fiddle