Программно выделяю строку в гриде:
int i=10; //(пусть будет 10, это не важно)
DatagridView_MAIL.Rows[i].Selected = True;
Отрабатывает событие SelectionChanged в гриде. CurrentRow.Index равно нулю... помогите , пожалуйста, понять почему не 10. И каким образом мне не только выделить строку с индексом 10, но и в свойство CurrentRow.Index записать 10?
При изменении свойства DataGridViewRow.Selected
, также меняется свойство DataGridViewRow.State
. Изменение значения DataGridViewRow.State
активирует событие DataGridView.RowStateChanged.
В аргументах события есть свойство DataGridViewRowStateChangedEventArgs.Row
, через которое, вы получаете прямую ссылку на объект DataGridViewRow
, представляющий выделенную строку.
В обработчике нужно поставить фильтр, чтобы срабатывание происходило только при выделении, например так:
private void DataGridView1_RowStateChanged(Object sender, DataGridViewRowStateChangedEventArgs e)
{
if(e.StateChanged == DataGridViewElementStates.Selected)
{
var selectedRow = e.Row;
//что-то делаем с выбранной строкой
}
}
Естественно, если вам нужно обрабатывать и другие состояния строк, то логику фильтра придется менять.
Отдельно надо заметить, что при таком способе выделения строки, не меняется выделенная ячейка, и соответственно не меняется связанное свойство DataGridViewRow.CurrentRow, что и является причиной того, что вы не могли получить нужный индекс.
Если вам нужно чтобы изменилось именно свойство DataGridViewRow.CurrentRow
, то нужно выделить любую ячейку, интересующей вас строки с помощью свойства DataGridView.CurrentCell.
При использовании текущего способа выделения строки нужно немного изменить обработчик события.
private void DataGridView1_RowStateChanged(Object sender, DataGridViewRowStateChangedEventArgs e)
{
if(e.StateChanged == DataGridViewElementStates.Selected)
{
var selectedRow = e.Row;
dataGridView1.CurrentCell = e.Row.Cells[0];
}
}
CurrentRow
возвращает строку в которой находится активная ячейка (CurrentCell
). Выделение строки/строк не изменяет текущую активную ячейку.
Попробуйте установить активную ячейку напрямую:
//допустим ячейка в первом столбце 11-й строки
DatagridView_MAIL.CurrentCell = DatagridView_MAIL.Rows[10].Cells[0];
DataGridView
есть свойство CurrentCell
а у него RowIndex
.
В обработчике собития SelectionChanged
найдете индекс выбранной строки таким образом:
datagridview.CurrentCell.RowIndex
Используется Visual Studio 2015; Devexpress 171
Есть терминальный сервер нужно: 1Программно получить список всех пользователей запущенных на компьютере (как в диспетчере задач Windows) 2
Подскажите можно как-нибудь удалить разделы реестра используя List<string> ?