Ні як не виходить вставити довбали ComboBox в DBGrid
HELP допоможіть будь ласка. Не як не виходить вставити ComboBox в DBGrid.
Я намагаюся вставити DBLookupcombobox і постійно натикаюся на якісь проблеми, то при скролинг гріда # XA0; DBLookupcombobox жевріє то че то ще якщо не складно скиньте ісходнічек з прімерчік мені на мило: [email protected], а то я повішуся.
А що чи не простіше зробити Lookup поля?
ви б завдання описали може все прошу ніж здається :)
У кожному стовпчику в DBGrid є PickList. Можеш його заповнювати на OnShow. Але не забудь попередньо очистити.
Я Вам відправив приклад з LookUp полями.
Чи не PickList точно не підходить
Завдання така треба щоб в осередку дбгріда був вставлений, що випадає. Причому при виборі елемента зі списку він додається до значення в
осередку.
Тобто в осередку було "англ. / фр." вибираємо зі списку "ньому." отримуємо "англ. / фр. / нім." і ще ми можемо самі вводити символи в клітинку.
Я пробувала з LookUp полями, але я в них не розібралася толком подивимося приклад YurikGl спасибі.
наприклад є країни в них говорять на декількох мовах, а осередок одна і в неї треба вписати 3 мови "англ. / фр. / нім." і ці мови треба вибрати зі списку спочатку англ. потім фр. потім ньому.
тому PickList точно не підходить
Не зрозумів. Саме для цього PickList точно підходить. А якщо значення треба взяти з іншої таблиці - то lookup поле в наборі даних.
Або візьми TDBGridEh з бібліотеки EhLib - у нього є додаткові можливості.
> Я намагаюся вставити DBLookupcombobox
Не треба цього робити. Створи lookup поле. Хоча, в деяких випадках, це дуже не добре.
У твоєму випадку, на мій погляд, потрібно створити багато стовпців типу boolean за кількістю мов. Якщо в стовпці (напр. Франц) записано true, то в цій країні говорять на францзском мовою.
табл Країни
# XA0; # XA0; Назва: рядок
# XA0; # XA0; Франц: boolean
# XA0; # XA0; Ньому: boolean
# XA0; # XA0; Англ: boolean
Другий варіант. Якщо в одній країні говорять не більше ніж на декількох (3-4) мовами то - створюєш довідник мов. У таблиці країн робиш потрібну кількість посилань.
табл Країни # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; табл Мови
# XA0; # XA0; Назва: рядок # XA0; # XA0; # XA0; # XA0; # XA0; IdЯзик: ціле
# XA0; # XA0; IdЯзик1: ціле # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; Назва мови: рядок
# XA0; # XA0; IdЯзик2: ціле
# XA0; # XA0; IdЯзик3: ціле
# XA0; # XA0; IdЯзик4: ціле
zacho
> Саме для цього PickList точно підходить
а як відстежити подія коли ми вибираємо значення з PickList, щоб не поміняти значення в осередку, а додати?
re [9] А в MSSQL не працює что-ли
select. where (IdЯзик1 = 15 or IdЯзик2 = 15 or IdЯзик3 = 15)
виберуться всі країни, що говорять на мові з ID = 15
re [10] Якщо максимальна кількість мов, на якому можуть говорити в одній країні не велика, то тобі підійде варіант
табл Країни # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; табл Мови
# XA0; # XA0; Назва: рядок # XA0; # XA0; # XA0; # XA0; # XA0; IdЯзик: ціле
# XA0; # XA0; IdЯзик1: ціле # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; Назва мови: рядок
# XA0; # XA0; IdЯзик2: ціле
# XA0; # XA0; IdЯзик3: ціле
# XA0; # XA0; IdЯзик4: ціле
Є ще один варіант. Реалізувати зв'язок багато-до багатьох
табл Країни # XA0; # XA0; # XA0; # XA0; # XA0; табл Мови # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; табл Зв'язки
# XA0; # XA0; IdСтрана: ціле # XA0; # XA0; # XA0; # XA0; IdЯзик: ціле # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; IdСвязі: ціле
# XA0; # XA0; Назва: рядок # XA0; # XA0; # XA0; Назва мови: рядок # XA0; # XA0; # XA0; IdЯзик: ціле
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; idСтрана: ціле
Якщо в країні 5 розмовляють мовою 6 то в таблиці Зв'язки повинна бути запис idЯзик = 6, idСтрана = 5.
але до подібних конструкцій важко складати запити.
> Але до подібних конструкцій важко складати запити.
# XA0; К "сосисок" типу [8] до кінцевому підсумку важче
> Select. where (IdЯзик1 = 15 or IdЯзик2 = 15 or IdЯзик3 = 15)
# XA0; Уже багатослівно і буде довго виконуватися. І це найпростіший зопрос. Тобто тільки самий початок геморою.
пардон, найпростіший за прос, звичайно :)
Пардон в [11] зрушила.
табл Країни
# XA0; IdСтрана: ціле
# XA0; Назва: рядок
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0;
табл Мови
# XA0; IdЯзик: ціле
# XA0; Назва мови: рядок # XA0; # XA0; # XA0;
табл Зв'язки
# XA0; IdСвязі: ціле
# XA0; IdЯзик: ціле
# XA0; idСтрана: ціле
re [15]
В принципі, # XA0; IdЯзик: ціле idСтрана: ціле однозначно визначають зв'язок, але іноді зручно мати "чистий" ідентефікатора записи в якості первинного ключа.
Іноді зручно. А іноді він просто місце жере (як в даному випадку)
табл Зв'язки
IdЯзик: ціле
idСтрана: ціле
2Юрік і Петро. А Маша, до речі її вітаю зі святом, питала по-моєму не про структуру бази а про те як реалізувати інтерфейс :) А про нормалізацію БД Маша напевно чула ще в університеті чо там як))
2Маша. Маша, все правильно, все єті варіанти - нафік ти воопче не про те питала в даному випадку.
Але, насправді все просто. В цьому випадку всього лише досить не користуватися стандартом даними Вам із середовищем розробки. З Дельфі сто років чи не робіл, але з того що пам'ятаю, ризикну припустити (нехай мене засудять, але я вже три дні як вітаю жінок - очч втомився). На скільки я пам'ятаю, ДБГрід є спадкоємець від КастомГрід. Найпростіше в даному випадку написати маленьку надбудову над дбгрід - зокрема перевизначити методи гетедіттекст і сетедіттекст. Дивіться поле яке Вас цікавить, і при гет Едіт текст вставляєте свій комбо бокс - тобто встановлюєте йому координати осередку, робите видимим, посилаєте CB_SHOWDROPDOWN (для полегшення дій, слід кожному елементів комбобокса, таг привласнити відпо ID мови) і виборі рядки з цього комбо боксу -))) мовною полю цього запису привласнювати ID таблиці "Зв'язки" - про це писав ЮрікГЛ :)
Исчо періодиці смареть подія перемальовування полів гріда - якщо це твоє багатомовне поле, то ти замість ID записи з таблиці СвязіЯзикіСоСтранамі пишеш ЯзикНо1 / ЯзикНо2 /. / Африканський.
Собсно все що я хотів сказати.
Вибачте якщо каво образив, листопад вже піян ((
Маша, зі Святом!
Доповнення до [21]. Додавання мови можна зробити так. Виводиться в grid (вже третьому) список всіх мов і при натисканні клавіші "додати" він додається в набір даних відноситься до другого Grid, який був згаданий в [21].
З.И. Пояснювати, по моєму, взагалі не вмію :( Sorry
> ka3ax # XA0; (08.03.04 16:23) [20]
# XA0; Воно все, звичайно, складно, тільки ID зв'язку все одно за вуха притягнуто - з таблиці зв'язків все однозначно витягується по ID країни :)
# XA0; Багато не пийте :)
# XA0; Маша, зі святом!
Якщо все ж у вихідній постановці то я б зробив так (хоча спочатку в одному поді список - це каліцтво, але випадки різні бувають)
1) В гріді Column.ButtonStyle = cbsEllipses
2) При натисканні викликається функція яка працює приблизно так
# XA0; function GetLng (). String;
# XA0; begin
# XA0; # XA0; Result: = "";
# XA0; # XA0; with TLngSrchForm.Create (Application) do
# XA0; # XA0; try
# XA0; # XA0; # XA0; if (ShowModal = mrOK) then
# XA0; # XA0; # XA0; # XA0; Result: = LangCode; // Це Проперті пошукової форми # XA0;
# XA0; # XA0; finally
# XA0; # XA0; # XA0; Free ();
# XA0; # XA0; end;
# XA0; end;
TLngSrchForm -> Форма в якій користувач зможе вибрати мову. Я б зробив з відбором то можна тупо грід зі списком всіх
3) Додаємо в значення поля ще один код і роздільник (наприклад;) тобто було "англ;" стало "англ; ньому;"
4) Передбачити то що якщо юзер видаляє 1 символ - від нудаляет і все між навколишніми роздільниками.
2Petr Abramov
:)
Все вірно. За ID країни вибираємо записи.
ComboBox - за допомогою нього додавати мову буде зручно, а ось як видаляти?
Варіант YurikGl в даному випадку - краще (по-моєму). Кнопку зробити в полях колонки, при натисканні на неї - показуємо форму з ґрідом, що містить мови для обраної країни.
Хоча, можна і ще одну кнопку в поля цієї колонки додати - при натисканні на неї випадає список з мовами, при виборі з нього мови - додаємо відповідну мову до країни.
Пам'ять: 0.79 MB
Час: 0.102 c