WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

True) всегда обращается в True и программа «зависает» в бесконечном цикле — во всяком случае, пока не остановят Information Services (IIS) или не наступит страницы.

не дает забыть оператор перемещения между запися ми, так как метод Read объекта не только считывает строку, но и передвигается на следующую запись, возвращая код, информирующий об успехе или неудаче перемещения. Таким образом, пример из 8 используется применитель но к выглядит так:

while

Данные и формы В этом примере приложения функция объекта DataReader считывает текущую запись, на следу ющую и возвращает код успеха или неудачи этого перемещения.

Одно это изменение мне избавиться от одной или двух перезагрузок в неделю Совет В предыдущем фрагменте кода я вал метод объекта Data Reader. Существует различных методов для получения поддерживаемых типов перемен ных. Можно также воспользоваться командой или В первом случае проблема в том, что возвращаемое значение является объек том и его нужно к правильному типу. В рассмотренном примере я уже знаю порядковые номера поэтому, когда вызываю мне не приходится дополнительно определять полей, как того требует команда Доступ к данным с использованием В и следующей главе я проанализирую пример системы по распространению статей о гольфе. Я много работаю для Обще ства гольфа США и для его печатного издания журнала Одна из задач, поставленных перед нами, изыскание дополнительных путей предоставления материалов на наших партнеров. когда партнерам все больше нужны статьи, опубликованные на нашем Web-сайте, они созда ют ссылки на виртуальные каталоги, размещенные на нем. С точ ки зрения пользователя эти каталоги выглядят, как часть партнера, однако таковыми не являются, поэто 330 Глава при каждом изменении партнерами CGOUX сайтов мы вынуж дены обновлять и наш Web-сайт, чтобы обеспечить «гладкое» информации в партнеров.

