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
Vella StokesAsiaInternet ExplorerAndroid33
Vanessa DouglasAustraliaSafariUbuntu36
Arjun LindgrenSouth AmericaOperaUbuntu96
Giovanny MacejkovicNorth AmericaFirefoxUbuntu22
Cindy GerholdAustraliaSafariAndroid82
Raina EbertEuropeInternet ExplorerMac OS31
Kim JewessAfricaChromeUbuntu4
Monte PacochaAfricaSafariMac OS85
Skylar CreminAustraliaOperaAndroid15
Marcelo PacochaNorth AmericaEdgeUbuntu33
Mariane EbertNorth AmericaSafariWindows28
Kariane BergstromAfricaEdgeWindows41
Monica HodkiewiczAfricaChromeAndroid49
Andrew ManteSouth AmericaFirefoxiOS41
Darby RauEuropeInternet ExplorerUbuntu18
Asha HettingerAustraliaSafariMac OS41
Emelie AbshireAfricaFirefoxMac OS11
Elvie HamillNorth AmericaInternet ExplorerUbuntu43
Rita RippinAsiaOperaUbuntu68
Tiara BoyleAfricaInternet ExplorerUbuntu78
<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