Проблема № 1: Переменная Codes устанавливается для нового объекта каждый раз при загрузке страницы.В нем никогда не будет более одного кода.
Проблема № 2: Здесь нет ничего, что могло бы содержать значение списка кодов от просмотра страниц до просмотра страниц.Вам нужно как-то хранить его и извлекать каждый раз, когда вы захотите выполнить повторную привязку.Например, создайте свойство с именем Codes и сохраните значение в viewstate.После добавления нового кода перепривязайте сетку.
Я понимаю, что вы можете ожидать, что сетка сохранит свое состояние, но вы каждый раз привязываете новый объект.Здесь может кто-то другой, но вы можете восстановить объект Codes, вызвав:
Codes = this.GridView1.Datasource