Привязать DropDownList "неиспользуемых" элементов плюс текущий элемент строки в EditItemTemplate GridView?

У меня есть 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 столбца показывают некоторую информацию из "моей" таблицы, а последний показывает соответствующую запись из "другой" таблицы, где записи уже были связаны, в противном случае - пустое место, где не было установлено никакой связи. У моего фактического gridview есть еще несколько столбцов из "моей" таблицы, но этого достаточно, чтобы проиллюстрировать необходимость.

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

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

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

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

Спасибо заранее!

Крис

1 ответ

Решение

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

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

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

Я думаю, что таким образом у тебя не будет проблем.

Другие вопросы по тегам