Итак, у меня есть приложение форм с 4 сетками данных, и у меня есть событие rowleave, которое запускается при изменении ячейки, чтобы заменить backcolor, пока изменения не будут сохранены в базе данных. Я пытаюсь написать это так, чтобы все 4 сетки могли использовать одни и те же события вместо того, чтобы писать одно и то же событие 4 раза с разными именами сетки. Событие изменения ячейки отлично работает во всех сетках, но событие выхода строки - нет. Вот что у меня есть на данный момент:
private void gridNewBusinessPotential_RowLeave(object sender, DataGridViewCellEventArgs e)
{
var gridList = new List<DataGridView>();
DataGridView[] grids = {gridBusinessAgentSuppression,
gridBusinessFollowUpSuppressionData,
gridFollowUpDescription,
gridNewBusinessPotential};
gridList.AddRange(grids);
var focusedGrid = from dg in gridList
where Focused == true
select dg;
focusedGrid.FirstOrDefault().Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Bisque;
}
Я получаю сообщение об ошибке во время выполнения, в котором говорится, что focusedGrid не установлен для экземпляра объекта. Если кто-нибудь знает лучший способ добиться этого, пожалуйста, сообщите мне. В противном случае мы будем благодарны за любую помощь.





Объект sender сообщает вам, над какой сеткой вы работаете (включая ту, что сфокусирована), так почему бы не поработать с ней?
private void gridNewBusinessPotential_RowLeave(object sender, DataGridViewCellEventArgs e)
{
(sender as DataGridView)?.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Bisque;
}
Что-то не так с вашим кодом, потому что отправителем никогда не может быть null. Вы пробовали именно этот способ?
Вы правы, я только что понял, что я не передаю того же отправителя, что и событие CellChanged, вместо этого я передал "this" по какой-то причине. Ваше решение было идеальным в тот первый раз. Большое спасибо!
Я пробовал работать с отправителем (не так конкретно), но все равно получаю ту же ошибку, что он не установлен для экземпляра объекта.