Фокусировать строку в стандартном DataGridView - не просто выбрать - PullRequest
0 голосов
/ 26 марта 2020

У меня есть стандартный DataGridView в приложении WinForms.
Сетка не разрешает множественный выбор.

У меня есть ситуация, когда мне нужно перезагрузить данные сетки и вернуть пользователя обратно в строку, на которой они были сосредоточены.

Приведенный ниже код работает с выделением требуемой строки, однако строка не сфокусирована.
Индикатор фокусировки остается в первой строке сетки.

Как переместить фокус на этот ряд, а не просто выбрать его? Мне даже не нужно его выбирать, я просто хочу поместить пользователя в строку, в которой он находился.

var selectedItem = string.Empty;
if (grd.CurrentRow != null)
    selectedItem = ((Item) grd.CurrentRow.DataBoundItem).ItemId;

this.ItemBindingSource.DataSource = null;
get my data
this.ItemBindingSource.DataSource = data;

foreach (DataGridViewRow row in grd.Rows)
{
    if (row != null && (string) row.Cells[0].Value == selectedItem)
    {
        grd.ClearSelection();
        row.Selected = true;
        break;
    }
}

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Выбранное свойство не может получить фокус. Вы должны использовать свойство CurrentCell. Пожалуйста, попробуйте следующий код.

foreach (DataGridViewRow row in grd.Rows)
        {
            if (row != null && (string)row.Cells[0].Value == selectedItem)
            {
                grd.ClearSelection();
                grd.CurrentCell = row.Cells[0];
                break;
            }
        }

Примечание: я использовал Cells [0] в качестве примера. Вы можете использовать любой видимый индекс ячейки.

0 голосов
/ 26 марта 2020

Вы можете сделать следующее:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...