Конференция "Прочее" » Combobox с разным наполнением для разных строк в cxGrid [D7, WinXP]
 
  • Куку (12.11.12 21:04) [0]
    Добрый день!

    Есть таблицы: СписокЧегоТоТам,  ЧегоТоТам и ВидЧегоТоТам.

    Есть cxGrid, в котором отображен СписокЧегоТоТам примерно в таком виде:
    ВидЧегоТоТам1, ЧегоТоТам1, АтрибутыСписокЧегоТоТам1
    ВидЧегоТоТам1, ЧегоТоТам11, АтрибутыСписокЧегоТоТам11
    ВидЧегоТоТам1, ЧегоТоТам111, АтрибутыСписокЧегоТоТам111
    ВидЧегоТоТам2, ЧегоТоТам2, АтрибутыСписокЧегоТоТам2
    ВидЧегоТоТам2, ЧегоТоТам22, АтрибутыСписокЧегоТоТам22
    ...

    Пользователь при работе с гридом выбирает ВидЧегоТоТам, то ему в колонке "ЧегоТоТам" выпадал список значений только выбранного вида.
    Считаем, что кол-во значений ВидЧегоТоТам ограничено (от 1 до 10).

    Как лучше это организовать? Заполнять какой-то (?) PickList? В каком направлении смотреть?
  • Куку (12.11.12 21:06) [1]
    UPD
    Желательно, чтобы уже выбранные ЧегоТоТам не присутствовали в выпадающем списке. Перестраивать каждый раз "на лету" очень бы не хотелось, или хотелось бы, но как-то поэкономнее по времени.
  • brother © (13.11.12 09:19) [2]
    ЧегоТоТам


    не совсем удачная замена...
  • DimaBr © (13.11.12 09:44) [3]
    Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
    Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.
  • DimaBr © (13.11.12 10:10) [4]
    Если у вас все ЧегоТоТам хранятся в одной таблице и выводятся одним запросом, то можно попробовать фильтровать лукап в зависимости от ВидЧегоТоТам. Например:

    procedure TForm1.cxLookupComboBox1PropertiesInitPopup(Sender: TObject);
    begin
     with cxLookupComboBox1.Properties.Grid do begin
       DataController.Filter.AddItem(nil,Columns.Items[0],foLessEqual,5,'5');// показывать все меньше 5
       DataController.Filter.Active := true;
     end;
    end;

  • Куку (14.11.12 18:54) [5]
    Внимание правильный ответ (найдено в доке по 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;

 
Конференция "Прочее" » Combobox с разным наполнением для разных строк в cxGrid [D7, WinXP]
Есть новые Нет новых   [118798   +30][b:0][p:0.001]