Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Ни как не получается вставить долбанный ComboBox в DBGrid   Найти похожие ветки 

 
Masha Streltsova   (2004-03-07 12:26) [0]

HELP помогите пожалуйста!!! Не как не получается вставить ComboBox в DBGrid.
Я пытаюсь вставить DBLookupcombobox и постоянно натыкаюсь на какие-то проблемы, то при скролинге грида   DBLookupcombobox не исчезает то чё то ещё если не сложно скиньте исходничек с примерчиком мне на мыло: derliga@mail.ru, а то я повешусь.


 
JibSkeart ©   (2004-03-07 12:32) [1]

А что не проще ли сделать Lookup поля ?

вы бы задачу описали может все проше чем кажется :)


 
YurikGl ©   (2004-03-07 12:45) [2]

У каждой колонке в DBGrid есть PickList. Можешь его заполнять на OnShow. Но не забудь предварительно очистить.


 
YurikGl ©   (2004-03-07 13:03) [3]

Я Вам отправил пример с LookUp полями.


 
Masha Streltsova   (2004-03-07 14:04) [4]

Не PickList точно не подходит
Задача такая надо чтобы в ячейке дбгрида был вставлен выпадающий список. Причём при выборе элемента из списка он добавляется к значению в

ячейке.
Т.е. в ячейке было "англ./фр." выбираем из списка "нем." получаем "англ./фр./нем." и ещё мы можем сами вводить символы в ячейку.
Я пробовала с LookUp полями, но я в них не разобралась толком посмотрим пример YurikGl спасибо.


 
YurikGl ©   (2004-03-07 14:51) [5]

Re [4] Не понял поставленной задачи. Приведи, пожалуйста, пример из реальной системы. PickList и LookUp подходят, например, для выбора улицы в телефонном спрвочнике.


 
Masha Streltsova   (2004-03-07 20:02) [6]

например есть страны в них говорят на нескольких языках, а ячейка одна и в неё надо вписать 3 языка "англ./фр./нем." и эти языки надо выбрать из выпадающего списка вначале англ. потом фр. потом нем.
поэтому PickList точно не подходит


 
Zacho ©   (2004-03-07 21:53) [7]

Не понял. Именно для этого PickList точно подходит. А если значения надо взять из другой таблицы - то lookup поле в наборе данных.
Или возьми TDBGridEh из библиотеки EhLib - у него есть дополнительные возможности.

> Я пытаюсь вставить DBLookupcombobox

Не надо этого делать. Создай lookup поле. Хотя, в некоторых случаях, это очень не хорошо.


 
YurikGl ©   (2004-03-07 22:03) [8]

В твоем случае, на мой взгляд, нужно создать много столбцов типа boolean по числу языков. Если в столбце (напр. франц) записано true, то в этой стране говорят на францзском языке.
табл Страны
    Название:строка
    Франц:boolean
    Нем:boolean
    Англ:boolean

Второй вариант. Если в одной стране говорят не более чем на нескольких (3-4) языках то - создаешь справочник языков. В таблице стран делаешь нужное количество ссылок.

табл Страны               табл Языки
    Название:строка           IdЯзык:целое
    IdЯзык1:целое             Название языка:строка
    IdЯзык2:целое
    IdЯзык3:целое
    IdЯзык4:целое

Удачи


 
Petr V. Abramov ©   (2004-03-07 23:46) [9]

YurikGl ©   (07.03.04 22:03) [8]
 И как же потом, зная ID языка, выбрать все страны, в которых на нем говорят? Учитывая, что человек с MSSQL работает, а не с Pidarox?


 
Masha Streltsova   (2004-03-08 12:02) [10]

zacho
> Именно для этого PickList точно подходит

а как отследить событие когда мы выбираем значение из PickList, чтобы не поменять значение в ячейке, а добавить?

не YurikGl © [8] эти варианты отпадают потому что там больше 100 языков


 
YurikGl ©   (2004-03-08 12:28) [11]

