DBGrid में एक चेकबॉक्स कैसे रखें

एक के उत्पादन को अनुकूलित करने के कई तरीके और कारण हैं DBGrid में डेल्फी. एक तरीका चेकबॉक्स को जोड़ना है ताकि परिणाम अधिक नेत्रहीन रूप से आकर्षक हो।

डिफ़ॉल्ट रूप से, यदि आपके पास अपने डेटासेट में एक बुलियन फ़ील्ड है, DBGrid उन्हें प्रदर्शित करता है डेटा फ़ील्ड के मान के आधार पर "सही" या "गलत" के रूप में। हालाँकि, यह बहुत बेहतर लगता है यदि आप खेतों को संपादित करने में सक्षम करने के लिए "सही" चेकबॉक्स नियंत्रण का उपयोग करते हैं।

एक नमूना अनुप्रयोग बनाएँ

डेल्फी में एक नया रूप शुरू करें, और एक TDBGrid, TADOTable, और TADOConnection, TDataGource लगाएं।

सभी घटक नामों को छोड़ दें क्योंकि वे पहले फॉर्म में गिराए गए थे (DBGrid1, ADOQuery1, AdoTable1, आदि)। नमूना QuickiesContest.mdb एमएस एक्सेस डेटाबेस को इंगित करने के लिए ADOConnection1 घटक (TADOConnection) की एक कनेक्शनस्ट्रिंग संपत्ति सेट करने के लिए ऑब्जेक्ट इंस्पेक्टर का उपयोग करें।

DBGrid1 को DataSource1, DataSource1 से ADOTable1 और अंत में ADOTable1 से ADOConn1 से कनेक्ट करें। ADOTable1 TableName गुण को लेख तालिका (DBGrid को लेख तालिका के रिकॉर्ड को प्रदर्शित करने के लिए) को इंगित करना चाहिए।

instagram viewer

यदि आपने सभी संपत्तियों को सही ढंग से सेट किया है, जब आप एप्लिकेशन चलाते हैं (यह देखते हुए कि ADOTable1 घटक की सक्रिय संपत्ति है सही) आपको देखना चाहिए, डिफ़ॉल्ट रूप से, DBGrid डेटा के मूल्य के आधार पर बूलियन फ़ील्ड के मान को "सही" या "गलत" के रूप में प्रदर्शित करता है खेत।

एक DBGrid में चेकबॉक्स

DBGrid के सेल के अंदर एक चेकबॉक्स दिखाने के लिए, हमें रन टाइम पर हमारे लिए एक उपलब्ध कराना होगा।

पर "डेटा नियंत्रण" पृष्ठ का चयन करें घटक पैलेट और एक उठाओ TDBCheckbox. फॉर्म पर कहीं भी एक ड्रॉप करें - यह कोई फर्क नहीं पड़ता कि, अधिकांश समय के बाद से यह अदृश्य हो जाएगा या ग्रिड पर तैर जाएगा।

सुझाव: TDBCheckBox एक डेटा-जागरूक नियंत्रण है जो उपयोगकर्ता को एक एकल मान का चयन या चयन करने की अनुमति देता है, जो बूलियन फ़ील्ड के लिए उपयुक्त है।

इसके बाद, इसकी विज़िबल प्रॉपर्टी को गलत पर सेट करें। DBCheckBox1 के रंग गुण को DBGrid के समान रंग में बदलें (ताकि यह DBGrid के साथ मिश्रित हो) और कैप्शन को हटा दें।

सबसे महत्वपूर्ण बात, सुनिश्चित करें कि DBCheckBox1 DataSource1 और सही फ़ील्ड से जुड़ा है।

ध्यान दें कि उपरोक्त सभी DBCheckBox1 के संपत्ति मान इस तरह के OnCreate ईवेंट में सेट किए जा सकते हैं:

प्रक्रिया TForm1.FormCreate (प्रेषक: Tobject);
शुरू
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'विजेता';
DBCheckBox1.Vanish: = गलत;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = '';
// लेख में बाद में समझाया गया
DBCheckBox1.ValueChecked: = 'यस ए विनर!'
DBCheckBox1.ValueUnChecked: = 'इस बार नहीं';
समाप्त;

इसके बाद जो आता है वह सबसे दिलचस्प हिस्सा है। DBGrid में बूलियन फ़ील्ड को संपादित करते समय, हमें यह सुनिश्चित करने की आवश्यकता है कि DBCheckBox1 को ("फ़्लोटिंग") सेल में DBGrid में बूलियन फ़ील्ड प्रदर्शित करते हुए रखा गया है।

बूलियन फ़ील्ड्स ("विजेता" कॉलम) में ले जाने वाली (गैर-केंद्रित) कोशिकाओं के बाकी के लिए, हमें बूलियन मान (ट्रू / फाल्स) के कुछ ग्राफिकल प्रतिनिधित्व प्रदान करने की आवश्यकता है। इसका मतलब है कि आपको ड्राइंग के लिए कम से कम दो छवियों की आवश्यकता है: चेक किए गए राज्य के लिए एक (ट्रू वैल्यू) और एक अनचेक स्टेट के लिए (फाल्स वैल्यू)।

