c# - क्षैतिज स्क्रॉल करते समय टिमटिमा से डेटाग्रिड दृश्य को कैसे रोकें?




winforms datagridview (2)

इस वर्ग का उपयोग करें

public static class ExtensionMethods
{
   public static void DoubleBuffered(this DataGridView dgv, bool setting)
   {
      Type dgvType = dgv.GetType();
      PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
      pi.SetValue(dgv, setting, null);
   }
}

और इस कोड को दर्ज करें।

this.dataGridView1.DoubleBuffered(true);

का आनंद लें।

मैं खिड़कियों के रूपों C # का उपयोग कर रहा हूँ

जैसा कि स्क्रीन शॉट में दिखाया गया है, मेरे पास एक प्रपत्र है जिसमें उपयोगकर्ता नियंत्रण, एक टैब नियंत्रण और एक डाटाग्रीड दृश्य (30 पंक्तियां और 17 कॉलम) हैं। मैं DataGrdiView को भरने के लिए SQL सर्वर से डेटा पढ़ता हूं।

समस्या:

जब मैं क्षैतिज रूप से स्क्रॉल करता हूं, DataGridView दृश्य बहुत अधिक झलकता है। हालांकि स्क्रैपिंग लंबवत कोई चंचल के साथ पूर्ण रूप से काम करता है।

मैं यहाँ , यहाँ , यहां और यहां एक नज़र था लेकिन उनमें से कोई भी मेरे मुद्दे से संबंधित नहीं है।

किसी को भी क्षैतिज स्क्रॉल करते समय टिमटिमा से डेटाग्रीड DataGridView को रोकने के लिए कोई भी समाधान जानता है।


आपको केवल एक DoubleBuffered DataGridview subclass का उपयोग करने की आवश्यकता है:

class DBDataGridView : DataGridView
{
    public DBDataGridView() { DoubleBuffered = true; }
}

डबल-बफरिंग को सामान्य आउट-द-बॉक्स नियंत्रण में इंजेक्ट करना भी संभव है, लेकिन मैं अपना खुद का एक वर्ग बनाना पसंद करता हूं क्योंकि यह अन्य तरीकों से भी एक्स्टेंसिबल है ..

मैंने DoubleBuffering को चालू और बंद करने की अनुमति देने के लिए एक सार्वजनिक संपत्ति द्वारा कक्षा का विस्तार किया है ..:

public class DBDataGridView : DataGridView
{
    public new bool DoubleBuffered
    {
        get { return base.DoubleBuffered; }
        set { base.DoubleBuffered = value; }
    }

    public DBDataGridView()
    {
        DoubleBuffered = true;
    }
}

..और इसे 200 कॉलम और 2000 पंक्तियों के भार के साथ परीक्षण किया। अंतर स्पष्ट है; जबकि ऊर्ध्वाधर स्क्रॉलिंग क्षैतिज स्क्रॉलिंग के बिना काम करता था DoubleBuffering आवश्यकता है ..

ध्यान दें कि प्रपत्र में एक DoubleBuffering संपत्ति भी है, लेकिन वह किसी भी एम्बेडेड नियंत्रण का प्रचार नहीं करेगी!





datagridview