2009-05-26 7 views
5

मेरे पास .NET 3.5 (विजुअल स्टूडियो 2008) WinForms एप्लिकेशन में रीडोनली मोड में डेटाग्रिड व्यू है।WindowsForms DataGridView में सेल ग्रंथों के इलिप्सिस को कैसे अक्षम करें?

कोशिकाओं की चौड़ाई बहुत छोटी है। कुछ कोशिकाओं में एक छोटी संख्या होती है। अब, यहां तक ​​कि एक छोटे से फ़ॉन्ट के साथ, कभी-कभी संख्या को इलिप्सिस के साथ दिखाया जाता है। उदाहरण के लिए "8 ...""88" के बजाय।

क्या मानक डेटाग्रिड व्यू में अगले सेल पर पाठ प्रवाह को जाने और इलिप्सिस से बचने का कोई तरीका है?

धन्यवाद!

उत्तर

2

मुझे यहां केडी 2ND द्वारा असंतोषजनक समाधान मिला। ऐसा लगता है कि इस तरह के छोटे बदलाव के लिए सेल पेंटिंग को पूरी तरह से लागू करने के लिए मूर्खतापूर्ण लगता है - कॉलम हेडर & चयनित पंक्तियों के चित्रकला को संभालने के लिए बहुत सारे काम हैं।

// you can also handle the CellPainting event for the grid rather than 
// creating a grid subclass as I have done here. 
protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) 
{ 
    var isSelected = e.State.HasFlag(DataGridViewElementStates.Selected); 

    e.Paint(e.ClipBounds, DataGridViewPaintParts.Background 
     //| DataGridViewPaintParts.Border 
     //| DataGridViewPaintParts.ContentBackground 
     //| DataGridViewPaintParts.ContentForeground 
     | DataGridViewPaintParts.ErrorIcon 
     | DataGridViewPaintParts.Focus 
     | DataGridViewPaintParts.SelectionBackground); 

    using (Brush foreBrush = new SolidBrush(e.CellStyle.ForeColor), 
     selectedForeBrush = new SolidBrush(e.CellStyle.SelectionForeColor)) 
    { 
     if (e.Value != null) 
     { 
      StringFormat strFormat = new StringFormat(); 
      strFormat.Trimming = StringTrimming.Character; 
      var brush = isSelected ? selectedForeBrush : foreBrush; 

      var fs = e.Graphics.MeasureString((string)e.Value, e.CellStyle.Font); 
      var topPos= e.CellBounds.Top + ((e.CellBounds.Height - fs.Height)/2); 

      // I found that the cell text is drawn in the wrong position 
      // for the first cell in the column header row, hence the 4px 
      // adjustment 
      var leftPos= e.CellBounds.X; 
      if (e.RowIndex == -1 && e.ColumnIndex == 0) leftPos+= 4; 

      e.Graphics.DrawString((String)e.Value, e.CellStyle.Font, 
       brush, leftPos, topPos, strFormat); 
     } 
    } 

    e.Paint(e.ClipBounds, DataGridViewPaintParts.Border); 
    e.Handled = true; 
} 

चाल मौजूदा `पेंट विधि सेल के अधिकांश के चित्र संभाल जाने के लिए है: सौभाग्य से वहाँ एक neater समाधान है। हम केवल पाठ को चित्रित करते हैं। सीमा को पाठ के बाद चित्रित किया गया है क्योंकि मैंने पाया कि अन्यथा, पाठ को कभी-कभी सीमा पर चित्रित किया जाएगा, जो खराब दिखता है।

1

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

3

डेटाग्रिड व्यू नियंत्रण के सेलपेनटिंग ईवेंट को संभाल लें।

if (e.Value != null) 
{ 
    e.Graphics.DrawString((String)e.Value, e.CellStyle.Font, 
        Brushes.Crimson, e.CellBounds.X + 2, 
        e.CellBounds.Y + 2, StringFormat.GenericDefault); 
} 

उपयोग निम्नलिखित: - MSDN कोड से

बोली

http://msdn.microsoft.com/en-us/library/hta8z9sz.aspx

नोट है कि जब आप पाठ को खुद खींचने आप StringFormat अनुकूलित करने के लिए की जरूरत है: नीचे दिए गए लिंक की जाँच करें StringFormat.GenericDefault के बजाय StringFormat ऑब्जेक्ट:

StringFormat strFormat = new StringFormat(); 
strFormat.Trimming = StringTrimming.None; 

सादर

0

एक सरल तकनीक है कि आप के लिए काम कर सकते हैं सिर्फ सवाल

1

में सेल के लिए WrapMode चालू करने के लिए डिजाइनर परिवर्तन DataGridView संपत्ति "RowDefaultCellStyle" में है -> सेट "लपेटें मोड" = "true"

संबंधित मुद्दे