एक उपयोगकर्ता को सारणीबद्ध ग्रिड में डेटा को देखने और संपादित करने में सक्षम करने के लिए डिज़ाइन किया गया है, DBGrid यह "इसके" डेटा का प्रतिनिधित्व करने के तरीके को अनुकूलित करने के विभिन्न तरीके प्रदान करता है। इतने लचीलेपन के साथ, ए डेल्फी डेवलपर इसे और अधिक शक्तिशाली बनाने के लिए हमेशा नए तरीके खोज सकता है।
TDBGrid की लापता विशेषताओं में से एक यह है कि ग्रिड के ग्राहक की चौड़ाई को पूरी तरह से फिट करने के लिए विशिष्ट कॉलम की चौड़ाई को स्वचालित रूप से समायोजित करने का कोई विकल्प नहीं है। जब आप रनटाइम पर DBGrid घटक का आकार बदलते हैं, तो कॉलम की चौड़ाई का आकार परिवर्तन नहीं किया जाता है।
यदि DBGrid की चौड़ाई सभी स्तंभों की कुल चौड़ाई से बड़ी है, तो आपको अंतिम कॉलम के ठीक बाद एक खाली क्षेत्र मिलेगा। दूसरी ओर, यदि सभी कॉलम की कुल चौड़ाई DBGrid की चौड़ाई से बड़ी है, तो एक क्षैतिज स्क्रॉलबार दिखाई देगा।
स्वचालित रूप से DBGrid कॉलम चौड़ाई को समायोजित करें
एक आसान प्रक्रिया है जिसका अनुसरण आप कर सकते हैं कि चयनात्मक DBGrid कॉलम की चौड़ाई को ठीक करता है जब ग्रिड को रनटाइम पर आकार दिया जाता है।
यह ध्यान रखना महत्वपूर्ण है कि, आमतौर पर एक DBGrid में केवल दो से तीन कॉलम को वास्तव में ऑटो-आकार देने की आवश्यकता होती है; अन्य सभी कॉलम कुछ "स्थैतिक-चौड़ाई" डेटा प्रदर्शित करते हैं। उदाहरण के लिए, आप हमेशा डेटा फ़ील्ड से मान प्रदर्शित करने वाले स्तंभों के लिए निश्चित चौड़ाई निर्दिष्ट कर सकते हैं, जो TDateTimeField, TFloatField, TIntegerField और इसी तरह के प्रतिनिधित्व वाले हैं।
क्या अधिक है, आप संभवतः डेटासेट में फ़ील्ड के घटक बना सकते हैं, जो फ़ील्ड संपादक का उपयोग करके, फ़ील्ड को डेटासेट, उनकी संपत्तियों और उनके क्रम में निर्दिष्ट करने के लिए उपयोग करता है। एक TField वंशज वस्तु के साथ, आप यह इंगित करने के लिए टैग गुण का उपयोग कर सकते हैं कि उस फ़ील्ड के लिए मान प्रदर्शित करने वाला एक विशेष कॉलम ऑटो-आकार का होना चाहिए।
यह विचार है: यदि आप एक कॉलम को उपलब्ध स्थान को ऑटो-फिट करना चाहते हैं, तो TField वंशज की टैग संपत्ति के लिए एक पूर्णांक मान असाइन करें जो संबंधित कॉलम की न्यूनतम चौड़ाई को इंगित करता है।
FixDBGridColumnsWidth प्रक्रिया
शुरू करने से पहले, में OnCreate घटना डीबीग्रिड युक्त फॉर्म ऑब्जेक्ट के लिए, निर्दिष्ट TField ऑब्जेक्ट की टैग प्रॉपर्टी के लिए गैर-शून्य मान बताकर कॉलम को स्वतः-आकार बदलने की आवश्यकता है।
प्रक्रिया TForm1.FormCreate (प्रेषक: Tobject);
शुरू// सेटअप ऑटिज़ेबल स्तंभों को असाइन करके
// टैग संपत्ति में न्यूनतम चौड़ाई।
// निश्चित मूल्य का उपयोग: 40 पीएक्स
Table1.FieldByName ('FirstName')। टैग: = 40;
// वैरिएबल वैल्यू का उपयोग: की चौड़ाई
// डिफ़ॉल्ट कॉलम शीर्षक पाठ Table1.FieldByName ('लास्टनेम')। टैग: = 4 + कैनवस TextWidth (Table1.FieldByName ('LastName')। DisplayName);
समाप्त;
उपरोक्त कोड में, Table1 एक से जुड़ा एक TTable घटक है DataSource घटक, जो DBGrid के साथ जुड़ा हुआ है। Table1.Table संपत्ति DBDemos कर्मचारी तालिका की ओर इशारा करती है।
हमने FirstName और LastName फ़ील्ड के मानों को प्रदर्शित करने वाले कॉलमों को स्वतः-आकार बदलने योग्य चिह्नित किया है। अगला कदम फॉर्म के लिए OnResize इवेंट हैंडलर में हमारे FixDBGridColumnsWidth को कॉल करना है:
प्रक्रिया TForm1.FormResize (प्रेषक: Tobject);
शुरू FixDBGridColumnsWidth (DBGrid1);
समाप्त;
ध्यान दें: यह सब समझ में आता है अगर DBGrid की संरेखित संपत्ति में निम्न मान शामिल हैं: alTop, alBottom, alClient, या alCustom।
अंत में, यहाँ FixDBGridColumnsWidth प्रक्रिया का कोड है:
प्रक्रिया FixDBGridColumnsWidth (स्थिरांक DBGrid: TDBGrid);
वर i: पूर्णांक; टोटविदथ: पूर्णांक; वारविदथ: पूर्णांक; ResizableColumnCount: पूर्णांक; एसीओल्यूम: टीसीओल्यूम;
शुरू// आकार बदलने से पहले सभी कॉलम की कुल चौड़ाई
टोटविदथ: = 0;
// ग्रिड में किसी भी अतिरिक्त स्थान को कैसे विभाजित किया जाए
वारविदथ: = ०;
// कितने कॉलम को ऑटो-रिसाइज करने की जरूरत है
ResizableColumnCount: = 0;
के लिये मैं: = 0 सेवा -1 + डीबीग्रिड। कॉलम। गिनती dobegin
टोटविदथ: = टोटविदथ + डीबीग्रिड। कॉलम [i] .Width;
अगर DBGrid। कॉलम [i] .Field। टैग ० फिर
इंक (ResizableColumnCount);
समाप्त;
// स्तंभ विभाजक रेखा के लिए 1px जोड़ेंअगर DBGrid में dgColLines। विकल्प फिर
टोटविदथ: = टोटविदथ + डीबीग्रिड। कॉलम। गणना;
// इंडिकेटर कॉलम चौड़ाई जोड़ेंअगर DBGrid में dgIndicator। विकल्प फिर
टोटविदथ: = टोटविदथ + इंडिकेटरविदथ;
// चौड़ाई vale "वाम"
वारविदथ: = डीबीग्रिड। क्लाइंटविड - टोटविदथ;
// समान रूप से VarWidth वितरित करें
// सभी ऑटो-रिज़ॉल्यूशन कॉलम के लिएअगर ResizableColumnCount> 0 फिर
वर्विदथ: = विवर्थ div ResizableColumnCount;
के लिये मैं: = 0 सेवा -1 + डीबीग्रिड। कॉलम। गिनती dobegin
ACOLumn: = DBGrid। कॉलम [i];
अगर एक स्तंभ। खेत। टैग ० thenbegin
एक स्तंभ। चौड़ाई: = ACOLumn। चौड़ाई + वारविदथ;
अगर एक स्तंभ। चौड़ाई तब
एक स्तंभ। चौड़ाई: = ACOLumn। खेत। टैग;
समाप्त;
समाप्त;
समाप्त; (* FixDBGridColumnsWidth *)