manic_drummer Ответов: 2

Как переопределить поведение datagridview по умолчанию при удалении строки?


I'm writing a C# .NET Winforms app with a DataGridView that is loaded with data from a List<t>. When a row is deleted from the DataGridView, the default behavior is that the first row becomes the current row. I want to override that by making the row after the deleted row, if there is one, the new current row. Say I have a DataGridView with 5 rows and I want to delete Row #3. Row 4 then becomes the new Row #3, so I'd want the new Row #3 to become the current row. Or, if I delete Row #5, I want Row #4 to become the new current row. I'm using a global integer "currentindex" to set the current row. currentindex changes to the DataGridView's current row index when DataGridView_SelectionChanged event fires...
private void DataGridView_SelectionChanged(object sender, EventArgs e)
        {
	        currentindex = DataGridView.CurrentRow.Index;
        }

Вот блок кода, который я написал, чтобы обновить currentindex, если он выпадает из диапазона после удаления строки...
if (currentindex >= DataGridView.RowCount)
	     currentindex--;


Примечание: DataGridView не привязан к списку<t>. Я попробовал использовать BindingList<t>, но у меня будет только та же проблема.

Что я уже пробовал:

Я попытался поместить этот блок кода в DataGridView_RowsRemoved, DataGridView_UserDeletingRow и DataGridView_UserDeletedRow, но строка #1 все равно становится новой текущей строкой после удаления строки.

Karthik_Mahalingam

вы пробовали работать с datatable?

2 Ответов

Рейтинг:
2

Richard MacCutchan

Проверьте этот пример, чтобы узнать, как использовать событие RowsRemoved: Практическое руководство.Событие RowsRemoved (Системы.Окна.Формы)[^].


Рейтинг:
0

manic_drummer

Спасибо за ваше предложение, Ричард, но этот пример не подходит к моей ситуации. Я хочу переопределить поведение DataGridView по умолчанию при удалении строки.

Спасибо за ваше предложение, Картик, но использование DataTable не поможет мне переопределить поведение DataGridView по умолчанию при удалении строки.


Richard Deeming

Если вы хотите ответить на решение, нажмите кнопку "есть вопрос или комментарий?" кнопка под раствором.

Если вы хотите ответить на комментарий, нажмите кнопку "ответить" рядом с комментарием.

НЕ опубликуйте свой ответ как "решение".

manic_drummer

Я не хотел, чтобы мой ответ был опубликован в качестве решения. Дай мне передохнуть!