इसे पूरा करने का सबसे आसान तरीका डीबीग्रिड के कैनवास पर सीधे आकर्षित करने के लिए विंडोज एपीआई ड्रॉफ्रैमकंट्रोल फ़ंक्शन का उपयोग करना है।

यहाँ DBGrid के OnDrawColumnCell ईवेंट हैंडलर में कोड है जो तब होता है जब ग्रिड को सेल को पेंट करने की आवश्यकता होती है।

प्रक्रिया TForm1.DBGrid1DrawColumnCell (
प्रेषक: Tobject; const Rect: TRect; DataCol:
पूर्णांक; कॉलम: टीसीओल्यूम; राज्य: TGridDrawState);
स्थिरांक की जाँच कर ली गयी है: सरणी[बूलियन] का अंजर =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK या DFCS_CHECKED);
वर
ड्रास्टेट: पूर्णांक;
दराज: टीआरटी;
beginif (gdFocused में राज्य) thenbeginif (स्तंभ। खेत। फ़ील्डनाम = DBCheckBox1.DataField) thenbegin
DBCheckBox1.eft: = आयत। वाम + DBGrid1.eft + 2;
DBCheckBox1.Top: = रेक्ट। शीर्ष + DBGrid1.top + 2;
DBCheckBox1.Width: = रेक्ट। अधिकार - पंथ। बाएं;
DBCheckBox1.Height: = रेक्ट। निचला - भाग। ऊपर;
DBCheckBox1.Vouble: = सच;
endendelsebeginif (स्तंभ। खेत। फ़ील्डनाम = DBCheckBox1.DataField) thenbegin
DrawRect: = रेक्ट;
इन्फ्लेटरेक्ट (ड्राट्रक्ट, -1, -1);
ड्रास्टेट: = ISChecked [कॉलम। खेत। AsBoolean];
DBGrid1.Canvas। फिलरक्ट (रेक्ट);
ड्राफ्रेमकंट्रोल (DBGrid1.Canvas) संभाल, ड्राकट,
DFC_BUTTON, ड्रास्टेट);
समाप्त;
समाप्त;
समाप्त;

इस चरण को समाप्त करने के लिए, हमें यह सुनिश्चित करना होगा कि जब हम सेल छोड़ते हैं तो DBCheckBox1 अदृश्य है:

प्रक्रिया TForm1.DBGrid1ColExit (प्रेषक: TObject);
beginif DBGrid1.SelectedField। फ़ील्डनाम = DBCheckBox1.DataField फिर
DBCheckBox1.Vouble: = गलत
समाप्त;

हमें संभालने के लिए सिर्फ दो और घटनाओं की आवश्यकता है।

ध्यान दें कि संपादन मोड में होने पर, सभी कीस्ट्रोक DBGrid के सेल में जा रहे हैं, हमें यह सुनिश्चित करना होगा कि उन्हें चेकबॉक्स में भेजा जाए। चेकबॉक्स के मामले में हम मुख्य रूप से [टैब] और [स्पेस] कुंजी में रुचि रखते हैं। [टैब] को इनपुट फ़ोकस को अगले सेल पर ले जाना चाहिए, और [स्पेस] को चेकबॉक्स की स्थिति को टॉगल करना चाहिए।

प्रक्रिया TForm1.DBGrid1KeyPress (प्रेषक: Tobject; var कुंजी: चार);
beginif (कुंजी = Chr (9)) फिर बाहर निकलें;
अगर (DBGrid1.SelectedField। फ़ील्डनाम = DBCheckBox1.DataField) thenbegin
DBCheckBox1.SetFocus;
SendMessage (DBCheckBox1.Handle, WM_Char, शब्द (की), 0);
समाप्त;
समाप्त;

उपयोगकर्ता चेक या बॉक्स को अनचेक करने के लिए यह चेकबॉक्स के कैप्शन के लिए उपयुक्त हो सकता है। ध्यान दें कि DBCheckBox में दो गुण होते हैं (ValueChecked और ValueUnChecked) चेकबॉक्स द्वारा प्रतिनिधित्व किए गए फ़ील्ड मान को चेक या अनचेक करने के लिए निर्दिष्ट करने के लिए उपयोग किया जाता है।

यह मान प्राप्त संपत्ति "हाँ, एक विजेता!" रखती है, और ValueUnChecked बराबर होती है "इस बार नहीं।"

प्रक्रिया TForm1.DBCheckBox1 क्लिक करें (प्रेषक: TObject);
beginif DBCheckBox1.Checked फिर
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
अन्य
DBCheckBox1.Caption: = DBCheckBox1.ValueUnChecked;
समाप्त;

प्रोजेक्ट चलाएँ और आप विजेता फ़ील्ड के कॉलम में सभी चेकबॉक्स देखेंगे।

instagram story viewer