re [9] А в MSSQL не работает что-ли

select .... where (IdЯзык1=15 or IdЯзык2=15 or IdЯзык3=15)
выберутся все страны, говорящие на языке с ID=15

re [10] Если максимальное количество языков, на котором могут говорить в одной стране не велико, то тебе подойдет вариант

табл Страны               табл Языки
   Название:строка           IdЯзык:целое
   IdЯзык1:целое             Название языка:строка
   IdЯзык2:целое
   IdЯзык3:целое
   IdЯзык4:целое

Есть еще один вариант. Реализовать связь многие-ко многим

табл Страны          табл Языки                  табл Связи
   IdСтрана:целое        IdЯзык:целое                IdСвязи:целое
   Название:строка       Название языка:строка       IdЯзык:целое
                                                     idСтрана:целое

Если в стране 5 говорят на языке 6 то в таблице Связи должна быть запись idЯзык=6, idСтрана=5.

но к подобным конструкциям тяжело составлять запросы.


 
Petr V. Abramov ©   (2004-03-08 13:48) [12]

> YurikGl ©   (08.03.04 12:28) [11]
> Есть еще один вариант. Реализовать связь многие-ко многим
 Вот это уже на базу похоже

> но к подобным конструкциям тяжело составлять запросы.
 К "сосискам" типа [8] к конечном итоге тяжелее

> select .... where (IdЯзык1=15 or IdЯзык2=15 or IdЯзык3=15)
 Уже многословно и будет долго выполняться. И это простейший зопрос. Т.е. только самое начало геморроя.


 
Petr V. Abramov ©   (2004-03-08 13:50) [13]

пардон, простейший запрос, конечно :)


 
YurikGl ©   (2004-03-08 14:14) [14]

Пардон в [11]сдвинулось.

табл Страны
 IdСтрана:целое
 Название:строка
                                                   
табл Языки
 IdЯзык:целое
 Название языка:строка      

табл Связи
 IdСвязи:целое
 IdЯзык:целое
 idСтрана:целое


 
Petr V. Abramov ©   (2004-03-08 14:27) [15]

> YurikGl ©   (08.03.04 14:14) [14]
 А к чему ID связи?


 
YurikGl ©   (2004-03-08 14:40) [16]

re [15]
В принципе,  IdЯзык:целое idСтрана:целое однозначно определяют связь, но иногда удобно иметь "чистый" идентефикатор записи в качестве первичного ключа.


 
Petr V. Abramov ©   (2004-03-08 14:52) [17]

Иногда удобно. А иногда он просто место жрет ( как в данном случае)


 
YurikGl ©   (2004-03-08 15:02) [18]

Ну хорошо :)

табл Связи
IdЯзык:целое
idСтрана:целое


 
Petr V. Abramov ©   (2004-03-08 15:06) [19]

YurikGl ©   (08.03.04 15:02) [18]
 :)


 
ka3ax   (2004-03-08 16:23) [20]

