2011-12-08 20 views
48

चयनित row दिखाने के लिए मुझे DataGridView को मजबूर करने की आवश्यकता है।मैं डेटाग्रिड व्यू को चयनित पंक्ति कैसे दिखा सकता हूं?

संक्षेप में, मैं एक textbox कि DGV चयन क्या textbox में टाइप कर रहा है के आधार पर बदल जाता है। जब ऐसा होता है, तो चयन row मिलान में बदल जाता है।

दुर्भाग्य से यदि चयनित row दृश्य से बाहर है, तो मुझे चयन को खोजने के लिए मैन्युअल रूप से नीचे स्क्रॉल करना होगा। क्या कोई भी row चुनने के लिए DGV को मजबूर करने के बारे में जानता है?

धन्यवाद!

+7

बस CurrentCell गुण सेट, DGV यह दृश्यमान बनाने के लिए स्क्रॉल करेगा की पहली आवृत्ति पाता है। –

उत्तर

86

आप सेट कर सकते हैं:

dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.SelectedRows[0].Index; 

यहाँ इस संपत्ति पर MSDN documentation है। शीर्ष पर डाल बिना चयनित पंक्ति को

dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.SelectedRows[0].Index; 
+0

धन्यवाद! मैं वर्तमान तर्क के उपयोग में अपनी तर्क गलती खोजने की कोशिश कर रहा हूं जो सार्वभौमिक रूप से काम नहीं कर रहा था। लेकिन मैं पंक्ति संख्या को प्लग कर सकता हूं जिसे मैं इस सब के साथ उपयोग कर रहा हूं और यह एक आकर्षण की तरह काम करता है! – clweeks

+0

सरल और सही (y) –

10

बस का चयन पंक्ति के बाद कि लाइन डाल दिया।

dataGridView1.CurrentCell = dataGridView1.Rows[index].Cells[0]; 
+1

इसे एक मिनट से याद किया! –

32

यह एक स्क्रॉल:

+2

'DataGridView.FirstDisplayedScrollingRowIndex' की तुलना में निश्चित रूप से अधिक उपयोगकर्ता के अनुकूल, धन्यवाद! – Nolonar

+4

FirstDisplayedScrollingRowInde के विपरीत, यह पंक्ति तीर को सही पंक्ति में भी ले जाता है, पंक्ति का चयन करता है, और किसी अन्य पंक्ति को अचयनित करता है। – Polyfun

1
int rowIndex = -1; 
foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    if (row.Cells[0].Value.ToString().Equals(searchString)) 
    { 
     rowIndex = row.Index; 
     break; 
    } 
} 
if (rowIndex >= 0) 
{ 
    dataGridView1.CurrentCell = dataGridView1[visibleColumnIndex, rowIndex]; 
} 

visibleColumnIndex - चयनित सेल कुछ इस तरह कर दिखाई

0

होना चाहिए:

dataGridView1.CurrentCell = dataGridView1.Rows[index].Cells[0];

केवल तभी पहले कॉलम दिखाई दे रहा है काम करेंगे। यदि यह छिपा हुआ है, तो आपको अपवाद मिलेगा। यह सुरक्षित है:

var column = dataGridView1.CurrentCell != null ? dataGridView1.CurrentCell.ColumnIndex : dataGridView1.FirstDisplayedScrollingColumnIndex; dataGridView1.CurrentCell = dataGridView1.Rows[iNextHighlight].Cells[column];

यह स्क्रॉल किए बिना चयन रीसेट कर देगा अगर लक्ष्य पंक्ति स्क्रीन पर पहले से ही है। यह वर्तमान कॉलम विकल्प भी संरक्षित करता है जो उन मामलों में महत्वपूर्ण हो सकता है जहां आपने इनलाइन संपादन की अनुमति दी है।

0

मैंने अगला खोज फ़ंक्शन बनाया है जो प्रदर्शन में स्क्रॉलिंग चयन के लिए स्वागत करता है।

