-
Добрый день!
Есть таблицы: СписокЧегоТоТам, ЧегоТоТам и ВидЧегоТоТам.
Есть cxGrid, в котором отображен СписокЧегоТоТам примерно в таком виде: ВидЧегоТоТам1, ЧегоТоТам1, АтрибутыСписокЧегоТоТам1 ВидЧегоТоТам1, ЧегоТоТам11, АтрибутыСписокЧегоТоТам11 ВидЧегоТоТам1, ЧегоТоТам111, АтрибутыСписокЧегоТоТам111 ВидЧегоТоТам2, ЧегоТоТам2, АтрибутыСписокЧегоТоТам2 ВидЧегоТоТам2, ЧегоТоТам22, АтрибутыСписокЧегоТоТам22 ...
Пользователь при работе с гридом выбирает ВидЧегоТоТам, то ему в колонке "ЧегоТоТам" выпадал список значений только выбранного вида. Считаем, что кол-во значений ВидЧегоТоТам ограничено (от 1 до 10).
Как лучше это организовать? Заполнять какой-то (?) PickList? В каком направлении смотреть?
-
UPD Желательно, чтобы уже выбранные ЧегоТоТам не присутствовали в выпадающем списке. Перестраивать каждый раз "на лету" очень бы не хотелось, или хотелось бы, но как-то поэкономнее по времени.
-
ЧегоТоТам не совсем удачная замена...
-
Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE. Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.
-
Если у вас все ЧегоТоТам хранятся в одной таблице и выводятся одним запросом, то можно попробовать фильтровать лукап в зависимости от ВидЧегоТоТам. Например:
procedure TForm1.cxLookupComboBox1PropertiesInitPopup(Sender: TObject);
begin
with cxLookupComboBox1.Properties.Grid do begin
DataController.Filter.AddItem(nil,Columns.Items[0],foLessEqual,5,'5'); DataController.Filter.Active := true;
end;
end;
-
Внимание правильный ответ (найдено в доке по cxGrid): 1) Кидаем на форму (или создаем динамически - кому как нравится) cxEditRepository. 2) Создаем там нужные нам проперти. В нашем случае ComboBoxItem 3) В событии cxGridTableView1Column2GetProperties( Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AProperties: TcxCustomEditProperties); пишем что хотим, например: if ARecord.Values[cxStep1ResultTableView1Column1.Index] = null then exit;
if ARecord.RecordIndex > 3 then
AProperties := cxEditRepository1ComboBoxItem1.Properties
else
begin
cxEditRepository1ComboBoxItem2.Properties.Items.Clear;
cxEditRepository1ComboBoxItem2.Properties.Items.Add(ARecord.Values[cxStep1Result TableView1Column1.Index]+'_'+IntToStr(Sender.Index));
cxEditRepository1ComboBoxItem2.Properties.Items.Add(ARecord.Values[cxStep1Result TableView1Column1.Index]+'_*');
AProperties := cxEditRepository1ComboBoxItem2.Properties;
end;
|