Nici nu pare posibil să inserați un combobox în dbgrid

Nici nu pare posibil să inserați un ComboBox în DBGrid

AJUTOR vă rugăm să ajutați. Nu este imposibil să inserați ComboBox-ul în DBGrid.
Încerc să introduc DBLookupcombobox și să întâlnesc în mod constant unele probleme, atunci când derulează grila # xA0; DBLookupcombobox nu dispare atunci, chiar dacă nu este greu să aruncați codul sursă cu un eșantion pe săpunul meu: [email protected], în caz contrar mă voi spânzura.

Nu este mai ușor să faceți un câmp de căutare?

ai fi descris problema poate fi mai mult decât pare :)

Fiecare coloană din DBGrid are un PickList. Puteți să o completați cu OnShow. Dar nu uitați să-l curățați în prealabil.

Ți-am trimis un exemplu cu câmpurile LookUp.

Nu PickList doar nu se potrivește
Sarcina este astfel încât o listă de dropdown să fie inserată în celula dbgride. Și când selectați un element din listă, acesta este adăugat la valoarea din

celulă.
Ie în celula a fost "Eng./Fr." alegeți din lista "acesta". obținem "engleză / franceză / germană". și putem introduce și noi personaje în celulă.
Am încercat cu câmpurile LookUp, dar nu le-am înțeles în mod corespunzător pentru a vedea exemplul mulțumirilor lui YurikGl.

de exemplu, există țări în care vorbesc mai multe limbi, iar o celulă este una și trebuie să includă 3 limbi "engleză / franceză / germană". iar aceste limbi ar trebui să fie selectate din lista drop-down de la începutul limbii engleze. apoi Fr. apoi.
așa că PickList nu se potrivește exact

Nu înțeleg. Acesta este exact ceea ce PickList se potrivește exact. Și dacă valorile ar trebui luate dintr-un alt tabel - căutați câmpul din setul de date.
Sau luați TDBGridEh din biblioteca EhLib - are caracteristici suplimentare.

> Încerc să introduc DBLookupcombobox

Nu face asta. Creați un câmp de căutare. Deși, în unele cazuri, acest lucru nu este foarte bun.

În cazul dvs., în opinia dvs., trebuie să creați mai multe coloane de tip boolean în numărul de limbi. Dacă coloana (de ex. Limba franceză) este scrisă, atunci în această țară vorbesc franceză.
aripă Țările
# xA0; # xA0; Nume: șir
# xA0; # xA0; Franz: boolean
# xA0; # xA0; El: boolean
# xA0; # xA0; Engleză: boolean

A doua opțiune. Dacă într-o țară nu vorbește mai mult de câteva (3-4) limbi, atunci creați un director de limbi. În tabelul țărilor, faceți numărul necesar de linkuri.

aripă Țările # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; fila Limbi
# xA0; # xA0; Nume: șir # xA0; # xA0; # xA0; # xA0; # xA0; IdLanguage: Integer
# xA0; # xA0; IdName1: Integer # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; Nume de limbă: șir
# xA0; # xA0; IdYasy2: întreg
# xA0; # xA0; IdYasy3: întreg
# xA0; # xA0; IdYAzyk4: întreg

zacho
> Este exact ceea ce PickList se potrivește exact

dar cum să urmărim evenimentul atunci când selectăm o valoare din PickList astfel încât să nu schimbăm valoarea din celulă, ci să o adăugăm?

re [9] Și în MSSQL nu funcționează asta

selectați. unde (IdAk1 = 15 sau IdAk2 = 15 sau IdAkk3 = 15)
Selectați toate țările care vorbesc limba cu ID = 15

[10] Dacă numărul maxim de limbi pe care se poate vorbi într-o țară nu este mare, atunci opțiunea

aripă Țările # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; fila Limbi
# xA0; # xA0; Titlu: șir # xA0; # xA0; # xA0; # xA0; # xA0; IdLanguage: Integer
# xA0; # xA0; IdName1: Integer # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; Nume de limbă: șir
# xA0; # xA0; IdLanguage2: întreg
# xA0; # xA0; IdLanguage3: întreg
# xA0; # xA0; IdLanguage4: întreg

Există o altă opțiune. Implementați relații multi-la-multe

aripă Țările # xA0; # xA0; # xA0; # xA0; # xA0; fila Limbi # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; Tabelul de conexiuni
# xA0; # xA0; IdState: integer # xA0; # xA0; # xA0; # xA0; IdLanguage: întreg # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; IdCommunications: integer
# xA0; # xA0; Titlu: șir # xA0; # xA0; # xA0; Nume de limbă: șir # xA0; # xA0; # xA0; IdLanguage: Integer
# 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; idState: integer

Dacă în țara 5 vorbește limba 6, atunci în tabela de conexiune ar trebui să existe o înregistrare idLanguage = 6, id = 5.

dar este dificil să se formuleze interogări pentru astfel de construcții.

> dar este dificil să se formuleze interogări pentru astfel de construcții.
# xA0; la "cârnați" cum ar fi [8] este în cele din urmă mai greu

> selectați. unde (IdAk1 = 15 sau IdAk2 = 15 sau IdAkk3 = 15)
# xA0; deja vorbit și va fi efectuat pentru o lungă perioadă de timp. Și aceasta este cea mai simplă întrebare. Ie doar începutul hemoroizilor.