Одним из решений этой проблемы является использование XML (подробнее о XML Web-сервисах — в В этом случае партнеры вправе воспользоваться любым протокол SOAP (Simple Object Access для подключения к XML и запроса При на личии установленного XML Web-сервиса доступны другие возможности. Например, партнеры могут захотеть опуб ликовать результаты последних турниров по гольфу. XML Web сервис — это средство предоставления таких ма териалов наиболее удобным для партнеров способом.

Для поддержки подобного XML Web-cepsuca в этой мы вос небольшой данных GolfArticles (ее вы найдете на прилагаемом к Кроме статей, в этой базе данных хранится информация о доступе клиентов к той или иной статье.

Серверный элемент управления это достаточно серверный элемент управле ния, позволяющий создавать табличные формы для отображе ния, редактирования и удаления строк данных. На рис. 9-1 пока зана простая табличная форма для отображения некоторых дан ных из таблицы Customer.

Кроме столбцов с информацией UserName, Password u в таблице предусмотрены два дополнительных столбца. Первый содержит ссылку Edit для дан ной строки, а — ссылку Delete. В традиционном для Visual Basic 6.0 элементе управления grid, как правило, просто перемещаются между строками и редактируют информацию.

Ссылки Edit и Delete для переключения в режим или удаления отдельных строк. При щелчке ссыл ки Edit в одной из строк DataGrid переходит в режим редактиро вания строки (рис. 9-2).

Данные и формы Рис. 9-1. в простой табличной форме, созданная в результате работы программы GridTest.aspx Рис. 9-2. GridTest.aspx со строкой в режиме редактирования Теперь можете содержимое во всех столбцах с при к БД, кроме CustomerlD и которые я вил «только чтения».

В этом примере все неудовлетворительно выглядят ссылки Edit, Delete, Update и Cancel. Давайте посмотрим, как выглядит эта страница в режиме конструирования в Visual Studio что можно сделать для ее улучшения. На рис. 9-3 показана страница GridTest.aspx в Visual Studio Глава.

r Edit Рис. GridTest.aspx в режиме конструирования в Visual Studio Изменение в конструкторе Visual Studio V серверного элемента DataGrid имеются сотни некоторые из них отображаются з окне Properties в ниж нем правом углу на рис. 9-3. Конечно же, вы вправе откорректи ровать эти используя только окно Properties, однако существуют другие средства для изменения вида и DataGrid. Если щелкнуть правой кнопкой мыши DataGrid в кон структоре, появляется контекстное меню, в котором для нас наи более интересны команды Auto Format и Property Builder Диалоговое окно Auto Format показано на рис. 9-4. В нем разра ботчик может изменить десятки параметров, выбрав одну из за ранее определенных цветовых схем. Каждому из свойств и сопоставлено множество параметров по управлению цветом, шрифтами, обрамлением и каскадными таблицами стилей. Выбор цветовой схемы вызыва ет изменение всех стилей одновременно.

Данные и формы Colorful Colorful Colorful Б Professional -. ;

'•. Simple — Рис. окно Auto Format в Visual Studio Другим полезным средством, облегчающим разработчику работу с элементом управления является средство Property Builder (рис. 9-5), которое позволяет добавлять новые столбцы, текст заголовка, столбцов к полям данных, а также на страивать формат заголовка или содержимого столбцов. Я вос пользовался этим для выравнивания текста по цент ру во всех заголовках и в столбце Рис. Диалоговое окно Property Builder для элемента управления DataGrid 334 Глава Не совсем понятно, как заменить ссылки Edit, Update и Cancel на соответствующие графические Решение достаточ но просто — надо ввести текст соответствующей ссылки в тек стовое поле Edit Text. если заменить текст ссылки Edit на строку то вместо текста в столбце Edit отобразится рисунок Edit.jpg (рис. Если нужно отменить об рамление в тэге определите атрибут так:

Для вида рисунка вы можете по своему усмотрению использовать другие атрибуты этого тэга.

Совет Преимущество Property der для добавления атрибутов в тэги по сравнению с использованием текстовых атрибутов, как заключается в том, что perty Builder при необходимости скорректирует сим недопустимые в атрибутах. Например, текст

На левой панели диалогового окна Property Builder имеется группа Paging — ее элементы для параметров разбиения на страницы (рис. 9-7).

Вы можете указать, нужно ли разбиение на и если да, то как оно должно Можете просто разбить данные на страницы или определить пользовательское разбиение на стра ницы, а также уточнить, следует ли указывать номера страниц для быстрого перехода или отображать ссылки для перехода на сле дующую и предыдущую страницу. Вы вправе также ограничить количество на одной странице. Если включить разбиение на страницы и не определить пользовательскую разбивку, эле мент управления выполнит утомитель ную работу по разбиению на страницы.

. • Рис. 9-7. Группа элементов Paging диалогового окна Property Builder Окончательный вариант содержимого файла rid spx пока зан в листинге 336 Глава Page Visual 7.0" Basic 7.0" Delete 338 Глава Листинг 9-1. Содержимое файла GridText.aspx Все элементы, настроенные Auto Format и Pro perty Builder, в окончательном ASPX-коде. Напри мер, эти строки создают моей форме столбец Customer Атрибуты тэга управлять вне шним видом и содержанием столбца. Атрибут опреде ляет имя в источнике данных, то значение кото рого отображается в столбце. Атрибут позволяет оп ределить более понятный заголовок столбца. Столбец предназначен только чтения, для этого я установил значение атрибута так: Для настройки внешнего вида заголовка и отдельных элементов применяют и ItemStyle, Существует возможность также изменять многие дру гие атрибуты, более подробно об этом рассказано в MSDN.

В Visual Studio нет простого («указал и способа на стройки обработчиков щелчка ссылки Edit, Update, или Cancel (или соответствующих Необходимый код находится внутри тэга — обратите внимание на три последних атрибута в фрагменте кода;

Данные и формы ASP.NET

и Если установлен в True, столбцы создаются автоматически в со зна чением DataSource элемента управления Это решение практически всегда неудачно, поскольку в этом случае значением по умолчанию свойства HeaderText станет столб ца. В Microsoft SQL Server версии 6.5 и более поздних разрешено пробелы в именах столбцов, например Company Name, однако подобные имена вызывают разного рода пробле мы при работе с такими таблицами. Имя столбца предпочтительнее для работы SQL Server. Атрибут используется для указания столбца с уникальным ключом в таб которую отображает элемент управления После установки значения для этого атрибута намного удобнее в обра ботчиках ссылаться на редактируемую или удаляемую запись.

Модификация DataGrid в Visual Basic В листинге 9-2 показана (файл GridTest.aspx.vb) часть (code-behind) пользовательского GridTest.aspx.

Этот отвечает за привязку к базе данных GolfArticles, а так же за обновление и удаление записей.

Imports Imports 340 Глава Public Class Inherits Protected WithEvents _ As Protected As Protected da As ttRegion Web Designer Generated Code вызов для Web Designer.

Private Sub End Sub Private Sub sender As _ e As Этот необходим для Designer его редактора кода.

InitializeComponentO End Sub Region Private Sub sender As ByVal e As Handles здесь пользовательский код инициализации страницы If <> True Then doDataBindC) End If End Sub Protected Overridable Sub ByVal Sender As Object, ByVal e As Dim dr As Dim item As String Dim cmd As SqlCommand He.cn = New + "Integrated item = cmd = New "Delete FROM Customer WHERE + item, Данные и формы Catch eDelete As Exception He забываем обработать Finally End End Sub Protected Sub sender As Object, e As = doDataBindO End Sub Protected Overridable Sub ByVal sender As Object, ByVal e As DataGridcomrnandEventArgs) Dim As String Dim password As String Dim companyName As Dim As String companyName = UserName = password = Dim cmd As SqlCommand Me.cn = New + "Integrated CustomerlD = cmd = New "UPDATE Customer SET + companyName + + + + password + + CustomerlD, Catch As Exception ' He забываем обработать ошибку Finally End Try 342 Глава = - Sub Protected Sub sender As Object, e As DataGridCommandEventArgs) = - doDataBindO End Sub метод привязки к данным, при необходимости.

Protected Sub doDataBindO Dim ds As DataSet Dim As Me.cn New "Integrated = New SqlDataAdapter( "Select * Customer ORDER BY ds = New = = New = = "Date Entered" = = Me. DataBindO End Sub End Class Листинг Файл программной логики GridText.aspx.vb Обработчик события прост. Когда страница загружается раз (то до отправки формы), вызыва ется исходный текст которого показан е кон це листинга 9-2. задача этого метода — создание ис точника данных и установка связи между ним и элементом уп равления Внимательный читатель заметит, что ни на Данные и формы рис. 9-7, ни в 9-1 не используется столбец DateEntered.

В методе показано, как создаются дополнительные столбцы:

= New = "DateEntered" = "Date Entered" = HorizontalAlign = Center = В этой части исходного текста я впервые создаю новый экземп объекта BoundColumn. Я установил значения для некоторых свойств, наиболее интересным из которых является DataFormat String. По умолчанию поля типа дата отображаются в формате где мм -- дд — день, гггг — год, суток (AM часть дня до полудня, РМ — пополудни). В большинстве случаев указание даты и времени с точностью до секунды излишне. В данном примере использую формат строки: Здесь зна чение 0 указывает, что нужно отображать только a d после двоеточия указывает Framework, что используется короткий формат даты BoundColumn — это всего один из множества различных типов столбцов, которые разме щают в элементе управления DataCrid. Создав в программе но вый столбец, я установил значение свойства в True, так как столбец DataEntered не предполагается изменять. Полный список типов столбцов приведен в таблице Таблица 9-1. Типы столбцов, размещаемые в элементе Тип столбца Описание BoundColumn Столбец с к полю, указанному в свой стве управления Кнопка для Позволяет до бавлять в столбец настраиваемые кнопки, та кие, как кнопка Add (см. стр.) 344 Таблица 9-1.

Тип столбца Описание Столбец с Я исполь зовал его в предыдущем примере в столбцах Edit и Delete Отображает содержимое отдельных элемен тов столбца, таких как гиперссылки.

к примеру, для указания ссылки на до полнительную информацию Отображает все элементы столбца согласно определенному шаблону. Позволяет легко на внешний столбца После создания объекта столбца и определения его свойств добавляю столбец в набор Columns DataGrid, воспользовавшись методом Add.

В конце в вызывается метод объекта DataGrid. У также существует собственный метод DataBind, и в случае использования нескольких элементов управ ления с привязкой к данным, предпочтительнее имен но его, а не метод DataBind DataGrid. Это очень важно.

Когда страница загружается в первый раз (и когда значение свой ства события равно а также при лю бом изменении источника данных, происходит переустановка привязки элементов управления к данным. Ни Framework, Visual Studio задачу автоматически. Вы должны сами позаботиться о явной привязке к данным.

Совет Я не пользуюсь визуальными средствами Visual Studio создания источников данных и V этих средств ряд преиму например создание наборов данных со стро гим контролем типов. Недостаток заключается в определенной странности создаваемого ими кода.

Например, иногда Visual Studio создает сотни строк исходного текста на SQL, правый кото рого «обрезан», а оставшиеся части строк монно перенесены на строку, невзирая на названия имен столбцов или ключевых SQL.

Данные и формы Получаются корректные но такой код чрезвычайно трудно воспринимать, а тем более сопровождать. В примерах, приведенных в этой книге, я не применяю визуальные средства для создания источников данных и подключений. Я счи таю, что лучше сразу приложить дополнительные усилия, чем потом править исходный текст.

В файле логики страницы предусмотрены обработ чики событий для кнопок. Вот код процедуры для кнопки Delete:

Protected Sub Sender As Object, e As Dim dr As Dim item As Dim cmd As Me.cn = New + Try = cmd = New "Delete Customer WHERE + item, Catch As Exception He забываем обработать ошибку Finally End End Sub Следует отметить, что привязка к данным в выполняет ся в режиме «только для чтения». Чтобы внести изменения, вам внести дополнительный код в программную часть.

Прежде всего необходимо дополнительное подклю чение, так же как в примерах главы 8. Далее создается в соответствии с оператором SQL. В данном случае мне нужно удалить выделенную в форме.

передается обработчику OnDelete в аргументе е. V этого есть свойство Item, у 346 Глава которого з очередь имеется набор Cells. Набор отсчет в котором зедегся от нуля, содержит объекты соответствующие отдельным ячейкам строки. Ис пользуя эту информацию, легко получить значение поля для строки. Я знаю, что оно находится в тре тьем столбце, и, таким образом, я ссылаюсь на него как Cell$(2), После этого я создаю SQL-оператор удаления строки Совет В реальных программах лучше проектиро вать объекты для создания в подобных описанному классах, в которых есть несколько ме тодов с созданием подключений. предус мотреть в классе метод в за висимости от бы объект или Развивая этот метод далее, приходим к что для более крупных систем несомненно целесообразнее изолировать все классы для доступа к данным в отдельном DAL-уров не Data Layer). В мире СОМ этот уровень и часто располагают на разных компьюте рах. В для этого меньше причин. В несмотря на то, что лично я обычно использую в больших я бы не стал использовать для этого один или несколько отдельных компьютеров.

Изучение применения DAL в все еще про и нет четких рекомендаций для того или другого случая.

После настройки объекта я метод (он указывает, что команда не возвращает никаких записей). В заключение я чтобы отображать на странице последнее представление данных. Это важно, пото му что если в процессе обновления изменилось значение поля, по которому данные, то их расположение в таб личной форме также изменится. Процедура события по методу, похожему на только она посыла ет конструктору SQL-команду обновления, а не уда ления.

Данные и формы Примечание С точно таким же успехом я мог бы воспользоваться и связанными с ними. Но так как я ра ботаю с расположенными на SQL разумнее использовать объекты из пространства Оставшиеся два обработчика событий, и пол ностью отличаются от рассмотренных ранее OnDelete и Вот исходный текст совсем небольшой процедуры OnEdit:

Protected Sub sender As Object, e As = e. Item.

End Sub В части программы я присваиваю свойству объекта DataCrid значение объекта DataGrid которое передается в качестве аргумента обработчику события. В заключение я функцию doData Обработчик события OnCancel, которое происходит при выходе из режима редактирования без сохранения изменений, похож на приведенный выше, за исключением того, что значе ние Editltemlndex в чтобы указать, что нет элементов. OnUpdate также устанавливает значение Editltemlndex равным по завершении обновления данных, чтобы после обновления в окне в режиме не было выделенных строк.

Примечание В коде OnUpdate есть небольшая проблема. ли вам ее обнаружить? Когда я создаю строку SQL-команды обновления, я, как по ложено, заключаю строки, отправляемые оператору UPDATE, в одиночные кавычки. Но что если в из строк уже есть такие символы, на пример в названии компании «O'Reilly's Golf»? Это может стать причиной ошибки, так как SQL Server распознает в качестве имени компании только пер 348 Глава букву «О» и «споткнется», анализируя оставшу юся часть строки. Одно из решений заключается в замене каждой одиночной кавычки такие пары внутри строки SQL Server интерпретирует как символ одиночной кавычки. воспользовать ся параметрами. Как применять хранимые процеду ры и я покажу в следующем примере.

Серверный элемент управления Repeater сомнения удобный элемент управления отобра жения результатов поиска или отдельных Однако неко торые недостатки затрудняют его использование в качестве сред ства для редактирования. Во-первых (и это самое обра тите внимание на разницу в ширине табличных форм на рис. 9-1 9-1. Это небольшая проблема, если у немного полей, как в моем примере для С ростом числа она становится острее.

Другой недостаток заключается в сложности контроля процесса Один из способов его устранения — использова ние объектов для описания столбца в режиме просмотра и актирования. Применение и настройка имеет смысл, только когда нужно редактировать один-два столбца в записи.

При работе с таблицей Customer мы столкнемся с обеими про блемами. Во-первых, в таблице присутствуют столбцы с да тами и столбец для адреса электронной почты. Они требуют спе проверки. Так, для поля необходимо убе диться в достоверности даты, а для поля — в прав доподобности адреса электронной почты. Во-вторых, количество столбцов в таблице Customer достаточно велико для отображе ния на обычной странице. В листинге 9-3 показан SQL-оператор для создания всей таблицы Customer.

CREATE TABLE C [int] IDENTITY (1, 1) NOT NULL, [nvarchar] (50) NOT NULL, [Address] [nvarchar] NULL, [City] [nvarchar] NULL, [State] [nvarchar] (10) NULL, Данные и формы [nvarchar] (20) NULL, [ContactFirstName] [nvarchar] NULL, [nvarchar] (50) NULL, [nvarchar] (128) NULL, [datetime] NOT NULL, [int] NOT NULL, [nvarchar] (50) NULL, [Password] [nvarchar] (50) NULL, [DateEntered] [datetime] NOT NULL [datetime] NULL ) ON Листинг 9-3. SQL-оператор создания таблицы Customer Даже если бы я переложил управление DateEntered и DateModified на базу данных, все равно много полей, требующих Простой просмотр полей в табличной фор ме может стать проблематичным. К счастью, существуют и аль тернативные варианты. На рис. 9-8 показано другое представле ние данных, созданное с применением серверного элемента уп равления Repeater.

Рис. 9-8. Отображение данных таблицы Customer с использованием элемента управления Repeater 350 Глава Несомненно, на этой странице представлено больше информа ции, чем в примере на рис. Видны детали данных (все столбцы таблицы, за исключением автоматически управляемых полей даты). Я изменил шрифт адресов электронной почты, поскольку ширина строк с адресами больше, чем ширина строк с контактными лицами, имена которых отображаются немного выше в этом же столбце. В первом и втором столбце отображе ны данные различных полей в более удобном виде. Например, поле и связанная с ним информация об адресе компании расположены привычным образом. Несмотря на необ ходимость дополнительных усилий для обеспечения такой гибко сти, преимущество заключается в том, что вы полностью ролируете внешний вид. Настолько же важно то, что совместная работа с дизайнерами окажется намного про применении чем Основы работы с элементом управления Repeater Во многих элемент управления Repeater так же, как и DataCrid, но он обеспечивает больше средств деталь ной настройки столбцов. Нет никаких ограничений на число ото бражаемых кроме можно вообще отказаться от табличного представления. Информацию отдельных связанных с элементом управления пред ставлять без какого-либо или размечать толь ко тэгами
и В большинстве примеров применения Repeater, включая и приведенный здесь пример, для отображе ния данных на самом деле используются HTML-таблицы. В Repeater отсутствуют некоторые удобства, реализованные в например разбиение на tfepeater также пре доставляет определенные средства обработки однако в данном примере я их не использую.

Совет Элемент управления очень похож на Он примечателен одной особенностью возможностью создавать многостолбцовые пред ставления данных. Для управления таким представ лением изменяют значения и Последнее опреде ляет формат отображения: таблица или потоковый вывод.

Данные и формы Элемент Repeater поддерживает каж дый из которых порядок отображения данных, посту пающих в Repeater. Эти шаблоны описаны в таблице 9-2.

Как и з в есть Важно ему присвоить значение и убедиться, что элемент управления в со стоянии получать данные, в случае Repeater не смо жет ничего отобразить.

Совет это и не обязательно, иногда разумно создавать Repeater только с шаблонами ItemTemplate и FooterTemplate. Завершив особенно это касается полу ченный исходный текст шаблона ItemTemplate копи руют в В противном случае вам придется отлаживать оба шаблона и вно сить изменения в исходный текст одновременно это часто становится ошибок.

Таблица элементом управления Repeater Шаблон Описание ItemTemplate которые один раз каждого элемента в источнике дан ных. В этот шаблон можно сер верные элементы управления Web и HTML Если указано особые элементы обра этим шаблоном, а не Item к примеру, со здания эффекта неактивности (выделение серым цветом) элементов, поддерживаю щих две цветовые схемы. (На рис. 9- для вывода строки на белом фоне, а — на светло-голубом.) Обычно содержит код для формирования начала таблицы и ее заголовка, Нужно от метить, поскольку эле мент таблицы этому тэгу не принадлежит, при работе с элементом управления Repeater в Visual Studio придется использовать отображение в виде HTML (см. след. crp.J 352 Глава Таблица 9-2. (продолжение) Шаблон Описание Завершает формирование табличной фор мы. необходимо закрыть все которые остались отрытыми в шаблоне Применяется для отображения текста меж ду элементами. Например, когда при ис элемента управления Repeater требуется создавать сложный HTML-код, между строками Текст файла RepeaterTest.aspx показан в листинге 9-4.

Раде Visual Studio \ . HTML-текст вне формы обычно бесполезен и в об щем случае не выполняет возложенных на него задач. Тэг
часто содержит атрибут который определяет действие, выполняемое при отправке формы, и атрибут method, указыва на метод пересылки информации из формы на сервер.

Последний имеет два допустимых значения;

Post или Get. По умолчанию применяется метод однако, начиная с HTML вер сии 4, его применять настоятельно не рекомендуется из-за про блем с национальных языков. Метод Post выполня ется в два шага (с точки зрения разработчиков страницы они выполняются незаметно, «прозрачно») и направляет всю инфор мацию, введенную в форму, в стандартное местоположение, от куда ее считывает сервер. Метод Get включает содержимое фор мы в состав URL-адреса в виде аргументов. Например, при от правке формы, на странице test.aspx и содержа 444 Приложение Б единственное текстовое поле пате со значением Doug, no методу в браузере з строке адреса URL-адрес отсутствия ошибок обработки):

Так же метод лучше — Post или Как это часто однозначного ответа нет. Для маленьких форм с небольшим мом пересылаемой информации более эффективен Cef, а в боль ших формах может что сервер не способен обрабо тать URL-адрес длины, и поэтому лучше использовать Post. Кроме того, при пересылке из формы нужно исполь зовать Post, чтобы пароль не отображался открытым текстом в URL-адресе.

Как вы заметили, изучая текст листинга В-1 (результат его обра ботки в окне браузера показан на рис. структура всех менты управления довольно В текстовом поле я задал значение по умолчанию. Практически всегда атрибут эле мента HTML определяет либо первоначально отобра женное значение, либо значение, возвращенное при выборе эле мента управления и отправке формы. В в средствах равления используются термины, более похожие на ключевые слова Visual Basic. Так, HTML-атрибуту value соответствует ство Text. Некоторым не нравится отличие имен объек тов в от атрибутов в HTML, но программисты, знающие Visual Basic, наверняка себя комфортно при работе с Я хотел, чтобы в описании списка отображался текст Вместо этого литерала, я написал Если бы я воспользовался знаками угловых скобок и строка

Pages:     | 1 |   ...   | 2 | 3 || 5 |

«т Посвящается Тиму и Эрин — я живу благодаря людям, которых люблю. ...»

-- [ Страница 4 ] --

HTML-код, созданный разработчиком пользовательского интерфейса, смешивается с кодом разработчика баз данных. Это не вызовет трудностей, если обе задачи выполняет один век, что характерно для небольших сайтов. Однако, когда задача разработки приложения распределена между разработчиками ин применяющими HTML, и разработчиками программного кода, использующими VBScript (Microsoft Visual BasicScripting Edition), часто возникают затруднения, особенно когда при созда нии большого приложения разработка пользовательского интер фейса и кода связи с базой данных выполняется одновременно, Этот конфликт можно свести к минимуму, воспользовавшись средством для управления исходным текстом, но оно же может замедлить работу одного из разработчиков, а другому придется работать с единственным файлом с обоими типа кода.

328 Глава Вторая проблема просто но я с ней столько раз, что уже сбился со счета. На ранних разработки боль шого проекта по крайней мере раз з неделю того, чтобы следовать приведенному ранее образцу, пишу примерно такой код:

<х while <>

отмечает начало HTML-таблицы. На рис. В-2 незаметно, что я применил таблицу, так как не видно табличной сетки. (Существует много применяемых для управления внешним видом таблиц, и я настоятельно рекомен дую вам изучить их -— книг на эту тему написано предостаточ но.) HTML Widget Page with Tables What follows is a text is outside the This is a text box. The value 448 Приложение Б attribute means that there is a default value for this text box:

This is a text box that displays each commonly used as a password entry box;

This is a text I have set the to 2, and the columns to 20: