Действительно ли возможно преобразовать этот asp в asp.net?

Для меня определили задачу с отсеиванием через худшие классические спагетти asp, с которыми я когда-либо сталкивался.

Сценарий выполняет серию recordsets в последовательности, получая 1 запись за один раз. Поскольку запись создается, она берет идентификатор и передает его следующему циклу, который получает данные и передает идентификатор следующему циклу. Это затем продолжается этим способом и создает незаказанный список, выгоняя необходимый HTML, когда это идет.

Вот мои усилия до сих пор:

  1. имейте данные поставки класса через sqldatareaders и произведите их к вложенным повторителям (это перестало работать из-за неспособности циклично выполнить и получить идентификатор),

  2. Заполните таблицу данных со всеми необходимыми данными, затем datatable.select для фильтрования его.

  3. имейте 4 datareaders цикличных выполнения и создание ул. arraylists (я не мог заставить идентификатор совпадать),

Можете Вы предлагать лучший метод

1
задан Joel Coehoorn 30 November 2011 в 05:46
поделиться

1 ответ

Да, конечно, его можно переписать в ASP.NET - обратите внимание, что я сказал переписан , а не только отремонтирован , этот код не сохраняется (что нормально для того, что он есть, но с ASP.NET все иначе).

Если честно, код даже не проверял, глаза разболелись. Много. Но в целом вы можете использовать хороший объект SQLConnection и SQLCommand, вызвать хранимую процедуру и получить хороший SqlDataReader, полный данных, из которого вы можете построить DataTable или список объектов данных IEnumerable. Затем у вас есть элемент управления типа повторителя (ListView, GridView и т. Д.) В пользовательском интерфейсе, просто путем привязки вашей таблицы данных или списка к этому элементу управления будут отображаться результаты.

С помощью ListView вы указываете шаблон для каждого отображаемого элемента данных. Для GridView вы указываете столбцы (или шаблоны столбцов) и свойства каждого элемента данных, к которым столбцы должны привязываться.

Когда вы извлекаете данные, вы можете оставить их как DataTable или преобразовать во что-то еще, например, список (или массив) объектов данных. Пока ваш список / массив реализует IEnumerable, вы должны иметь возможность просто назначить список свойству ItemsSource вышеупомянутого элемента управления повторителем, и он будет выполнять свою магию.

Вам даже не нужно использовать объект SQLCommand и DataTable - вы даже можете использовать Linq to SQL и привязать результаты прямо к вашему элементу управления повторителем.

Это просто общий обзор того, как вы могли бы это сделать. Есть несколько способов. После этого ваш код будет намного чище и удобнее в обслуживании, чем классический код ASP.

Изменить: ваша основная проблема заключается в том, как создать упорядоченный список, что и делает текущий код со своими вложенными циклами, предоставляющими идентификаторы для элементов деталей.

Я предлагаю вам сделать шаг назад и переосмыслить sql. Фактически, выбросьте текущий sql, он невероятно неэффективен с инструментами, которые у вас есть сегодня. Для возврата плоской таблицы данных требуется буквально десятые доли секунды и всего один вызов базы данных. Ваш первый инстинкт может быть «но я не хочу возвращать слишком много данных!» - расслабьтесь, даже возврат нескольких тысяч строк данных может занять менее 1 секунды, если все сделано правильно. Вы также можете ограничить возвращаемые данные, передав параметры в сохраненную процедуру или добавив их в динамический оператор sql, который вы создаете (хотя мне очень больно упоминать динамический sql, я думаю, что это зло, но некоторые люди все еще используют его - я бы не рекомендовал его, если это не был ваш единственный вариант). Подводя итог тому, что я говорю, то, как ваши данные возвращаются из базы данных и как они выглядят на экране, - это две разные вещи, не позволяйте одному руководить другим. Вы можете получить данные из базы данных, а затем обработать их перед отображением в пользовательском интерфейсе.

Если вы по-прежнему хотите отображать данные в виде упорядоченного списка, используйте ListView, определите шаблон для каждого элемента данных, затем вы можете использовать LINQ для группировки или фильтрации данных, которые вам нравятся (шаблон элемента данных может содержать все Элементы управления HTML или ASP.NET, которые вам нравятся, и этот шаблон отображается для каждого элемента данных в списке данных).В качестве альтернативы вы можете использовать GridView, а затем использовать возможность группировки GridView для выполнения работы за вас - просто укажите, какой столбец (столбцы) вы хотите сгруппировать, и GridView позаботится о рендеринге.

2
ответ дан 2 September 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: