2009-02-09 20 views
8

में एक संदेश प्रदर्शित करना संभव है मेरे पास एक डाटाग्रिड है जो सीएसवी डेटा के साथ पॉप्युलेट होता है जब उपयोगकर्ता उस पर फ़ाइल खींचता/छोड़ देता है। क्या रिक्त ग्रिड में एक संदेश प्रदर्शित करना संभव है उदाहरण के लिए "कृपया यहां एक फ़ाइल खींचें" या "यह ग्रिड वर्तमान में खाली है"। ग्रिड वर्तमान में एक गहरे भूरे रंग के बॉक्स के रूप में प्रदर्शित होता है क्योंकि मैं कॉलम आदि को सेट करने के लिए फ़ाइल खींचने तक प्रतीक्षा करता हूं।क्या एक खाली डेटाग्रिड

उत्तर

8

हमने डेटाग्रिड व्यू नियंत्रण को उपclassed और इसे जोड़ा। हमें ड्रैग/ड्रॉप कार्यक्षमता की आवश्यकता नहीं थी - हमें केवल उस उपयोगकर्ता को बताने की आवश्यकता थी जब उनकी क्वेरी से कोई डेटा वापस नहीं आया था।

हम एक emptyText संपत्ति इस तरह की घोषणा कर दी:

private string cvstrEmptyText = ""; 
    [Category("Custom")] 
    [Description("Displays a message in the DataGridView when no records are displayed in it.")] 
    [DefaultValue(typeof(string), "")] 
    public string EmptyText 
    { 
     get 
     { 
      return this.cvstrEmptyText; 
     } 
     set 
     { 
      this.cvstrEmptyText = value; 
     } 
    } 

और PaintBackground समारोह अतिभारित:

protected override void PaintBackground(Graphics graphics, Rectangle clipBounds, Rectangle gridBounds) 
    { 
     RectangleF ef; 
     base.PaintBackground(graphics, clipBounds, gridBounds); 
     if ((this.Enabled && (this.RowCount == 0)) && (this.EmptyText.Length > 0)) 
     { 
      string emptyText = this.EmptyText; 
      ef = new RectangleF(4f, (float)(this.ColumnHeadersHeight + 4), (float)(this.Width - 8), (float)((this.Height - this.ColumnHeadersHeight) - 8)); 
      graphics.DrawString(emptyText, this.Font, Brushes.LightGray, ef); 
     } 
    } 
+0

की जांच करने की आवश्यकता होगी यह कोई अतिरिक्त तर्क के साथ अच्छा और पुन: प्रयोज्य है, मैं डिजाइनर में रिक्त टेक्स्ट सेट कर सकता हूं –

1

मुझे लगता है कि यहां करने का सबसे आसान काम "यहां खींचें" करने के लिए एक विशाल लेबल नियंत्रण बनाना है और लेबल के ड्रैग/ड्रॉप ईवेंट को संभाल लें। एक बार ड्रैग/ड्रॉप पूरा हो जाने पर, लेबल को छुपाएं और ग्रिड दिखाएं।

+0

मैंने इस तकनीक का उपयोग पिछले, अच्छे और साफ और सरल में ListViews के साथ किया है! –

1

यदि आप ग्रिडव्यू का उपयोग करते हैं तो आप EmptyDataText प्रॉपर्टी का उपयोग कर सकते हैं। यह सब कुछ कर सकता है जो डाटाग्रिड कर सकता है और (आईएमएचओ) मुझे लगता है कि ज्यादातर मामलों में काम करना आसान है

+0

यह एक समाधान हो सकता है लेकिन मैं विनफॉर्म का उपयोग नहीं कर रहा हूं एएसपी। मुझे इस –

0

क्या मैं इस स्थिति में क्या फार्म के लिए एक टैब नियंत्रण जोड़ने है, डाल एक टैब में डीजीवी, और एक लेबल ('यहां खींचें' या कुछ समान) दूसरे टैब में। टैब छुपाएं। फिर यदि डीजीवी खाली है, तो लेबल के साथ टैब दिखाएं। रूटनिंगमे के उत्तर की तरह ही आप ड्रैग/ड्रॉप इवेंट को संभालेंगे, पृष्ठभूमि में डीजीवी लोड करें, और फिर लोड होने पर टैब को स्विच करें। यह अच्छा है, क्योंकि आपके पास वीएस डिज़ाइनर के दौरान टैब के बीच आसानी से आगे और पीछे स्विच करने की क्षमता भी है।

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