2013-04-28 20 views
5

पर स्वचालित रूप से नीचे स्क्रॉल करें, मेरे पास एक प्रोग्राम है जो डेटा ग्रिड व्यू का उपयोग डेटा दिखाने के लिए करता है जो डेटा ग्रिड व्यू में पंक्तियों को जोड़कर स्वचालित रूप से हर सेकेंड अपडेट करता है।डेटाग्रिड व्यू: स्क्रॉल नीचे

जब मैं शुरुआत में कुछ पढ़ना चाहता हूं, तो मैं स्क्रॉल करता हूं, और डेटा अपडेट होने पर भी, स्क्रॉल बार नीचे नहीं जाता है, यह अच्छा है। लेकिन मैं चाहता हूं कि स्क्रॉल बार केवल तभी नीचे जाये जब यह डेटा ग्रिड व्यू के नीचे होता है।

व्यवहार जब एक नई पंक्ति पाठ में जोड़ा जाता है मैं चाहता हूँ:

अगर स्क्रॉलबार नीचे स्थित है, स्वचालित रूप से नीचे स्क्रॉल करें। यदि स्क्रॉलबार कहीं और है, तो स्क्रॉल न करें।

कोड मैं इस के लिए लिखा है और दुर्भाग्य से काम नहीं करता है:

private void liveDataTable_Scroll(object sender, ScrollEventArgs e) 
{ 
    ScrollPosition = liveDataTable.FirstDisplayedScrollingRowIndex; 

    if (ScrollPosition == liveDataTable.RowCount - 1) 
    { 
     IsScrolledToBottom = true; 
    } 
    else 
    { 
     IsScrolledToBottom = false; 
    }    
} 
public void AddRowToDataGridMethod() 
{ 
    dataTable.Rows.Add(); 

    if (dataWin.IsScrolledToBottom == true) 
     dataWin.LiveDataTable.FirstDisplayedScrollingRowIndex = (dataWin.ScrollPosition + 1); 
    else 
     dataWin.LiveDataTable.FirstDisplayedScrollingRowIndex = dataWin.ScrollPosition;   
} 
+1

इस सवाल पर एक नज़र डालें: http://stackoverflow.com/questions/378330/how-can-i-set-the-position-of-my-datagrid-scrollbar-in- my-winforms-app यह आपकी समस्या का समाधान करना चाहिए। – jAC

+0

संभावित डुप्लिकेट [सी # डेटाग्रिड व्यू के नीचे स्क्रॉल करें] (http://stackoverflow.com/questions/9969061/scroll-to-bottom-of-c-sharp-datagridview) –

उत्तर

12

आप इस कोशिश कर सकते हैं:

int firstDisplayed = liveDataTable.FirstDisplayedScrollingRowIndex; 
int displayed = liveDataTable.DisplayedRowCount(true); 
int lastVisible = (firstDisplayed + displayed) - 1; 
int lastIndex = liveDataTable.RowCount - 1; 

liveDataTable.Rows.Add(); //Add your row 

if(lastVisible == lastIndex) 
{ 
    liveDataTable.FirstDisplayedScrollingRowIndex = firstDisplayed + 1; 
} 
अगर अंतिम पंक्ति दिखाई दे रहा है और अगर यह

तो मूल रूप से जाँच नई पंक्ति जोड़ने के बाद स्क्रॉल 1 पंक्ति नीचे है।

+0

आपको बहुत धन्यवाद एम 8! – olegoro

1

बस, एक और तरीका

असल में क्या करता है कहते हैं कि तुम 10 पंक्तियों दिखाया गया है और आप अपने प्रत्येक पंक्ति कार्रवाई कर रहे हैं है यह स्क्रॉल (लेकिन निचले भाग में नई पंक्ति के साथ) रखने के लिए है ... जोड़ना चाहते थे । जब यह 11 वीं पंक्ति तक पहुंच जाता है, तो यह 1 पंक्ति तक स्क्रॉल करता है, इसलिए आपकी पंक्ति अब प्रदर्शित होती है लेकिन नीचे। उदाहरण के लिए आप 1 जोड़ सकते हैं और अब यह आपकी पंक्ति + 1 रहेगा, इसलिए यह नीचे से अंतिम पंक्ति के बगल में है।

if (myRow.Displayed == false) 
{ 
    int intDisplayRows = myRow.Index - dataView_Database.DisplayedRowCount(false); 
    dataView_Database.FirstDisplayedScrollingRowIndex = intDisplayRows; 
} 
1
private void dgZavod_RowsAdded_1(object sender, DataGridViewRowsAddedEventArgs e) { 
    dgZavod.FirstDisplayedScrollingRowIndex = dgZavod.Rows[dgZavod.Rows.Count - 1].Index; 
} 
संबंधित मुद्दे