अब तक का सबसे अच्छा डाटा एडिटिंग ग्रिड बनाना चाहते हैं? नीचे लुकअप फ़ील्ड संपादित करने के लिए उपयोगकर्ता इंटरफ़ेस बनाने के निर्देश दिए गए हैं एक DBGrid के अंदर. विशेष रूप से, हम देख सकते हैं कि एक DBGrid के सेल में DBLookupComboBox कैसे रखें।
यह क्या करेगा एक डेटा स्रोत से जानकारी पर कॉल करता है जिसका उपयोग ड्रॉप-डाउन बॉक्स को पॉप्युलेट करने के लिए किया जाएगा।
एक सेल के अंदर DBLookupComboBox दिखाने के लिए DBGrid, आपको पहले रन टाइम पर एक उपलब्ध कराना होगा ...
DBLookupComboBox के साथ एक लुकअप बनाएं
घटक पैलेट पर "डेटा नियंत्रण" पृष्ठ का चयन करें और एक DBLookupComboBox चुनें। फ़ॉर्म पर कहीं भी एक ड्रॉप करें और "DBLookupComboBox1" के डिफ़ॉल्ट नाम को छोड़ दें। इससे कोई फर्क नहीं पड़ता कि आप इसे ज्यादातर समय से कहां रखते हैं, यह अदृश्य या ग्रिड के ऊपर तैरता रहेगा।
मानों के साथ कॉम्बो बॉक्स को "भरने" के लिए एक और डेटासोर्स और डेटासेट घटक जोड़ें। प्रपत्र पर कहीं भी एक TDataSource (DataSource2 नाम के साथ) और TAdoQuery (नाम AdoQuery1) ड्रॉप करें।
DBLookupComboBox को ठीक से काम करने के लिए, कई और गुण सेट करने होंगे; वे लुकअप कनेक्शन की कुंजी हैं:
- डेटा स्रोत तथा जानकारी स्थान मुख्य कनेक्शन निर्धारित करें। DataField एक ऐसा क्षेत्र है जिसमें हम लुक-अप मान सम्मिलित करते हैं।
- ListSource लुकअप डेटासेट का स्रोत है।
- KeyField में क्षेत्र की पहचान करता है ListSource के मूल्य से मेल खाना चाहिए जानकारी स्थान खेत।
-
ListFields वास्तव में कॉम्बो में प्रदर्शित किए जाने वाले लुकअप डेटासेट का क्षेत्र है। ListField एक से अधिक फ़ील्ड दिखा सकता है, लेकिन गुणकों को अर्धविराम द्वारा अलग किया जाना चाहिए।
आप के लिए बड़े पर्याप्त मूल्य निर्धारित किया है DropDownWidth (एक कॉम्बो बॉक्स के) वास्तव में डेटा के कई कॉलम देखने के लिए।
यहां कोड से सभी महत्वपूर्ण गुणों को सेट करने का तरीका बताया गया है (प्रपत्र में) OnCreate घटना हैंडलर):
प्रक्रिया TForm1.FormCreate (प्रेषक: Tobject);
से शुरू DBLookupComboBox1 dobegin
डेटा स्रोत: = डेटा स्रोत 1; // -> AdoTable1 -> DBGrid1
ListSource: = DataSource2;
DataField: = 'AuthorEmail'; // AdoTable1 से - DBGrid में प्रदर्शित
कीफिल्ड: = 'ईमेल';
ListFields: = 'नाम; ईमेल';
दर्शनीय: = मिथ्या;
समाप्त;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'सेलेक्ट नाम, लेखक से ईमेल';
AdoQuery1.Open;
समाप्त;
ध्यान दें: जब आप DBLookupComboBox में एक से अधिक फ़ील्ड प्रदर्शित करना चाहते हैं, तो उपरोक्त उदाहरण की तरह, आपको यह सुनिश्चित करना होगा कि सभी कॉलम दिखाई दे रहे हैं। यह DropDownWidth गुण सेट करके किया जाता है।
हालाँकि, आप देखेंगे कि शुरू में, आपको इसे एक बहुत बड़े मूल्य पर सेट करना होगा, जिसके परिणामस्वरूप ड्रॉप की गई सूची बहुत अधिक विस्तृत हो सकती है (ज्यादातर मामलों में)। एक वर्कअराउंड में दिखाया गया है कि किसी विशेष फ़ील्ड के डिस्प्लेविद को सेट करना है ड्राॅप डाउन लिस्ट.
प्रपत्र के लिए OnCreate ईवेंट के अंदर रखा गया यह कोड सुनिश्चित करता है कि लेखक का नाम और यह ईमेल दोनों ड्रॉप-डाउन सूची के अंदर प्रदर्शित हों:
AdoQuery1.FieldByName ( 'ईमेल') DisplayWidth:। = 10;
AdoQuery1.FieldByName ( 'नाम') DisplayWidth:। = 10;
AdoQuery1.DropDownWidth: = 150;
हमारे पास क्या करने के लिए बचा है, वास्तव में एक सेल पर एक कॉम्बो बॉक्स होवर बनाना है (जब संपादन मोड में), ऑथरमेल फ़ील्ड प्रदर्शित करता है। सबसे पहले, हमें यह सुनिश्चित करने की आवश्यकता है कि DBLookupComboBox1 को स्थानांतरित किया जाए और उस सेल पर आकार दिया जाए जिसमें AuthorEmail फ़ील्ड प्रदर्शित होता है।
प्रक्रिया TForm1.DBGrid1DrawColumnCell
(प्रेषक: Tobject;
const Rect: TRect;
DataCol: पूर्णांक;
कॉलम: टीसीओल्यूम;
राज्य: TGridDrawState);
beginif (gdFocused में राज्य) thenbeginif (स्तंभ। खेत। फ़ील्डनाम = DBLookupComboBox1.DataField) thenwith DBLookupComboBox1 कर
शुरू
वाम: = पंथ। वाम + DBGrid1.eft + 2;
शीर्ष: = अनुपात। शीर्ष + DBGrid1.Top + 2;
चौड़ाई: = अनुपात। अधिकार - पंथ। बाएं;
चौड़ाई: = अनुपात। अधिकार - पंथ। बाएं;
ऊँचाई: = अनुपात। निचला - भाग। ऊपर;
दर्शनीय: = सत्य;
समाप्त;
समाप्त
समाप्त;
अगला, जब हम सेल छोड़ते हैं, तो हमें कॉम्बो बॉक्स को छिपाना पड़ता है:
प्रक्रिया TForm1.DBGrid1ColExit (प्रेषक: TObject);
beginif DBGrid1.SelectedField। फ़ील्डनाम = DBLookupComboBox1.DataField फिर
DBLookupComboBox1.Vouble: = गलत
समाप्त;
ध्यान दें कि संपादन मोड में होने पर, सभी कीस्ट्रोक DBGrid के सेल में जा रहे हैं लेकिन हमें यह सुनिश्चित करना होगा कि उन्हें DBLookupComboBox में भेजा जाए। एक DBLookupComboBox के मामले में, हम मुख्य रूप से [टैब] कुंजी में रुचि रखते हैं; इसे इनपुट फ़ोकस को अगले सेल पर ले जाना चाहिए।
प्रक्रिया TForm1.DBGrid1KeyPress (प्रेषक: Tobject; var कुंजी: चार);
beginif (कुंजी = Chr (9)) फिर बाहर जाएं;
अगर (DBGrid1.SelectedField। फ़ील्डनाम = DBLookupComboBox1.DataField) thenbegin
DBLookupComboBox1.SetFocus;
SendMessage (DBLookupComboBox1.Handle, WM_Char, शब्द (की), 0);
समाप्त
समाप्त;
जब आप किसी DBLookupComboBox से कोई आइटम ("पंक्ति") चुनते हैं, तो मान या संगत KeyField फ़ील्ड को मान के रूप में संग्रहीत किया जाता है जानकारी स्थान खेत।