2012-03-12 10 views
7

मैं कोड के साथ एक WPF डेटाग्रिड को स्क्रॉल करने का प्रयास कर रहा हूं। मैंwpf (सी #) DataGrid ScrollIntoView - पहली पंक्ति पर स्क्रॉल कैसे करें जो दिखाया नहीं गया है?

int itemNum=0; 
    private void Down_Click(object sender, RoutedEventArgs e) 
    { 
     if (itemNum + 1 > dataGridView.Items.Count - 1) return; 
     itemNum+=1; 
     dataGridView.UpdateLayout(); 
     dataGridView.ScrollIntoView(dataGridView.Items[itemNum]); 
    } 

का उपयोग यह नीचे स्क्रॉल केवल तभी itemNum पंक्ति वर्तमान में नहीं दिखाया गया है।

उदाहरण के लिए, यदि डेटा ग्रिड काफी लंबे समय 10 पंक्तियों धारण करने के लिए है और मैं 20 पंक्तियाँ है, मैं (तक itemNum 11 है) इस कार्य को करने के आदेश अगली पंक्ति पर स्क्रॉल करने में 11 बार की जरूरत है।

यदि पंक्ति पहले से ही ग्रिड में फिट हो जाती है (भले ही यह स्क्रीन पर आखिरी हो) तो यह नीचे स्क्रॉल नहीं करता है।

मैं यह प्राप्त करना चाहता हूं कि जब मैं इस विधि को कॉल करता हूं, तो ग्रिड अगली पंक्ति को ग्रिड के शीर्ष में लाएगा (जैसे स्क्रोलर करता है)। यह क्यों काम नहीं कर रहा है?

उत्तर

18

DataGridView.FirstDisplayedScrollingRowIndex का उपयोग करें।

int itemNum=0; 
    private void Down_Click(object sender, RoutedEventArgs e) 
    { 
     itemNum++; 
     if (itemNum > dataGridView.Items.Count - 1) return; 
     //dataGridView.UpdateLayout(); <-- I don't think you need this 
     dataGridView.FirstDisplayedScrollingRowIndex = itemNum; 
    } 

क्षमा करें WPF ग्रिड एहसास नहीं था कि नहीं था। स्क्रॉलिंग के बारे में बिंदु मान्य रहता है।

ScrollIntoView केवल तभी स्क्रॉल करेगा जब आइटम दृश्य में नहीं है, और यदि यह वर्तमान दृश्यमान रेखाओं से नीचे है तो यह अंतिम पंक्ति बना देगा, इस प्रकार जब आप 11 वें आइटम को देखने के लिए स्क्रॉल करते हैं तो ऐसा लगता है कि यह दूसरे स्थान पर स्क्रॉल करता है ।

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

 dataGridView.ScrollIntoView(DataGrid1.Items[DataGrid1.Items.Count - 1]); 
     dataGridView.UpdateLayout(); 
     dataGridView.ScrollIntoView(DataGrid1.Items[itemIndex]); 
+2

मुझे खेद है लेकिन यह डब्ल्यूपीएफ में डेटाग्रिड है, कुछ अशिष्ट आदमी ने मेरे विषय के डब्ल्यूपीएफ भाग को हटा दिया, संभवतः अंक प्राप्त करने के लिए। आपने जो सुझाव दिया है वह विन्डोज़ फॉर्म डेटाग्रिड व्यू – Programer

+1

पर काम करता है क्षमा करें, मैंने WPF – Tsabo

+1

@Tsabo धन्यवाद के लिए उत्तर अपडेट किया .. यह मेरे लिए काम किया..मैं इसकी तलाश कर रहा था –

2

Check this out, यह एक ListBox के लिए है, लेकिन अंतर्दृष्टि महान है और यह भी ग्रिड के लिए काम कर सकते हैं:

कुछ शब्दों में: आइटम ListBox में एसिंक्रोनस लोड किए गए हैं, इसलिए यदि आप ScrollIntoView फोन() कलेक्शन चेंजेड इवेंट (या इसी तरह) के भीतर इसमें अभी तक कोई आइटम नहीं होगा, इसलिए कोई स्क्रॉलिंग नहीं है।

उम्मीद है कि यह मदद करता है, यह निश्चित रूप से मेरी मदद करता है! ;-)

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