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
Ana WindlerAfricaSafariUbuntu82
Cleta MrazAsiaFirefoxMac OS34
Palma GaylordAfricaInternet ExplorerMac OS31
Jarred MillerAntarcticaSafariAndroid20
Brycen MorarAsiaInternet ExplorerMac OS32
Maxwell MonahanNorth AmericaOperaAndroid67
Daphney ManteNorth AmericaOperaiOS54
Marley RathSouth AmericaOperaMac OS42
Shemar LeuschkeAsiaFirefoxAndroid26
Eliane BoehmAntarcticaFirefoxMac OS97
Laisha HowellAfricaChromeWindows33
Natasha LemkeNorth AmericaEdgeAndroid98
Candida NicolasAsiaOperaWindows65
Helga HilpertEuropeEdgeUbuntu17
Clinton WilkinsonAustraliaOperaUbuntu39
Lulu PagacSouth AmericaOperaWindows6
Florida AufderharAustraliaChromeUbuntu4
Lulu SchulistNorth AmericaFirefoxMac OS41
Nils KuvalisAntarcticaOperaMac OS36
Curt ReynoldsSouth AmericaFirefoxUbuntu69
<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