Все,
Когда мой gridview привязывается к его источнику данных (устанавливается программно) и генерирует HTML, идентификаторы строк появляются в HTML одинаково для каждой строки ... т.е. они не уникальны. Я ожидаю этого:
<select name = "ctl00$ContentHolder$list$ctl03$EquipmentTypeList" id = "ctl00_ContentHolder_list_ctl03_EquipmentTypeList" style = "width:160px;">
т.е. идентификатор содержит ctl03 для однозначной идентификации строки ... но ... когда я использую пользовательский элемент управления вместо стандартного раскрывающегося списка, я получаю следующее:
<select name = "ctl00$ContentHolder$flbShipFrom$ddlAvailableOptions" onchange = "StoreSelection('ctl00_ContentHolder_flbShipFrom_ddlAvailableOptions'); setTimeout('__doPostBack(\'ctl00$ContentHolder$flbShipFrom$ddlAvailableOptions\',\'\')', 0)" id = "ctl00_ContentHolder_flbShipFrom_ddlAvailableOptions" style = "width:283px;" />
т.е. идентификатор не содержит уникального номера строки. Это также происходит со стандартными элементами управления .NET в той же строке:
Всякий раз, когда я пытаюсь получить доступ к данным по идентификатору, я получаю неверную информацию, и, как также выясняется, это состояние просмотра для gridview не восстанавливается должным образом, поскольку текстовые поля и т. д. Теряют значения при повторной отправке страницы.
Полностью застрял ... любые предложения, пожалуйста





Убедитесь, что все, что вы используете для создания строк, реализует INamingContainer.
Что касается проблем с ViewState, это может быть признаком этого или может быть связано с тем, как вы генерируете строки. Опубликуйте код на стороне сервера, если контейнер именования не помогает.
Кроме того, старайтесь избегать прямого использования идентификатора на стороне клиента? В большинстве ситуаций вы можете обойтись использованием FindControl (на стороне сервера) или передачей результата ClientID в ваш Javascript (на стороне клиента), если вам действительно нужно выбрать точный элемент управления. Как правило, лучше не ссылаться на идентификаторы HTML напрямую, особенно из-за проблемы вложенного именования, которую вы уже обнаружили.
Если вы разместили свой код, это может помочь решить проблему.