Ich muss das erzwingen DataGridView
, um das Ausgewählte anzuzeigen row
.
Kurz gesagt, ich habe eine textbox
, die die DGV
Auswahl basierend auf dem, was in die eingegeben wird , ändert textbox
. In diesem Fall ändert sich die Auswahl in die Übereinstimmung row
.
Wenn die Auswahl row
nicht angezeigt wird, muss ich leider manuell nach unten scrollen, um die Auswahl zu finden. Weiß jemand, wie man das erzwingt DGV
, um das Ausgewählte anzuzeigen row
?
Vielen Dank!
Antworten:
Sie können einstellen:
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.SelectedRows[0].Index;
Hier ist die MSDN-Dokumentation zu dieser Eigenschaft.
quelle
Dieser scrollt zur ausgewählten Zeile, ohne sie oben zu platzieren.
dataGridView1.CurrentCell = dataGridView1.Rows[index].Cells[0];
quelle
DataGridView.FirstDisplayedScrollingRowIndex
, danke!dataGridView1.CurrentCell = dataGridView1.SelectedRows[0].Cells[0]
Berücksichtigen Sie auch diesen Code (verwendet den von kompetenten_Technologie vorgeschlagenen Weg):
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; } } }
quelle
else if (rowToShow >= firstVisible + countVisible - 1)
(Ich habe gerade die gleiche Lösung geschrieben, weil ich diese Antwort verpasst habe!)Fügen Sie einfach diese Zeile nach der Auswahl der Zeile ein:
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.SelectedRows[0].Index;
quelle
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 - Die ausgewählte Zelle muss sichtbar sein
quelle
Beachten Sie, dass beim Festlegen von FirstDisplayedScrollingRowIndex, wenn Ihre DataGridView nicht aktiviert ist, die Liste zur gewünschten Zeile gescrollt wird, die Bildlaufleiste jedoch nicht deren Position widerspiegelt. Die einfachste Lösung ist das erneute Aktivieren und Deaktivieren Ihres DGV.
dataGridView1.Enabled = true; dataGridView1.FirstDisplayedScrollingRowIndex = index; dataGridView1.Enabled = false;
quelle
// Dies funktioniert, unterscheidet zwischen Groß- und Kleinschreibung und findet das erste Auftreten der Suche
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; }
quelle
So etwas machen:
dataGridView1.CurrentCell = dataGridView1.Rows[index].Cells[0];
funktioniert nur, wenn die erste Spalte sichtbar ist. Wenn es ausgeblendet ist, erhalten Sie eine Ausnahme. Das ist sicherer:
var column = dataGridView1.CurrentCell != null ? dataGridView1.CurrentCell.ColumnIndex : dataGridView1.FirstDisplayedScrollingColumnIndex; dataGridView1.CurrentCell = dataGridView1.Rows[iNextHighlight].Cells[column];
Dadurch wird die Auswahl ohne Scrollen zurückgesetzt, wenn die Zielzeile bereits auf dem Bildschirm angezeigt wird. Außerdem wird die aktuelle Spaltenauswahl beibehalten, die in Fällen von Bedeutung sein kann, in denen Sie die Inline-Bearbeitung zugelassen haben.
quelle
Ich habe die nächste Suchfunktion gemacht, die gut zum Scrollen von Auswahlen in der Anzeige funktioniert.
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; } }
}}
quelle