Связанный выпадающий список “неиспользуемых” элементов плюс текущий элемент строки в EditItemTemplate GridView?

StackOverflow https://stackoverflow.com/questions/2250395

Вопрос

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

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

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

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

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

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

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

Крис

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top