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 A = {[n]}, B = {[s]} 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@915: val cols = {Id = Direct.readOnly [#Id] ! "Id" Direct.int, adamc@932: A = Direct.editable [#A] ! "A" Direct.int, adamc@915: B = Direct.editable [#B] ! "B" Direct.string, adamc@931: C = Direct.editable [#C] ! "C" Direct.bool, adamc@932: D = Direct.editable [#D] ! "D" F.meta, adamc@930: E = Direct.editable [#E] ! "E" (Direct.nullable Direct.int), adamc@932: 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 => Go)} adamc@915: end) adamc@915: adamc@915: fun main () = adamc@915: grid <- grid; adamc@915: return adamc@915: adamc@923: adamc@915: adamc@915: adamc@915: {render grid} adamc@915: adamc@915: