2013-09-06 22 views
55

मेरे पास DataGridView में 3 कॉलम हैं। मैं जो करने की कोशिश कर रहा हूं वह सामग्री की चौड़ाई के लिए पहले 2 कॉलम ऑटो फिट है, और तीसरा कॉलम शेष स्थान भरता है।डेटाग्रिड व्यू ऑटोफिट और भरें

क्या WinForms में ऐसा करना संभव है? यदि मैं कोई उपयोग कर रहा हूं तो मैं अपने डेटा को ईएफ डेटा कॉन्टेक्स्ट से लोड कर रहा हूं। मैंने एक छवि शामिल की है कि यह वर्तमान में कैसा दिखता है।

enter image description here

उत्तर

104

आप DataGridViewColumn.AutoSizeMode संपत्ति का उपयोग करने की जरूरत है।

आप स्तंभ 0 और 1 के लिए इन मूल्यों से एक का उपयोग कर सकते हैं:

AllCells:स्तंभ चौड़ाई में स्तंभ, हेडर सेल सहित सभी सेल की सामग्री फिट करने के लिए समायोजित कर देता है।
ऑलसील्स एक्सेप्ट हैडर:कॉलम चौड़ाई हेडर सेल को छोड़कर कॉलम में सभी कोशिकाओं की सामग्री को फिट करने के लिए समायोजित करती है।
DisplayedCells:स्तंभ चौड़ाई करने के लिए समायोजित स्तंभ में सभी कोशिकाओं है कि पंक्तियों में कर रहे हैं वर्तमान में परदे पर दिखाया गया है, हेडर सेल सहित की सामग्री को फिट।
DisplayedCellsExceptHeader:स्तंभ चौड़ाई स्तंभ पंक्तियों वर्तमान में परदे पर दिखाया गया में हैं में सभी कक्षों के सामग्री फिट करने के लिए, हेडर सेल को छोड़कर समायोजित करता है।

तो फिर तुम स्तंभ 2

स्तंभ चौड़ाई समायोजित कर देता है, ताकि सभी स्तंभों की चौड़ाई वास्तव में नियंत्रण के प्रदर्शन क्षेत्र भरता के लिए भरण मूल्य का उपयोग करें ...

this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; 
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; 
this.DataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 

जैसा कि अन्य उपयोगकर्ताओं द्वारा इंगित किया गया है, डिफ़ॉल्ट मान स्तर पर DataGridView.AutoSizeColumnsMode संपत्ति के साथ सेट किया जा सकता है।

this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; 
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; 

हो सकता है:

this.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; 

महत्वपूर्ण नोट:

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


कुछ परिदृश्यों (उदाहरण के लिए कोड से परिवर्तन कोशिकाओं मूल्य) में, मैं ग्रिड ताज़ा करने के लिए DataGridView1.AutoResizeColumns(); कॉल करने के लिए किया था।

+1

पूरी तरह से काम करता है। –

+0

मैं डेटाब्रिंडिंग पॉपुलर के बाद डेटाबिंगिंग कॉम्प्लेटी विधि को कॉल करने का तरीका नहीं समझ सकता – Dan

+0

@Dan DataBindingComplete एक * विधि * नहीं है, यह एक डाटाग्रिडव्यू * ईवेंट * है जिस पर आपको सब्सक्राइब करने की आवश्यकता है। यह उत्तर http://stackoverflow.com/a/31685874/2387010 एक उदाहरण देता है। क्या इससे मदद मिलती है? – Chris

4

जांची नहीं है, लेकिन आप एक कोशिश दे सकते हैं। परीक्षण और काम कर रहा है। मुझे उम्मीद है कि आपको जो चाहिए उसे प्राप्त करने के लिए DataGridViewColum के AutoSizeMode के साथ खेल सकते हैं।

कोशिश की स्थापना

dataGridView1.DataSource = yourdatasource;<--set datasource before you set AutoSizeMode 

//Set the following properties after setting datasource 
dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 

यह काम करना चाहिए

+0

यह काम नहीं करता। जब मैं DataContext से डेटा स्रोत जोड़ा जाता है, तो फ़ॉर्म इसे प्रारंभ करने पर इसे सेट कर रहा हूं। क्या ऐसा हो सकता है? मुझे यकीन नहीं है कि इसे कहां सेट करना है क्योंकि डेटा रन टाइम पर लोड होता है और कॉलम ईएफ मॉडल से लिया जाता है। –

+0

ऐसा लगता है लेकिन नहीं, तीसरी पंक्ति काम नहीं करती है, मैंने 10 मिनट पहले इसका परीक्षण किया था। –

+0

@JamesJeffery आप स्वचालित रूप से कॉलम या मैन्युअल रूप से पॉप्युलेट कर रहे हैं? –

-1
public void setHeight(DataGridView src) 
{ 
    src.Height= src.ColumnHeadersVisible ? src.ColumnHeadersHeight : 0 + src.Rows.OfType<DataGridViewRow>().Where(row => row.Visible).Sum(row => row.Height); 
} 
+0

बस उस फ़ंक्शन को कॉल करें, इसमें –

+1

पंक्तियों की संख्या के आधार पर डेटाग्रिडव्यू ऊंचाई तय करने का ख्याल रखेगा, सबसे पहले, यह ओपी के प्रश्न का उत्तर नहीं देता है। इसके अलावा (भविष्य के संदर्भ के लिए) उत्तर में ऐसी टिप्पणी शामिल है (आप इसे संपादित कर सकते हैं)। – Joel

0
कोशिश कर रही

,

AutoSizeColumnMode = Fill; 
+0

ऐसा लगता है कि ओपी पहले से ही क्या कर रहा है – Dan

0
public static void Fill(DataGridView dgv2) 
    { 
     try 
     { 
      dgv = dgv2; 
      foreach (DataGridViewColumn GridCol in dgv.Columns) 
      { 
       for (int j = 0; j < GridCol.DataGridView.ColumnCount; j++) 
       { 
        GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
        GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
        GridCol.DataGridView.Columns[j].FillWeight = 1; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 
+1

यह कोड बहुत अच्छा नहीं है। सबसे पहले आपको नेस्टेड लूप की आवश्यकता नहीं है, जो सभी कॉलमों की चौड़ाई मोड को एक ही चीज़ (<कॉलम की संख्या>) बार में सेट करता है; आप सीधे 'ग्रिडकोल' से प्रत्येक कॉलम के ऑटोसाइमोड और फ़िलवेइट गुणों तक पहुंच सकते हैं। दूसरा यह प्रत्येक कॉलम के लिए ऑटोसाइजोड को दो अलग-अलग मानों पर सेट कर रहा है; दूसरा असाइनमेंट पहले ओवरराइट करेगा। – JonP

3

बस नियंत्रण से संपत्ति से संपत्ति को बदलने: AutoSizeColumnsMode:Fill

या कोड तक

dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;

+1

धन्यवाद। मैं इस तरह के समाधान की तलाश में था! :) –

+0

ऐसा लगता है कि ओपी पहले ही ऐसा कर रहा था – Dan

17

यह मेरा पसंदीदा तरीका है ...

_dataGrid.DataBindingComplete += (o, _) => 
    { 
     var dataGridView = o as DataGridView; 
     if (dataGridView != null) 
     { 
      dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 
      dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
     } 
    }; 
-1

इस प्रयास करें:

DGV.AutoResizeColumns(); 
    DGV.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells; 
संबंधित मुद्दे