2Юрик и Петр. А Маша, кстати ее поздравляю с праздником, спрашивала по-моему не о структуре базы а о том как реализовать интерфейс :) А про нормализацию БД Маша наверное слыхала еще в университете чо там как ))
2Маша. Маша, все правильно, все ети варианты - нафик ты воопче не о том спрашивала в данном случае.
Но, на самом деле все просто. В этом случае всего лишь достаточно не пользоваться стандартом данным Вам со средой разработки. С Дельфи сто лет уж не робил, но из того что помню, рискну предположить (пусть меня осудят, но я уже три дня как поздравляю женщин - очч устал). На сколько я помню, ДБГрид есть наследник от КастомГрид. Проще всего в данном случае написать маленькую надстройку над дбгрид - в частности переопределить методы гетедиттекст и сетедиттекст. Смотрите поле которое Вас интересует, и при гет едит текст вставляете свой комбо бокс - то есть устанавливаете ему координаты ячейки, делаете видимым, посылаете CB_SHOWDROPDOWN (для облегчения действий, следует каждому елементу комбобокса, таг присвоить соответстующий ID языка) и выборе строки из этого комбо бокса - ))) языковому полю данной записи присваивать ID таблицы "Связи" - об этом писал ЮрикГЛ:)
Исчо придеца смареть событие перерисовки полей грида - если это твое многоязыковое поле, то ты вместо ID записи из таблицы СвязиЯзыкиСоСтранами пишешь ЯзыкНо1/ЯзыкНо2/.../Африканский.
Собсно все что я хотел сказать.
Простите если каво обидел, ноя уже пиян ((
Маша, с Праздником!


 
YurikGl ©   (2004-03-08 17:55) [21]

Я бы интерфейс сделал так. В первой форме высвечивается TGrid со странами. Рядом клавиша "Посмотреть языки". По нажатию этой клавиши выбрасывается другая форма, на которой в TGrid выводятся языки на котором говорят в стране, которая была выбрана в первой форме. Там же есть клавиша "добавить язык" Это - первый вариант.
Второй вариант. Оба Grid распологаются на одной форме, но содержание второго грида меняется на DataSource1DataChange (например) набора данных первого Gridа.


 
YurikGl ©   (2004-03-08 17:58) [22]

Дополнение к [21]. Добавление языка можно сделать так. Выводится в grid (уже третьем) список всех языков и при нажатии клавиши "добавить" он добавляется в набор данных относящийся ко второму Grid, который был упомянут в [21].

З.Ы. Объяснять, по моему, вообще не умею :( Sorry


 
Petr V. Abramov ©   (2004-03-08 18:07) [23]

> ka3ax   (08.03.04 16:23) [20]
 Оно все, конечно, складно, только ID связи все равно за уши притянуто - из таблицы связей все однозначно вытаскивается по ID страны :)
 Много не пейте :)

 Маша, с праздником!


 
Sergey Masloff   (2004-03-08 19:01) [24]

Если все же в исходной постановке то я бы сделал так (хотя изначально в одном поде список - это уродство, но случаи разные бывают)
1) В гриде Column.ButtonStyle = cbsEllipses
2) При нажатии вызывается функция которая работает примерно так

 function GetLng() : String;
 begin
   Result := "";
   with TLngSrchForm.Create(Application) do
   try
     if (ShowModal = mrOK) then
       Result := LangCode; // Это проперть поисковой формы  
   finally
     Free();
   end;
 end;

TLngSrchForm -> Форма в которой юзер сможет выбрать язык. Я бы сделал с отбором то можно втупую грид со списком всех

3) Добавляем в значение поля еще один код и разделитель (например ;) то есть было "англ;" стало "англ;нем;"

4) Предусмотреть то что если юзер удаляет 1 символ - от нудаляет и все между окружающими разделителями.


 
ka3ax   (2004-03-09 07:32) [25]

2Petr Abramov
:)
Все верно. По ID страны выбираем записи.
ComboBox - с помощью него добавлять язык будет удобно, а вот как удалять?
Вариант YurikGl в данном случае - лучше (по-моему). Кнопку сделать в полях колонки, при нажатии на нее - показываем форму с гридом, содержащим языки для выбранной страны.
Хотя, можно и еще одну кнопку в поля этой колонки добавить - при нажатии на нее выпадает список с языками, при выборе из него языка - добавляем соответствующий язык к стране.



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.023 c
7-1074653880
msgipss
2004-01-21 05:58
2004.04.04
Узнать, установлен ли на компьютере Web Server ?


1-1079600478
Виталик
2004-03-18 12:01
2004.04.04
Логические операции


3-1078404598
stone
2004-03-04 15:49
2004.04.04
Проблема с TBatchMove


11-1059376323
С@ня
2003-07-28 11:12
2004.04.04
Буфер


3-1078932076
ser k
2004-03-10 18:21
2004.04.04
есть две таблицы