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
Sheldon WizaAsiaOperaWindows88
Yazmin FeilNorth AmericaOperaAndroid20
Mafalda BernhardEuropeFirefoxUbuntu59
Roscoe OndrickaEuropeEdgeUbuntu75
Mary DuBuqueAfricaInternet ExplorerMac OS90
Kristina CormierAfricaEdgeMac OS62
Barry KulasEuropeChromeWindows81
Eloisa ToyNorth AmericaOperaAndroid10
Cleve LangoshSouth AmericaChromeMac OS12
Griffin WeimannAntarcticaOperaiOS88
Kailyn DickinsonAsiaInternet ExploreriOS33
Earnest GrantSouth AmericaChromeiOS30
Horacio MurazikEuropeInternet ExplorerMac OS17
Carolyne GorczanyNorth AmericaOperaWindows42
Brenna HintzAsiaOperaiOS67
Carroll MurrayNorth AmericaFirefoxWindows78
Abigayle RunolfssonAustraliaInternet ExplorerUbuntu60
Abigail HillsAustraliaOperaiOS9
Pierce CormierSouth AmericaOperaMac OS35
Tabitha KiehnEuropeEdgeMac OS22
<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