îmi pare rău, cel mai simplu pentru profesioniști, desigur :)

Ne pare rău în [11] mutat.

aripă Țările
# xA0; IdState: integer
# xA0; Titlu: șir
# 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;
fila Limbi
# xA0; IdLanguage: întreg
# xA0; Numele limbii: șir # xA0; # xA0; # xA0;

Conexiuni în tabel
IdCommunications: integer
# xA0; IdLanguage: întreg
# xA0; idState: integer

re [15]
În principiu, IdLanguage: integer idState: întregul identifică în mod unic relația, dar uneori este convenabil să aibă un identificator de înregistrare "curat" ca cheie primară.

Uneori este convenabil. Și uneori el doar mănâncă locul (ca în acest caz)

Conexiuni în tabel
IdLanguage: Integer
idStount: întreg

2Yurik și Peter. Și Masha, apropo, o felicit în vacanță, ea a cerut, în opinia mea, nu despre structura bazei, ci despre modul de implementare a interfeței :) Și despre normalizarea bazei de date, probabil că Masha a auzit din nou la universitate ca acolo)
2Masha. Masha, e în regulă, toate aceste variante - nafik nu ai întrebat despre asta în acest caz.
Dar, de fapt, totul este simplu. În acest caz, pur și simplu nu utilizați standardul dat cu mediul de dezvoltare. Cu Delphi sute de ani robil eu nu fac, dar din ce îmi amintesc, aș îndrăzni să sugerez (chiar condamna mine, dar am trei zile să îl felicit femei - ochch obosit). Din câte îmi amintesc, DBGrid are un moștenitor de la Castom Grid. Cel mai simplu lucru în acest caz este de a scrie o suprastructură mic peste dbgride - în special, pentru a suprascrie metodele de heteditetext și text în rețea. A se vedea câmpul pe care vă interesează, și het Editare text insera o casetă combo - adică, setați-l coordonatele celulei, ceea ce face vizibile, trimite CB_SHOWDROPDOWN (pentru a facilita acțiunile ar trebui fiecare casetă combo Element, tag-ul atribuit ID-ul limbii înrudite), cât și în liniile alegând din această Combo caseta -))) în câmpul lingvistic al acestei înregistrări pentru a atribui ID-ul tabelului "Legături" - despre asta a scris YurikGL :)
Evenimentul Ischo pridetsa smarite redă grila - dacă acesta este câmpul tău multilingv, atunci tu în loc de ID-ul înregistrării din tabelul Linking cu țările pe care le-ai scris LanguageNo1 / LanguageNo2 /. / Africa.
Sobsno tot ce am vrut să spun.
Iartă-mă dacă Cavo a jignit, dar deja pian (
Masha, în vacanță!

Adăugarea la [21]. Puteți adăuga o astfel de limbă. Acesta este afișat în lista de grilă (deja a treia) a tuturor limbilor și când apăsați butonul "add" se adaugă la setul de date aparținând celui de-al doilea Grid, care a fost menționat în [21].

ZY Explicați, în opinia mea, nu știu cum:

> ka3ax # xA0; (08.03.04 16:23) [20]
# xA0; Totul este, desigur, pliabil, numai ID-ul de conexiune este încă atras de urechi - de la masa de conectare totul este scos fără îndoială de către ID-ul țării :)
# xA0; Nu bea mult :)

# xA0; Masha, vacanță fericită!

Dacă, totuși, în declarația inițială, aș face acest lucru (deși inițial într-o singură listă lista este urâtă, dar există cazuri diferite)
1) În coloana Column.ButtonStyle = cbsEllipses
2) Atunci când este apăsată, se numește o funcție care funcționează astfel

# xA0; funcția GetLng (). string;
# xA0; începeți
# xA0; # xA0; Rezultat: = "";
# xA0; # xA0; cu TLngSrchForm.Create (Application) face
# xA0; # xA0; încercați
# xA0; # xA0; # xA0; dacă (ShowModal = mrOK) atunci
# xA0; # xA0; # xA0; # xA0; Rezultat: = LangCode; // Aceasta este formularul de căutare # xA0;
# xA0; # xA0; în cele din urmă
# xA0; # xA0; # xA0; Gratuit ();
# xA0; # xA0; sfârșitul;
# xA0; sfârșitul;

TLngSrchForm -> Forma în care utilizatorul poate alege limba. Aș face cu selecția, atunci puteți vtupuyu Grid cu o listă de toate

3) Adăugați la valoarea câmpului un alt cod și delimitator (de exemplu;) care este, a fost "engleză"; a devenit "engleza;

4) Asigurați-vă că dacă utilizatorul îndepărtează 1 caracter - de la nudaljaet și totul între delimitatoarele din jur.

2Petr Abramov
:)
Bine. Selectați intrările pentru ID-ul țării.
ComboBox - folosirea lui pentru a adăuga limba va fi convenabilă, dar cum să ștergeți?
Varianta YurikGl în acest caz este mai bună (în opinia mea). Butonul este făcut în câmpurile coloanei, când faceți clic pe el - vom afișa formularul cu o rețea care conține limbi pentru țara selectată.
Deși puteți adăuga încă un buton în coloanele acestei coloane - atunci când dați clic pe el, lista cu limbi scade, atunci când selectați o limbă din acesta - adăugăm limba corespunzătoare țării.

Memorie: 0.79 MB
Durată: 0.102 sec