同一のRecordSetを、複数のRecordFormで参照してupdateした際の挙動 - Yudai-s - 05-08-2017
同一のRecordSetを、current-indexをずらして複数のRecordFormで参照し、
UIで変更した後に各RecordFormの変更内容を一括でRecordSetに反映したいです。
単一項目の変更であれば全てのレコードの変更内容が反映されるのですが、
複数項目を変更してupdateすると、
2つ目以降のRecordFormのcurrent-indexが0に変わり適切にupdateできません。
何か良い回避策はありますでしょうか。
※各RecordFormはナビゲーションパネルを非表示にしてindexをずらすため、
変更内容は行単位で競合しない作りを想定しております。
Code: {curl 8.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
{def test-data =
{RecordSet
{RecordFields
{RecordField "tf1", domain = String},
{RecordField "tf2", domain = String}
},
{RecordData tf1 = "TextField11", tf2 = "TextField12"},
{RecordData tf1 = "TextField21", tf2 = "TextField22"}
}
}
{def rf1 =
{RecordForm
record-source = test-data,
display-navigation-panel? = true,
{HBox
{TextField {bind value to "tf1"}},
{TextField {bind value to "tf2"}}
}
}
}
{set rf1.current-index = 0}
{def rf2 =
{RecordForm
record-source = test-data,
display-navigation-panel? = true,
{HBox
{TextField {bind value to "tf1"}},
{TextField {bind value to "tf2"}}
}
}
}
{set rf2.current-index = 1}
{View
{VBox
{CommandButton
label = "update",
width = 300px,
{on Action do
{rf1.update}
{rf2.update}
}
},
rf1,
rf2
},
visibility = "normal",
{on WindowClose do
{exit}
}
}
RE: 同一のRecordSetを、複数のRecordFormで参照してupdateした際の挙動 - tdeng - 05-08-2017
各RecordFormでそれぞれ異なるRecordViewを利用し、各RecordViewのrecord-sourceを同じRecordSetを指定して、対応してみたらいかがでしょうか?
RE: 同一のRecordSetを、複数のRecordFormで参照してupdateした際の挙動 - tdeng - 05-08-2017
失礼しました。 上記の対応のみでは処理が足りないようですね。RecordFormの仕様か、バグの可能性があります。。。
次のサンプルの様に対応して頂くことが可能でしょうか?
Code: {curl 8.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
{def test-data =
{RecordSet
{RecordFields
{RecordField "tf1", domain = String},
{RecordField "tf2", domain = String}
},
{RecordData tf1 = "TextField11", tf2 = "TextField12"},
{RecordData tf1 = "TextField21", tf2 = "TextField22"}
}
}
{def rv1 = {RecordView
test-data
}}
{def rv2 = {RecordView test-data}}
{def rf1 =
{RecordForm
record-source = rv1,||test-data,
display-navigation-panel? = true,
{HBox
{TextField {bind value to "tf1"}},
{TextField {bind value to "tf2"}}
}
}
}
{set rf1.current-index = 0}
{def rf2 =
{RecordForm
record-source = rv2,||test-data,
display-navigation-panel? = true,
{HBox
{TextField {bind value to "tf1"}},
{TextField {bind value to "tf2"}}
}
}
}
{set rf2.current-index = 1}
{let d1 = {Dynamic rf1.current-index}}
{let d2 = {Dynamic rf2.current-index}}
{def keep-cidx-update = {proc {rf:RecordForm}:void
def rf-idx = rf.current-index
{with rf.current-index = rf-idx do
{rf.update}
}
}
}
{{View
{VBox
{CommandButton
label = "update",
width = 300px,
{on Action do
{keep-cidx-update rf1}
set d1.value = "rf1.current-index:[" & rf1.current-index & "]"
{keep-cidx-update rf2}
set d2.value = "rf2.current-index:" & rf2.current-index & "]"
}
},
rf1,
rf2,
{VBox
d1,
d2
}
},
visibility = "normal",
{on WindowClose do
{exit}
}
}.show
}
RE: 同一のRecordSetを、複数のRecordFormで参照してupdateした際の挙動 - Yudai-s - 05-09-2017
>tdengさん
期待通りの動作になりました。ありがとうございます。
|