Связать DropDownList «неиспользуемых» элементов плюс текущий элемент строки в EditItemTemplate GridView? - PullRequest
3 голосов
/ 12 февраля 2010

У меня есть 2 таблицы с уникальными идентификаторами, которые можно сопоставить друг с другом (одна таблица поступает из базы данных вне моего приложения, но содержит информацию о тех же сущностях, которые я отслеживаю). Я хочу предоставить пользовательский интерфейс для связи «моих» записей с «другими», чтобы я мог хранить «другие» идентификаторы в своей таблице для соответствующих записей. В двух словах, ключевым элементом пользовательского интерфейса является раскрывающийся список, показывающий доступные (т.е. еще не связанные) записи из «другой» таблицы.

У меня есть сетка для отображения «моих» записей в каждой строке, плюс столбец, показывающий некоторую информацию из связанной записи в «другой» таблице, если таковая имеется. Данные о зданиях и свойствах, поэтому это может выглядеть так:

Building1   Dallas   TX    Building1_Dallas_TX
Building2   Memphis  TN    Bldg2_Memphis_TN
Building3   Denver   CO
Building4   Seattle  WA
Building5   Boston   MA    Building5_Boston_MA

, где первые 3 столбца показывают некоторую информацию из таблицы "my", а последний показывает соответствующую запись из таблицы "other", где записи уже были связаны, в противном случае - пустое место, где ссылка не была установлена. У моего фактического gridview есть еще несколько столбцов из «моей» таблицы, но этого достаточно, чтобы проиллюстрировать необходимость.

Когда для строки щелкают по Edit (не показан), я хочу иметь возможность редактировать все 4 столбца. Первые 3 являются текстовыми полями; последний столбец должен быть выпадающим списком, показывающим все несвязанные записи из «другой» таблицы, плюс опцию «Неназначенные» (как первый элемент в списке), чтобы записи могли быть "несвязанным" или просто оставленным неназначенным, плюс (для тех строк, для которых уже установлена ​​ссылка) связанный элемент (он "используется", но он должен быть там, чтобы они могли продолжать его использовать) .

Я могу правильно заполнить раскрывающийся список в выделенном фрагменте кода в событии gridview RowEditing (за исключением элемента «Неназначенный», который я добавляю как ListItem в .aspx с параметром AppendDataBoundItems, установленным в значение «true»), и могу установить правильный SelectedValue событие ddl's DataBound, но при обратной передаче, когда я нажимаю кнопку Обновить строку, в ddl больше нет элементов (кроме элемента «Неназначенный»), поэтому ссылка всегда очищается. Если я вручную установлю ссылку, напрямую отредактировав свою таблицу, все будет хорошо, если перейти в режим редактирования - в ddl будут правильные элементы, и он предварительно выберет правильный элемент, но все будет потеряно при обратной передаче обновления. Я пытался повторно связать ddl на разных этапах цикла страницы, но, очевидно, я еще недостаточно хорошо понимаю этот цикл, потому что не могу понять, как заставить выбранный пользователем элемент обновлять мою таблицу.

Я также пытался заполнить ddl командой SqlDataSource SelectCommand, но мне не повезло, включая идентификатор связанных в настоящее время записей в другой базе данных (даже если он доступен в таблице "my", и я установил его как GridView. DataKey и добавьте его как ControlParameter в SelectParameters для SqlDataSource. Без текущей связанной записи в списке элементов ddl я не могу сохранить существующие ссылки.

Я пока не буду отправлять пример кода - это сообщение уже слишком длинное! - в надежде, что решение очевидно из того, что я описал ... Я не думаю, что моя цель странная, но я открыт для убеждения иначе.

Заранее большое спасибо!

Chris

1 Ответ

0 голосов
/ 24 января 2011

Хорошо, я не буду вдаваться в подробности с кодом, потому что, возможно, вы уже сделали то, что я собираюсь предложить.

В последнем столбце раскрывающегося списка необходимо выполнить инструкцию SQL, чтобы получить несвязанные элементы. Используйте «ГДЕ ХХ НЕ ВХОДИТ». Для опции «Неназначенный» просто добавьте элемент в список в той же области кода, что и выше.

Следующим шагом является ручная обработка событий редактирования GridView. Вставить, обновить и удалить.

Думаю, у тебя не будет проблем.

...