2010-02-22 12 views
9

मेरे रूपों में से एक में डेटाग्रिडव्यू डेटाबेस से डेटा प्रदर्शित करता है (बेशक डेटा की संख्या (इसलिए पंक्तियों की संख्या) बदल सकती है)। डेटाबेस कनेक्शन फॉर्म लोड इवेंट में है। मैं बस यह नहीं समझ सकता कि पूरे डेटाग्रिडव्यू की ऊंचाई स्वचालित रूप से प्रदर्शित होती है, जो कि प्रदर्शित होने वाली पंक्तियों की संख्या के आधार पर होती है।विनफॉर्म: डेटाग्रिडव्यू: पंक्तियों की संख्या के आधार पर ऊंचाई (ऑटोोज़ाइज)

उत्तर

4

यदि आप DataGridView.AutoSize == सत्य सेट करते हैं तो जब आप अधिक पंक्तियां जोड़ते हैं तो ग्रिड अधिक हो जाता है। अन्यथा आपको स्क्रॉलबार मिलते हैं। जब तक आप स्क्रॉलबार == नल || सेट नहीं करते हैं क्षैतिज, जिस स्थिति में पंक्तियां अंत के गायब हो जाती हैं।

किसी कारण से, DataGridView.AutoSize केवल प्रोग्रामेटिक रूप से सेट किया जा सकता है। और जब आप ग्रिड को एक ऑटोोज़ेज़ेबल नियंत्रण में डालते हैं तो कुछ अजीब व्यवहार देखे जा सकते हैं। ऐसा लगता है कि ग्रिड के आकार का जवाब नहीं है।

मैंने स्तंभ, पंक्ति, शीर्षलेख, मार्जिन, पैडिंग और सीमा आकार से ग्रिड के अपेक्षित आकार की गणना करना समाप्त कर दिया, और उसके बाद ग्रिड युक्त नियंत्रण का आकार बदलकर चार तरफ ग्रिड लगाया। वास्तव में बेकार महसूस किया लेकिन यह सबसे अच्छा है जिसके साथ मैं आ सकता था। यदि आप अभी भी आसपास हैं, तो टिप्पणी करें और मैं देखूंगा कि मुझे कोड मिल सकता है, मेरे पास यह हाथ नहीं है।

9

यह है कि मैं क्या खोज करने में कामयाब है, और यह अब तक ठीक चलाता है: यह करने के लिए

int GetDataGridViewHeight(DataGridView dataGridView) 
{ 
    var sum = (dataGridView.ColumnHeadersVisible ? dataGridView.ColumnHeadersHeight : 0) + 
       dataGridView.Rows.OfType<DataGridViewRow>().Where(r => r.Visible).Sum(r => r.Height); 

    return sum; 
} 

धन्यवाद, मैं समझाया एक UserControl में मेरी DataGridView तो मैं AutoSize सही ढंग से लागू कर सकते हैं:

// This is in a user control where the datagrid is inside (Top docked) 
protected override void OnResize(EventArgs e) 
{ 
    if (AutoSize) 
    { 
     var height = this.GetDataGridViewHeight(this.dataBoxGridView); 
     this.dataBoxGridView.Height = height; 
     this.Height = height +this.Padding.Top + this.Padding.Bottom; 
    } 
} 

मैंने इसे लागू करने के लिए सीधे डेटाग्रिड व्यू से कस्टम नियंत्रण बनाने की कोशिश नहीं की (अभी तक) कोशिश नहीं की।

+0

यह मेरे लिए काम करता था, लेकिन मुझे + चिह्न के सामने शीर्ष अभिव्यक्ति के चारों ओर कोष्ठक रखना पड़ा। मेरा मानना ​​है कि यह "ऑपरेशन का आदेश" मुद्दा है? /: ऑपरेटर के साथ। –

+0

अच्छा बिंदु। मैंने इस मुश्किल ऑपरेटर प्राथमिकता के बारे में किसी भी संदेह को असंतुष्ट करने के लिए ब्रांड्स को जोड़ा। – Larry

0

इस तरह मैंने किया। DataGridView की ऊंचाई सेट करने के लिए आप इसकी सेट ऊंचाई संपत्ति का उपयोग कर सकते हैं। फ़ॉर्म लोड पर आप डेटाग्रिडव्यू को छिपाने के लिए इस कोड का उपयोग कर सकते हैं। डेटा GridViewName.Height = 0;

फिर डाटाबेस से पंक्तियां लाने के दौरान। हम पंक्तियों की संख्या के अनुसार डेटाग्रिडव्यू ऊंचाई प्राप्त करने के लिए नीचे विधि का उपयोग कर सकते हैं।

private int dataGridViewHeight() 
    { 
     int sum = this.dataGridViewName.ColumnHeadersHeight; 

     foreach (DataGridViewRow row in this.dataGridViewName.Rows) 
      sum += row.Height + 1; // I dont think the height property includes the cell border size, so + 1 

     return sum; 
    } 
संबंधित मुद्दे