Administrator писал(а):
Добрый день.
По поводу I. Как предполагается писать данные в значение поля и считывать значение когда чекбоксами выбрано несколько записей?
Почти как для обычного Lookup. Очевидно, что поле со списком значений может быть только строковым. Значит, хранить значения в нём можно строкой с разделителями (как в TStrings).
У lookup поля есть свойства KeyFields, LookupKeyFields, LookupResultField. Для простоты будем считать, что они содержат по одному полю. Можно это даже сделать жёстким условием.
- KeyFields - это поле в текущем датасете, хранящие список значений
- LookupKeyFields - это поле в "справочном" датасете, из которого формируется в списке
- LookupResultFields - это поле текущего датасета, в котором будет список, соответствующий таковому для KeyFields.
Допустим, есть 2 таблицы:
Table1: ID; Title; Comment
Table2: ID; Tab1IDList; Comment;
Имеем Lookup-поле со свойствами:
KeyFields = Tab1IDList
LookupKeyFields = ID
LookupResultFields = Title
Выпадающий Lookup-список формируем примерно так: ID=Title (чтоб удобно было работать как с TStrings).
При формировании lookup-списка значения поля Tab1IDList сравниваются со значениями поля ID, совпавшие отмечаются.
При записи из выбранных ID формируется строка с разделителями, которая записывается в Tab1IDList. То же самое для поля LookupResultFields, только там будет список значений поля Title.
Цитата:
II.2 - А почему бы заранее не добавить все поля в колонки грида и проставить Visible у нужных?
Допустим, у меня 10 датасетов и 1 грид.
Цитата:
III. Такой возможности нет. И не очень понятно зачем это надо. Если выбрано все то и так понятно что чтобы получить список выбранных записей надо просто пробежаться по всему ДатаСету.
Когда помимо данных выбрано и всё остальное, то SelectedRows.Count = 0 и SelectedRows.Delete ничего не удалит.
К тому же, именно из-за SelectedRows.Count = 0, если нажать Ctrl+Del при таком выделении, то не появляется запроса на удаление - просто сразу и молча всё удаляется