понял!
это был IsPostback, мне его не хватало, поэтому просмотр сетки восстанавливался при каждой загрузке страницы, и поскольку раскрывающийся список находится внутри сетки, данные были потеряны.
Однако, одну вещь, которую я забыл упомянуть, это то, что весь этот код находится внутри пользовательского элемента управления (файл ascx), и свойство IsPostBack применяется к странице, а не к элементу управления, что бесполезно в моем случае. Например, в моих обстоятельствах я добавляю элемент управления вручную, поэтому IsPostback ВСЕГДА будет верным, поэтому, чтобы избежать этой проблемы, мне пришлось реализовать решение на основе сеанса. Надеюсь, это кому-нибудь поможет.
Там также есть свойство usercontrol.IsPostBack, но оно работает не так, как ожидалось, возможно, они поняли это правильно для 3.0