2012-11-23 26 views
9

ऑटोरेसाइज़ करें मैं एक पंक्ति की ऊंचाई को स्वचालित रूप से समायोजित करने की कोशिश कर रहा हूं और मुझे यह बहुत चुनौतीपूर्ण पाया गया है।डेटाग्रिडव्यू की पंक्ति

मैं पहले से ही इस संपत्ति निर्धारित किया है:

DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells. 

मैं भी इस अन्य विधि का उपयोग कर यह कर दिया है:,

DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders) 

और यह भी पंक्ति दर पंक्ति इस का उपयोग करते हुए:

DataGridView.AutoResizeRow(i, DataGridViewAutoSizeRowMode.AllCells) 

और पंक्ति की ऊंचाई को भी बड़े मूल्य पर हार्डकोड किया, और यह काम नहीं किया !! सभी पंक्तियों को उनकी डिफ़ॉल्ट ऊंचाइयों के साथ दिखाया जाता है।

इनमें से कोई भी काम नहीं किया। मैं विकल्पों से बाहर चला रहा हूँ।

डेटाग्रिडव्यू में अधिकांश पंक्तियों का आकार बदलने की आवश्यकता नहीं है। लेकिन उनमें से एक इनके मूल्यों से भरा है:

"ए" + "\ n" + बी + "\ n" + "सी" + "\ n" + "डी" + "\ n" + " ई "

मेरा मतलब है, छोटे मूल्य लेकिन विभिन्न पंक्तियों में। मुझे उन्हें अलग-अलग लाइनों में दिखाना है, उन्हें सभी को एक साथ नहीं दिखाया जा सकता है। लेकिन डेटाग्रिडव्यू केवल पहला दिखाता है और अन्य सभी छिपे हुए हैं, क्योंकि पंक्ति ऑटोरेसीज़ नहीं होती है।

ऐसा करने के किसी भी अन्य तरीके के बारे में कोई विचार।

उत्तर

3

मुझे इस समस्या का समाधान मिला है। ग्रिड या पंक्तियों के ऑटोसाइज गुणों के साथ काम करने के बजाय, मुझे सभी ग्रिड की कोशिकाओं पर लागू होने के लिए रैपमोड का उपयोग करना चाहिए था।

DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True

यह सभी कोशिकाओं के लिए लागू किया जाता है और यह काम करता है।

+0

खुशी है कि आपको समाधान मिला (मुझे लगता है कि आपने पहले से ही रैपमोड सेट किया था और ग्रिड सेल क्षेत्र से बहने वाली कई लाइनें देख रहे थे)। मैं अपना जवाब छोड़ने जा रहा हूं क्योंकि यह एक अलग समस्या के लिए सही है (यदि आप डेटा की लंबाई बढ़ाने वाले अपने किसी भी सेल को अपडेट करते हैं, तो आकार स्वचालित रूप से ट्रिगर नहीं होगा)। –

+2

ओह - और इसे उत्तर के रूप में चिह्नित करें ताकि प्रश्न अनुत्तरित सूची को छोड़ देता है। –

5

के बाद आपको आकार बदलने की विधि पर कॉल करने की आवश्यकता है, डेटा बदल दिया गया है। DataGridView.AutoResizeRows() पर एमएसडीएन आलेख से:

पंक्ति ऊंचाई प्रति विधि कॉल केवल एक बार समायोजित की जाती है; यदि पंक्तियों की सामग्री बाद में बदल जाती है, तो पंक्तियां स्वचालित रूप से समायोजित नहीं होंगी।

इसका मतलब है कि आपको पहले और बाद में ग्रिड की लोडिंग के बाद विधि को कॉल करने की आवश्यकता है। यदि आप इस कोड को मूल रूप के नियंत्रक के भीतर कॉल कर रहे हैं, तो डाटाबेसिंग अभी तक नहीं हुई है, इसलिए डेटा वहां नहीं है।

पहले लोड हो रहा है DataBindingComplete घटना का उपयोग कर के लिए:

dataGridView1.DataBindingComplete += new 
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete); 

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); 
} 

कोशिकाओं को बाद में अद्यतन आप सबसे अच्छी जगह अपने आप को खोजने की जरूरत होगी के लिए।

+0

कारण आप वर्तमान दृष्टिकोण काम नहीं कर रहे हैं यह संभावना है कि आपके पास फॉर्म कन्स्ट्रक्टर या ऑनलोड ईवेंट के भीतर आपका कोड है। –

+0

नहीं, ग्रिडसोर्स को डेटाग्रिडव्यू पर सेट करने के बाद मैं वास्तव में ऐसा करता हूं। यह पहले से ही आबादी है। यह आखिरी बात है जो मैं करता हूं। – monican

+0

@ user1062568 जब आप इसे करते हैं? किस घटना में हैंडलर? यहां तक ​​कि यदि आप स्रोत सेट करने के बाद ऐसा करते हैं, तो यह पर्याप्त नहीं है, डेटाबेसिंग पूर्ण होने के बाद आपको इसे करना होगा। यदि आप स्रोत सेट करते हैं और फिर फॉर्म कन्स्ट्रक्टर में सभी का आकार बदलते हैं, तो यह ऊंचाई को नहीं बदलेगा। –