Настройка интерфейса изменения данных (C#)
В этом руководстве мы рассмотрим, как настроить интерфейс редактируемого элемента управления 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 bool UpdateProduct(string productName, int? categoryID,
int? supplierID, bool discontinued, int productID)
{
Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID);
if (products.Count == 0)
// no matching record found, return false
return false;
Northwind.ProductsRow product = products[0];
product.ProductName = productName;
if (supplierID == null) product.SetSupplierIDNull();
else product.SupplierID = supplierID.Value;
if (categoryID == null) product.SetCategoryIDNull();
else product.CategoryID = categoryID.Value;
product.Discontinued = discontinued;
// Update the product record
int rowsAffected = Adapter.Update(product);
// Return true if precisely one row was updated, otherwise false
return rowsAffected == 1;
}
Шаг 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 как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по