Настройка интерфейса изменения данных (VB)
В этом руководстве мы рассмотрим, как настроить интерфейс редактируемого элемента управления GridView, заменив стандартные элементы управления TextBox и CheckBox альтернативными входными веб-элементами управления.
Введение
BoundFields и CheckBoxFields, используемые элементами управления GridView и DetailsView, упрощают процесс изменения данных благодаря возможности отрисовки интерфейсов только для чтения, редактируемых и вставляемых интерфейсов. Эти интерфейсы можно визуализировать без добавления дополнительной декларативной разметки или кода. Однако интерфейсы BoundField и CheckBoxField не имеют возможности настройки, которые часто требуются в реальных сценариях. Чтобы настроить редактируемый или вставляемый интерфейс в GridView или DetailsView, необходимо использовать TemplateField.
В предыдущем руководстве мы узнали, как настроить интерфейсы изменения данных путем добавления веб-элементов управления проверки. В этом руководстве мы рассмотрим, как настроить фактические веб-элементы управления сбора данных, заменив стандартные элементы управления TextBox и CheckBoxField BoundField и CheckBoxField альтернативными входными веб-элементами управления. В частности, мы создадим редактируемое представление GridView, которое позволяет обновлять имя продукта, категорию, поставщик и состояние прекращения. При редактировании определенной строки поля категории и поставщика будут отображаться как DropDownLists, содержащие набор доступных категорий и поставщиков на выбор. Кроме того, мы заменим checkBox По умолчанию CheckBoxField элементом управления RadioButtonList, который предлагает два варианта: "Активный" и "Прекращено".
Рис. 1. Интерфейс редактирования GridView включает dropDownLists и RadioButtons (щелкните для просмотра полноразмерного изображения)
Шаг 1. Создание соответствующейUpdateProduct
перегрузки
В этом руководстве мы создадим редактируемый Элемент GridView, который позволяет изменять название продукта, категорию, поставщик и состояние неподдерживаемого продукта. Поэтому нам нужна перегрузка UpdateProduct
, которая принимает пять входных параметров этих четырех значений ProductID
продукта плюс . Как и в предыдущих перегрузках, эта будет:
- Получение сведений о продукте из базы данных для указанного
ProductID
объекта . - Обновите
ProductName
поля ,CategoryID
,SupplierID
иDiscontinued
, и - Отправьте запрос на обновление в DAL с помощью метода TableAdapter
Update()
.
Для краткости, для этой конкретной перегрузки я опустил бизнес-правило, проверка, которое гарантирует, что продукт, помеченный как неподдерживаемый, не является единственным продуктом, предлагаемым его поставщиком. Вы можете добавить его в , если вы предпочитаете, или, в идеале, рефакторинг логики в отдельный метод.
В следующем коде показана новая UpdateProduct
перегрузка ProductsBLL
в классе :
<System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, False)>
Public Function UpdateProduct(
ByVal productName As String, ByVal categoryID As Nullable(Of Integer),
ByVal supplierID As Nullable(Of Integer), ByVal discontinued As Boolean,
ByVal productID As Integer)
As Boolean
Dim products As Northwind.ProductsDataTable = Adapter.GetProductByProductID(productID)
If products.Count = 0 Then
Return False
End If
Dim product As Northwind.ProductsRow = products(0)
product.ProductName = productName
If Not supplierID.HasValue Then
product.SetSupplierIDNull()
Else
product.SupplierID = supplierID.Value
End If
If Not categoryID.HasValue Then
product.SetCategoryIDNull()
Else
product.CategoryID = categoryID.Value
End If
product.Discontinued = discontinued
Dim rowsAffected As Integer = Adapter.Update(product)
Return rowsAffected = 1
End Function
Шаг 2. Создание редактируемого элемента GridView
После добавления перегрузки UpdateProduct
мы готовы создать редактируемый GridView. Откройте страницу CustomizedUI.aspx
в папке EditInsertDelete
и добавьте элемент управления GridView в Designer. Затем создайте объект ObjectDataSource из смарт-тега GridView. Настройте ObjectDataSource для получения сведений о продукте ProductBLL
с помощью метода класса GetProducts()
и обновления данных продукта с помощью только что созданной UpdateProduct
перегрузки. На вкладках ВСТАВКА и УДАЛЕНИЕ выберите (Нет) в раскрывающихся списках.
Рис. 2. Настройка ObjectDataSource для использования только что созданной UpdateProduct
перегрузки (щелкните для просмотра полноразмерного изображения)
Как мы видели в руководствах по изменению данных, декларативный синтаксис для ObjectDataSource, созданного Visual Studio, назначает OldValuesParameterFormatString
свойство .original_{0}
Это, конечно, не будет работать с уровнем бизнес-логики, так как наши методы не ожидают, что исходное ProductID
значение будет передано. Поэтому, как мы уже делали в предыдущих руководствах, уделите некоторое время, чтобы удалить это назначение свойства из декларативного синтаксиса или вместо этого присвойте этому свойству {0}
значение .
После этого изменения декларативная разметка ObjectDataSource должна выглядеть следующим образом:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetProducts" TypeName="ProductsBLL"
UpdateMethod="UpdateProduct">
<UpdateParameters>
<asp:Parameter Name="productName" Type="String" />
<asp:Parameter Name="categoryID" Type="Int32" />
<asp:Parameter Name="supplierID" Type="Int32" />
<asp:Parameter Name="discontinued" Type="Boolean" />
<asp:Parameter Name="productID" Type="Int32" />
</UpdateParameters>
</asp:ObjectDataSource>
Обратите внимание, что OldValuesParameterFormatString
свойство было удалено и что в UpdateParameters
коллекции есть Parameter
объект для каждого из входных параметров, ожидаемых перегрузкойUpdateProduct
.
Хотя ObjectDataSource настроен для обновления только подмножества значений продукта, в GridView в настоящее время отображаются все поля продукта. Отредактируйте GridView, чтобы:
- Он включает
ProductName
только ,SupplierName
,CategoryName
BoundFields иDiscontinued
CheckBoxField - Поля
CategoryName
иSupplierName
, отображаемые перед (слева)Discontinued
CheckBoxField - Для
CategoryName
свойства иSupplierName
BoundFields заданыHeaderText
значения "Category" и "Supplier" соответственно - Поддержка редактирования включена (проверка флажок Включить редактирование в смарт-теге GridView)
После этих изменений Designer будет выглядеть примерно так, как на рисунке 3, с декларативным синтаксисом GridView, показанным ниже.
Рис. 3. Удаление ненужных полей из GridView (щелкните для просмотра полноразмерного изображения)
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ObjectDataSource1">
<Columns>
<asp:BoundField DataField="ProductName"
HeaderText="ProductName" SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="Category"
ReadOnly="True"
SortExpression="CategoryName" />
<asp:BoundField DataField="SupplierName" HeaderText="Supplier"
ReadOnly="True"
SortExpression="SupplierName" />
<asp:CheckBoxField DataField="Discontinued"
HeaderText="Discontinued" SortExpression="Discontinued" />
</Columns>
</asp:GridView>
На этом этапе поведение GridView только для чтения завершено. При просмотре данных каждый продукт отображается в виде строки в GridView с указанием имени, категории, поставщика и состояния неподдерживаемого продукта.
Рис. 4. Интерфейс Read-Only GridView завершен (щелкните, чтобы просмотреть полноразмерное изображение)
Примечание
Как описано в руководстве Общие сведения о вставке, обновлении и удалении данных, крайне важно включить состояние представления GridView (поведение по умолчанию). Если для свойства false
GridView задано EnableViewState
значение , возникает риск того, что параллельные пользователи непреднамеренно удаляют или редактируют записи.
Шаг 3. Использование раскрывающегося списка для интерфейсов редактирования категорий и поставщиков
Напомним, что ProductsRow
объект содержит CategoryID
свойства , CategoryName
, SupplierID
и SupplierName
, которые предоставляют фактические значения идентификаторов внешнего ключа в Products
таблице базы данных и соответствующие Name
значения в Categories
таблицах и Suppliers
. CategoryID
SupplierID
И ProductRow
могут считываться из и записываться в , а CategoryName
свойства и SupplierName
помечаются как доступные только для чтения.
Из-за состояния CategoryName
только для чтения свойств и SupplierName
соответствующие BoundFields имеют ReadOnly
значение True
, что предотвращает изменение этих значений при изменении строки. Хотя мы можем присвоить свойству ReadOnly
значение False
, отрисовка CategoryName
и SupplierName
BoundFields как TextBoxes во время редактирования, такой подход приведет к исключению, когда пользователь попытается обновить продукт, так как нет UpdateProduct
перегрузки, принимающей CategoryName
входные данные и SupplierName
. На самом деле мы не хотим создавать такую перегрузку по двум причинам:
- В
Products
таблице нетSupplierName
полей илиCategoryName
, ноSupplierID
иCategoryID
. Поэтому мы хотим, чтобы наш метод передавал эти конкретные значения идентификаторов, а не значения таблиц подстановки. - Требовать от пользователя ввода имени поставщика или категории меньше, чем идеально, так как это требует от пользователя знать доступные категории и поставщиков и их правильное написание.
В полях "Поставщик" и "Категория" должны отображаться категория и имена поставщиков в режиме только для чтения (как сейчас) и раскрывающийся список применимых параметров при редактировании. С помощью раскрывающегося списка конечный пользователь может быстро увидеть, какие категории и поставщики доступны для выбора, и может легко сделать выбор.
Чтобы обеспечить такое поведение, необходимо преобразовать SupplierName
и CategoryName
BoundFields в TemplateFields, которые ItemTemplate
выдают SupplierName
значения и и CategoryName
используют EditItemTemplate
элемент управления DropDownList для перечисления доступных категорий и поставщиков.
Добавление раскрывающихсяCategories
списков иSuppliers
Начните с преобразования SupplierName
и CategoryName
BoundFields в TemplateFields, щелкнув ссылку Изменить столбцы из смарт-тега GridView, выбрав BoundField из списка в левом нижнем левом списке и щелкнув ссылку "Преобразовать это поле в TemplateField". Процесс преобразования создаст TemplateField с ItemTemplate
и EditItemTemplate
, как показано в декларативном синтаксисе ниже:
<asp:TemplateField HeaderText="Category" SortExpression="CategoryName">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Eval("CategoryName") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Bind("CategoryName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
Так как BoundField был помечен как доступный только для чтения, и ItemTemplate
EditItemTemplate
содержат веб-элемент управления Label Web, свойство которого Text
привязано к соответствующему полю данных (CategoryName
в синтаксисе выше). Необходимо изменить EditItemTemplate
, заменив элемент управления Label Web элементом управления DropDownList.
Как мы видели в предыдущих руководствах, шаблон можно изменить с помощью Designer или непосредственно из декларативного синтаксиса. Чтобы изменить его с помощью Designer, щелкните ссылку Изменить шаблоны в смарт-теге GridView и выберите для работы с полем EditItemTemplate
Категория . Удалите элемент управления Label Web и замените его элементом управления DropDownList, присвоив свойству Идентификатор DropDownList значение Categories
.
Рис. 5. Удаление TexBox и добавление раскрывающегося списка в EditItemTemplate
(щелкните для просмотра полноразмерного изображения)
Далее необходимо заполнить Раскрывающийся список доступными категориями. Щелкните ссылку Выбор источника данных в смарт-теге DropDownList и создайте объект ObjectDataSource с именем CategoriesDataSource
.
Рис. 6. Создание нового элемента управления ObjectDataSource с именем CategoriesDataSource
(щелкните для просмотра полноразмерного изображения)
Чтобы объект ObjectDataSource вернул все категории, привяжите его к методу CategoriesBLL
GetCategories()
класса .
Рис. 7. Привязка ObjectDataSource к методу CategoriesBLL
(GetCategories()
щелкните для просмотра полноразмерного изображения)
Наконец, настройте параметры DropDownList таким образом, чтобы CategoryName
поле отображалось в каждом DropDownList ListItem
с полем CategoryID
, используемым в качестве значения.
Рис. 8. Отображается CategoryName
поле и CategoryID
используется в качестве значения (щелкните для просмотра полноразмерного изображения)
После внесения этих изменений декларативная разметка EditItemTemplate
для в CategoryName
TemplateField будет включать как DropDownList, так и ObjectDataSource:
<asp:TemplateField HeaderText="Category" SortExpression="CategoryName">
<EditItemTemplate>
<asp:DropDownList ID="Categories" runat="server"
DataSourceID="CategoriesDataSource"
DataTextField="CategoryName" DataValueField="CategoryID">
</asp:DropDownList>
<asp:ObjectDataSource ID="CategoriesDataSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetCategories" TypeName="CategoriesBLL">
</asp:ObjectDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Bind("CategoryName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
Примечание
В раскрывающемся списке в EditItemTemplate
должно быть включено состояние представления. Вскоре мы добавим синтаксис привязки данных в декларативный синтаксис DropDownList и команды привязки данных, такие как Eval()
и Bind()
могут отображаться только в элементах управления, состояние представления которых включено.
Повторите эти действия, чтобы добавить DropDownList с именем Suppliers
в SupplierName
templateField EditItemTemplate
. Это будет включать добавление DropDownList в EditItemTemplate
и создание другого ObjectDataSource. Однако Suppliers
объект ObjectDataSource dropDownList должен быть настроен для вызова SuppliersBLL
метода класса GetSuppliers()
. Кроме того, настройте Suppliers
Раскрывающийся список для отображения CompanyName
поля и используйте SupplierID
поле в качестве значения для его ListItem
значений.
После добавления DropDownLists к двум EditItemTemplate
файлам загрузите страницу в браузере и нажмите кнопку Изменить для продукта Chef Антона Cajun Seasoning. Как показано на рисунке 9, столбцы категории продукта и поставщика отображаются в виде раскрывающихся списков, содержащих доступные категории и поставщики на выбор. Тем не менее, обратите внимание, что первые элементы в обоих раскрывающихся списках выбраны по умолчанию (напитки для категории и экзотические жидкости в качестве поставщика), даже несмотря на то, что шеф-повар Антон Cajun Приправа является приправой, поставляемой New Orleans Cajun Delights.
Рис. 9. Первый элемент в Drop-Down Списки выбран по умолчанию (щелкните для просмотра полноразмерного изображения)
Кроме того, если нажать кнопку Обновить, вы увидите, что для продукта CategoryID
и SupplierID
задано значение NULL
. Оба этих нежелательных поведения вызваны тем, что DropDownLists в EditItemTemplate
не привязаны ни к каким полям данных из базовых данных продукта.
Привязка раскрывающихся списков к полямCategoryID
данных иSupplierID
Чтобы в раскрывающихся списках измененных продуктов и поставщиков были заданы соответствующие значения и чтобы эти значения были отправлены обратно в метод BLL UpdateProduct
при нажатии кнопки Обновить, необходимо привязать свойства DropDownLists SelectedValue
к CategoryID
полям данных и SupplierID
с помощью двусторонней привязки данных. Для этого с помощью Categories
DropDownList можно добавить SelectedValue='<%# Bind("CategoryID") %>'
непосредственно в декларативный синтаксис.
Кроме того, можно задать привязки данных DropDownList, изменив шаблон с помощью Designer и щелкнув ссылку Изменить dataBindings из смарт-тега DropDownList. Затем укажите, что SelectedValue
свойство должно быть привязано к полю CategoryID
с помощью двусторонней привязки данных (см. рис. 10). Повторите декларативный или Designer процесс, чтобы привязать SupplierID
поле данных к Suppliers
DropDownList.
Рис. 10. Привязка CategoryID
к свойству DropDownList SelectedValue
с помощью Two-Way привязки данных (щелкните для просмотра полноразмерного изображения)
После применения привязок к свойствам SelectedValue
двух DropDownLists в столбцах категории и поставщика измененного продукта по умолчанию будут использоваться значения текущего продукта. После нажатия кнопки Обновить CategoryID
значения и SupplierID
выбранного элемента раскрывающегося списка будут переданы методу UpdateProduct
. На рисунке 11 показано руководство после добавления операторов привязки данных. Обратите внимание, что выбранные элементы раскрывающегося списка для приправы шеф-повара Антона Каджун правильно приправы и Нового Орлеана Cajun Delights.
Рис. 11. Текущая категория измененного продукта и значения поставщика выбраны по умолчанию (щелкните для просмотра полноразмерного изображения)
ОбработкаNULL
значений
Столбцы CategoryID
и SupplierID
в Products
таблице могут быть NULL
, но dropDownLists в EditItemTemplate
не включают элемент списка для представления NULL
значения. Это имеет два последствия:
- Пользователь не может использовать наш интерфейс для изменения категории продукта или поставщика с не-значения
NULL
на категориюNULL
продукта - Если в продукте
NULL
CategoryID
есть илиSupplierID
, нажатие кнопки Изменить приведет к исключению. Это связано с тем, чтоNULL
значение, возвращаемоеCategoryID
в операторе (илиSupplierID
),Bind()
не сопоставляется со значением в DropDownList (DropDownList создает исключение, если егоSelectedValue
свойству присвоено значение, не вложенное в коллекцию элементов списка).
Для поддержки NULL
CategoryID
значений и SupplierID
необходимо добавить еще один ListItem
элемент в каждый DropDownList для представления NULL
значения. В учебнике Фильтрация основных и подробных данных с помощью DropDownList мы узнали, как добавить дополнительный ListItem
элемент в список dropDownList для исходящего трафика, который включал задание свойства True
DropDownList AppendDataBoundItems
в значение и добавление дополнительного ListItem
вручную . Однако в этом предыдущем руководстве мы добавили ListItem
с Value
.-1
Однако логика привязки данных в ASP.NET автоматически преобразует пустую строку в NULL
значение и наоборот. Поэтому для работы с этим руководством мы хотим ListItem
, чтобы символы были Value
пустой строкой.
Для начала задав для обоих свойств DropDownLists AppendDataBoundItems
значение True
. Затем добавьте , NULL
ListItem
добавив следующий <asp:ListItem>
элемент в каждый DropDownList, чтобы декларативная разметка выглядела следующим образом:
<asp:DropDownList ID="Categories" runat="server"
DataSourceID="CategoriesDataSource" DataTextField="CategoryName"
DataValueField="CategoryID" SelectedValue='<%# Bind("CategoryID") %>'
AppendDataBoundItems="True">
<asp:ListItem Value="">(None)</asp:ListItem>
</asp:DropDownList>
Я решил использовать значение "(None)" в качестве текстового значения для этого ListItem
, но при желании вы можете изменить его на пустую строку.
Примечание
Как мы видели в учебнике Фильтрация основных и подробных данных с помощью DropDownList, ListItem
объекты можно добавить в DropDownList с помощью Designer, щелкнув свойство DropDownList Items
в окно свойств (который отобразит ListItem
Редактор Коллекции). Однако обязательно добавьте NULL
ListItem
для этого руководства с помощью декларативного синтаксиса. Если вы используете ListItem
Редактор Коллекции, созданный декларативный синтаксис будет полностью пропускать Value
параметр при назначении пустой строки, создавая декларативную разметку, например: <asp:ListItem>(None)</asp:ListItem>
. Хотя это может выглядеть безобидно, отсутствующее значение приводит к тому, что DropDownList будет использовать Text
значение свойства вместо нее. Это означает, что если этот NULL
ListItem
параметр выбран, будет предпринята попытка присвоить значение "(None)" , что приведет к CategoryID
исключению. При явном задании Value=""
NULL
значение будет присваиваться CategoryID
при выборе NULL
ListItem
.
Повторите эти действия для раскрывающегося списка поставщиков.
С помощью этого дополнительного ListItem
интерфейса редактирования теперь можно назначать NULL
значения полям Product CategoryID
и SupplierID
, как показано на рис. 12.
Рис. 12. Выберите (нет), чтобы назначить NULL
значение категории или поставщика продукта (щелкните, чтобы просмотреть полноразмерное изображение)
Шаг 4. Использование radioButtons для состояния "Прекращено"
В настоящее время поле данных продуктов Discontinued
выражается с помощью CheckBoxField, который отображает отключенный флажок для строк, доступных только для чтения, и включенный флажок для редактируемой строки. Хотя этот пользовательский интерфейс часто подходит, при необходимости его можно настроить с помощью TemplateField. В этом руководстве давайте изменим CheckBoxField на TemplateField, использующий элемент управления RadioButtonList с двумя параметрами "Активный" и "Прекращено", из которых пользователь может указать значение продукта Discontinued
.
Начните с преобразования Discontinued
CheckBoxField в TemplateField, который создаст TemplateField с ItemTemplate
и EditItemTemplate
. Оба шаблона включают CheckBox со свойством Checked
, привязанным к полю Discontinued
данных. Единственное различие между ними заключается в том, что свойству ItemTemplate
CheckBox Enabled
присвоено значение False
.
Замените CheckBox в ItemTemplate
и EditItemTemplate
элементом управления RadioButtonList, присвоив свойствам RadioButtonLists ID
значение DiscontinuedChoice
. Затем укажите, что каждый элемент RadioButtonLists должен содержать два переключателя: один с меткой "Активный" со значением "False", а другой с меткой "Не поддерживается" со значением "True". Для этого можно либо ввести <asp:ListItem>
элементы напрямую с помощью декларативного синтаксиса, либо использовать ListItem
Редактор Collection из Designer. На рисунке 13 показана ListItem
Редактор Коллекции после указания двух параметров переключателя.
Рис. 13. Добавление активных и неподдерживаемых параметров в RadioButtonList (щелкните для просмотра полноразмерного изображения)
Так как Элемент RadioButtonList в ItemTemplate
не должен быть редактируемым, задайте для его Enabled
свойства False
значение , оставив Enabled
для свойства True
значение (по умолчанию) для RadioButtonList в EditItemTemplate
. Это сделает переключатели в нередактируемой строке только для чтения, но позволит пользователю изменять значения RadioButton для измененной строки.
Нам по-прежнему нужно назначить свойства элементов управления SelectedValue
RadioButtonList, чтобы соответствующий переключатель был выбран на основе поля данных продукта Discontinued
. Как и в случае с DropDownLists, рассмотренным ранее в этом руководстве, этот синтаксис привязки данных можно добавить непосредственно в декларативную разметку или через ссылку Edit DataBindings в смарт-тегах RadioButtonLists.
После добавления двух элементов RadioButtonLists и их Discontinued
настройки декларативная разметка TemplateField должна выглядеть следующим образом:
<asp:TemplateField HeaderText="Discontinued" SortExpression="Discontinued">
<ItemTemplate>
<asp:RadioButtonList ID="DiscontinuedChoice" runat="server"
Enabled="False" SelectedValue='<%# Bind("Discontinued") %>'>
<asp:ListItem Value="False">Active</asp:ListItem>
<asp:ListItem Value="True">Discontinued</asp:ListItem>
</asp:RadioButtonList>
</ItemTemplate>
<EditItemTemplate>
<asp:RadioButtonList ID="DiscontinuedChoice" runat="server"
SelectedValue='<%# Bind("Discontinued") %>'>
<asp:ListItem Value="False">Active</asp:ListItem>
<asp:ListItem Value="True">Discontinued</asp:ListItem>
</asp:RadioButtonList>
</EditItemTemplate>
</asp:TemplateField>
Благодаря этим изменениям Discontinued
столбец был преобразован из списка флажков в список пар переключателей (см. рис. 14). При редактировании продукта выбирается соответствующий переключатель, и состояние продукта может быть обновлено, выбрав другой переключатель и нажав кнопку Обновить.
Рис. 14. Неподдерживаемые флажки заменены парами переключателей (щелкните для просмотра полноразмерного изображения)
Примечание
Discontinued
Так как столбец в Products
базе данных не может иметь NULL
значения, нам не нужно беспокоиться о сборе NULL
информации в интерфейсе . Однако если столбец может содержать NULL
значения, Discontinued
мы хотели бы добавить в список третий переключатель, для которого Value
задана пустая строка (Value=""
), как и в случае с категорией и dropDownLists поставщика.
Сводка
Хотя boundField и CheckBoxField автоматически отрисовывают интерфейсы только для чтения, редактирования и вставки, они не имеют возможности настройки. Однако часто нам нужно настроить интерфейс редактирования или вставки, например добавить элементы управления проверкой (как мы видели в предыдущем руководстве) или путем настройки пользовательского интерфейса сбора данных (как мы видели в этом руководстве). Настройка интерфейса с помощью TemplateField может быть обобщена в следующих шагах:
- Добавление TemplateField или преобразование существующего BoundField или CheckBoxField в TemplateField
- При необходимости расширять интерфейс
- Привязка соответствующих полей данных к добавленным веб-элементам управления с помощью двусторонней привязки данных
Помимо использования встроенных ASP.NET веб-элементов управления, можно также настроить шаблоны TemplateField с помощью пользовательских, скомпилированных серверных элементов управления и пользовательских элементов управления.
Счастливое программирование!
Об авторе
Скотт Митчелл (Scott Mitchell), автор семи книг ASP/ASP.NET и основатель 4GuysFromRolla.com, работает с Веб-технологиями Майкрософт с 1998 года. Скотт работает независимым консультантом, тренером и писателем. Его последняя книга Sams Teach Yourself ASP.NET 2.0 в 24 часа. Его можно связать по адресу mitchell@4GuysFromRolla.com. или через его блог, который можно найти по адресу http://ScottOnWriting.NET.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по