private void btnSearch_Click(object sender, EventArgs e) 
{ 
    dataGridView1.ClearSelection(); 
    string strSearch = txtSearch.Text.ToUpper(); 
    int iIndex = -1; 
    int iFirstFoundRow = -1; 
    bool bFound = false; 
    if (strSearch != "") 
    { 
    dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 

    /* Select All Rows Starting With The Search string in row.cells[1] = 
    second column. The search string can be 1 letter till a complete line 
    If The dataGridView MultiSelect is set to true this will highlight 
    all found rows. If The dataGridView MultiSelect is set to false only 
    the last found row will be highlighted. Or if you jump out of the 
    foreach loop the first found row will be highlighted.*/ 

    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
    if ((row.Cells[1].Value.ToString().ToUpper()).IndexOf(strSearch) == 0) 
    { 
     iIndex = row.Index; 
     if(iFirstFoundRow == -1) // First row index saved in iFirstFoundRow 
     { 
     iFirstFoundRow = iIndex; 
     } 
     dataGridView1.Rows[iIndex].Selected = true; // Found row is selected 
     bFound = true; // This is needed to scroll de found rows in display 
     // break; //uncomment this if you only want the first found row. 
    } 
    } 
    if (bFound == false) 
    { 
    dataGridView1.ClearSelection(); // Nothing found clear all Highlights. 
    } 
    else 
    { 
    // Scroll found rows in display 
    dataGridView1.FirstDisplayedScrollingRowIndex = iFirstFoundRow; 
    } 
} 

}

+0

यह वह है जिसका मैं उपयोग करता हूं। – Mac

14

भी विचार करें इस कोड (का उपयोग करता competent_tech से सुझाव दिया जिस तरह से):

private static void EnsureVisibleRow(DataGridView view, int rowToShow) 
{ 
    if (rowToShow >= 0 && rowToShow < view.RowCount) 
    { 
     var countVisible = view.DisplayedRowCount(false); 
     var firstVisible = view.FirstDisplayedScrollingRowIndex; 
     if (rowToShow < firstVisible) 
     { 
      view.FirstDisplayedScrollingRowIndex = rowToShow; 
     } 
     else if (rowToShow >= firstVisible + countVisible) 
     { 
      view.FirstDisplayedScrollingRowIndex = rowToShow - countVisible + 1; 
     } 
    } 
} 
+3

एक बहुत ही कार्यात्मक उत्तर ... कहीं अधिक वोटों के योग्य। – ulatekh

+1

मैं सहमत हूं, इसलिए मैंने इसे ऊपर उठाया है! यह किसी भी अन्य समाधान से बेहतर काम करता है। – JonP

+2

बहुत अच्छा काम करता है - मैंने पंक्ति को दिखाया है और इसे कॉलर द्वारा सेट नहीं किया गया है तो इसे अंतिम पंक्ति पर सेट करें। अब यह डिफ़ॉल्ट रूप से नीचे स्क्रॉल करता है। इसे बेहतर नाम देने के लिए एक और हस्ताक्षर जोड़ सकते हैं। – rheitzman

0

कृपया ध्यान दें कि FirstDisplayedScrollingRowIndex सेट करते समय अपने DataGridView सक्षम नहीं है करने के लिए सूची स्क्रॉल करेगा वांछित पंक्ति, लेकिन स्क्रॉलबार अपनी स्थिति को प्रतिबिंबित नहीं करेगा। सरलतम समाधान आपके डीजीवी को पुनः सक्षम और अक्षम कर रहा है।

dataGridView1.Enabled = true; 
dataGridView1.FirstDisplayedScrollingRowIndex = index; 
dataGridView1.Enabled = false; 
0

// यह काम करता है, यह केस संवेदी है और खोज

private bool FindInGrid(string search) 
    { 
     bool results = false; 

     foreach (DataGridViewRow row in dgvData.Rows) 
     { 
      if (row.DataBoundItem != null) 
      { 
       foreach (DataGridViewCell cell in row.Cells) 
       { 
        if (cell.Value.ToString().Contains(search)) 
        { 
         dgvData.CurrentCell = cell; 
         dgvData.FirstDisplayedScrollingRowIndex = cell.RowIndex; 
         results = true; 
         break; 
        } 

        if (results == true) 
         break; 
       } 
       if (results == true) 
        break; 
      } 
     } 

     return results; 
    } 
संबंधित मुद्दे