Подтвердить что ты не робот

Как заставить DataGridView отобразить выбранную строку?

Мне нужно заставить DataGridView показать выбранный row.

Короче говоря, у меня есть textbox, который меняет выбор DGV на основе того, что набрано в textbox. Когда это произойдет, выбор изменится на соответствие row.

К сожалению, если выбранный row отсутствует, мне нужно вручную прокрутить вниз, чтобы найти выделение. Кто-нибудь знает, как заставить DGV показать выбранный row?

Спасибо!

4b9b3361

Ответ 1

Вы можете установить:

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

Вот это документация MSDN по этому свойству.

Ответ 2

Этот прокручивается в выбранную строку, не помещая ее сверху.

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

Ответ 3

Рассмотрим также этот код (использует предложенный способ от компетентного_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;
        }
    }
}

Ответ 4

Просто поместите эту строку после выбора строки:

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

Ответ 5

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 - выбранная ячейка должна быть видимой

Ответ 6

Выполнение чего-то подобного:

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

будет работать, только если первый столбец будет виден. Если он скрыт, вы получите исключение. Это безопаснее:

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

Это будет reset выбор без прокрутки, если целевая строка уже находится на экране. Он также сохраняет текущий выбор столбцов, который может иметь значение в тех случаях, когда вы разрешили встроенное редактирование.

Ответ 7

Я сделал следующую функцию поиска, которая работает хорошо для прокрутки выбранных на дисплее.

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; 
   }
}

}

Ответ 8

Обратите внимание, что установка FirstDisplayedScrollingRowIndex, когда ваш DataGridView не включен, прокручивает список до нужной строки, но полоса прокрутки не отражает его позицию. Самое простое решение - это повторное включение и отключение вашего DGV.

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