adamc@915: open Dbgrid
adamc@915: 
adamc@915: table t1 : {Id : int, A : string}
adamc@915:   PRIMARY KEY Id
adamc@915: 
adamc@915: sequence s
adamc@931: table t : {Id : int, A : int, B : string, C : bool, D : int, E : option int, F : option int}
adamc@915:   PRIMARY KEY Id,
adamc@915:   CONSTRAINT Foreign FOREIGN KEY (D) REFERENCES t1(Id) ON DELETE CASCADE
adamc@915: 
adamc@932: fun page (n, s) = return <xml>A = {[n]}, B = {[s]}</xml>
adamc@915: 
adamc@915: open Make(struct
adamc@915:               val tab = t
adamc@915:               con key = [Id = _]
adamc@915: 
adamc@915:               val raw = {Id = {New = nextval s,
adamc@915:                                Inj = _},
adamc@915:                          A = {New = return 0,
adamc@915:                               Inj = _},
adamc@915:                          B = {New = return "",
adamc@915:                               Inj = _},
adamc@915:                          C = {New = return False,
adamc@915:                               Inj = _},
adamc@915:                          D = {New = return 0,
adamc@930:                               Inj = _},
adamc@930:                          E = {New = return None,
adamc@931:                               Inj = _},
adamc@931:                          F = {New = return None,
adamc@915:                               Inj = _}}
adamc@915: 
adamc@915:               structure F = Direct.Foreign(struct
adamc@915:                                                con nm = #Id
adamc@915:                                                val tab = t1
adamc@915:                                                fun render r = r.A
adamc@915:                                            end)
adamc@915: 
adamc@1093:               val cols = {Id = Direct.readOnly [#Id] "Id" Direct.int,
adamc@1093:                           A = Direct.editable [#A] "A" Direct.int,
adamc@1093:                           B = Direct.editable [#B] "B" Direct.string,
adamc@1093:                           C = Direct.editable [#C] "C" Direct.bool,
adamc@1093:                           D = Direct.editable [#D] "D" F.meta,
adamc@1093:                           E = Direct.editable [#E] "E" (Direct.nullable Direct.int),
adamc@1093:                           F = Direct.editable [#F] "F" (Direct.nullable F.meta),
adamc@915:                           DA = computed "2A" (fn r => 2 * r.A),
adamc@932:                           Link = computedHtml "Link" (fn r => <xml><a link={page (r.A, r.B)}>Go</a></xml>)}
adamc@935: 
adamc@937:               val aggregates = {Dummy1 = {Initial = (),
adamc@937:                                           Step = fn _ _ => (),
adamc@937:                                           Display = fn _ => <xml/>},
adamc@937:                                 Sum = {Initial = 0,
adamc@937:                                        Step = fn r n => r.A + n,
adamc@937:                                        Display = txt},
adamc@937:                                 Dummy2 = {Initial = (),
adamc@937:                                           Step = fn _ _ => (),
adamc@940:                                           Display = fn _ => <xml/>},
adamc@937:                                 And = {Initial = True,
adamc@937:                                        Step = fn r b => r.C && b,
adamc@937:                                        Display = txt}}
adamc@964: 
adamc@964:               val pageLength = Some 10
adamc@915:           end)
adamc@915: 
adamc@915: fun main () =
adamc@915:     grid <- grid;
adamc@940:     set (showSelection grid) True;
adamc@915:     return <xml>
adamc@915:       <head>
adamc@923:         <link rel="stylesheet" type="text/css" href="../../grid.css"/>
adamc@915:       </head>
adamc@915:       <body onload={sync grid}>
adamc@915:         {render grid}
adamc@940:         <hr/>
adamc@941:         <ccheckbox source={showSelection grid}/> Show selection<br/>
adamc@940:         Selection: <dyn signal={ls <- selection grid;
adamc@940:                                 return (List.mapX (fn r => <xml>{[r.Id]}; </xml>) ls)}/>
adamc@915:       </body>
adamc@915:     </xml>