ASP.Net. Лекція 9. Елементи-споживачі даних ASP.NET 2.0. Елементи управління для відображення даних (исходники), HTML, XML, DHTML, Інтернет-технології, статті

Лекція 8

В ASP. NET з’явилися 3 нові елементи керування для відображення табличних даних: GridView, DetailsView і FormView.


GridView


Елемент управління GridView є вдосконаленим елементом, покликаним замінити DataGrid. Все, сказане про DataGrid, відноситься до GridView, але з трохи іншими назвами. Так, замість BoundColumn вживається BoundField, а в назвах стилів замість Item знаходиться Row. Таким чином будь DataGrid можна перетворити в GridView, але не навпаки. Хоча в найпростішому варіанті DataGrid відображає таку ж таблицю, він спадкоємець не DataGrid, а CompositeDataBoundControl.


Головна перевага GridView – автоматичне зв’язування з даними, завдяки чому немає необхідності писати обробники подій, щоб забезпечити функціональність таку як видалення, редагування, сортування, розбиття на сторінки за умови зв’язування з елементами-джерелами даних. Він забезпечує стандартну обробку подібних подій, але її завжди можна розширити, щоб забезпечити додаткові можливості.


На відміну від версії 1.1, нові елементи можуть працювати і на мобільних пристроях.


GridView разом з SqlDataSource з’явиться простим перетягуванням таблиці Users на форму.






  <asp:GridView ID=”GridView1″ runat=”server”
AutoGenerateColumns=”False” DataKeyNames=”UID”
DataSourceID=”SqlDataSource1″
EmptyDataText=”There are no data records to display.”>
<Columns>
<asp:BoundField DataField=”name” HeaderText=”name” SortExpression=”name” />
<asp:BoundField DataField=”Comments” HeaderText=”Comments” SortExpression=”Comments” />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID=”SqlDataSource1″ runat=”server” ConnectionString=”<%$ ConnectionStrings:DemoBaseConnectionString1 %>”
DeleteCommand=”DELETE FROM [Users] WHERE [UID] = @UID” InsertCommand=”INSERT INTO [Users] ([UID], [name], [Comments])
VALUES (@UID, @name, @Comments)”
ProviderName=”<%$ ConnectionStrings:DemoBaseConnectionString1.ProviderName %>”
SelectCommand=”SELECT [UID], [name], [Comments] FROM [Users]”
UpdateCommand=”UPDATE [Users] SET [name] = @name, [Comments] = @Comments WHERE [UID] = @UID”>
<InsertParameters>
<asp:Parameter Name=”UID” Type=”Int32″ />
<asp:Parameter Name=”name” Type=”String” />
<asp:Parameter Name=”Comments” Type=”String” />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name=”name” Type=”String” />
<asp:Parameter Name=”Comments” Type=”String” />
<asp:Parameter Name=”UID” Type=”Int32″ />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name=”UID” Type=”Int32″ />
</DeleteParameters>
</asp:SqlDataSource>

Установка властивості AllowSorting створює в заголовку гіперпосилання, при натисканні на які таблиця буде сортуватися по обраному полю. У цьому виявляється перевага перед DataGrid, для сортування необхідно перевизначити подія SortCommand.


Сортування по полю Comments.


Після повторного натискання на заголовок таблиця сортується по цьому полю в спадному порядку.


Іноді значення в будь-якому полі можуть повторюватися, і потрібно відсортувати значення спочатку за першим полю, потім по іншому. Але сортування за замовчуванням сортує тільки по одному полю. Якщо тепер нажатьть мишою на Comments, сортування по імені пропаде.



















Ім’я

Comments


Burda


Одеса, провідний кулінар


Burda


Редактор журналу мод


Bush


Вашингтон, президент


Bush


Буш-батько


У такому разі допоможе трохи кодування. Перевизначити подія Sorting.






  protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string oldExpression = GridView1.SortExpression;
string newExpression = e.SortExpression;
if (oldExpression.IndexOf(newExpression) < 0)
{
if (oldExpression.Length > 0)
e.SortExpression = oldExpression + “, ” + newExpression;
else
e.SortExpression = newExpression;
}
else
{
e.SortExpression = oldExpression;
}
}

Відсортуємо спочатку по імені, потім по Comments.




















Ім’я


Comments


Burda


Одеса, провідний кулінар


Burda


Редактор журналу мод


Bush


Буш-батько


Bush


Вашингтон, президент


Так само просто додається можливість розбивки на сторінки.






  AllowPaging=”True” PageSize=”5″

Якщо не вказано значення PageSize, він за замовчуванням вважається рівним 10.


Пейджер можна налаштувати разнобразного способами через настройку PagerSettings, наприклад.






  <
  

Замість тексту елементами пейджера можуть служити картинки.






       <PagerSettings Mode=”NextPreviousFirstLast”
FirstPageImageUrl=”~/RW_btn.gif”
LastPageImageUrl=”~/FF_btn.gif”
NextPageImageUrl=”~/fwd_btn.gif”
PreviousPageImageUrl=”~/RW_btn.gif” />

Поле Comments в таблиці може бути порожнім, тобто його значення допускає Null. Можна задати текст, який відображається для таких значень.






  <asp:BoundField DataField=”Comments” HeaderText=”Comments” SortExpression=”Comments” NullDisplayText=”N/A”/>

Введено також шаблон на випадок, коли в джерелі даних немає жодного запису.






  <asp:GridView ID=”GridView1″ runat=”server”>
<EmptyDataTemplate> No records </EmptyDataTemplate>
</asp:GridView>

Видалення і редагування записів робиться додаванням в контейнер стовпця






  <asp:CommandField ShowEditButton=”True” ShowDeleteButton=”True” />

У стовпці з’являються гіперпосилання “Delete”, “Edit”.


Властивість ButtonType може приймати значення Image, в такому випадку потрібно задати шлях до картинки, або кнопки.






  <asp:CommandField ButtonType=”Image” DeleteImageUrl=”~/button-delete.gif” ShowDeleteButton=”True” />
<asp:CommandField ButtonType=”Button” ShowDeleteButton=”True” />

До цих пір всі дані відображалися у вигляді простого тексту. GridView дозволяє настроювати стовпці, щоб у них з’являлися різні елементи управління. Наприклад, якщо в джерелі даних є булеве поле, то GridView буде показувати Checkbox.


Типи колонок ті ж, що і в DataGrid, і до них додалося 2 нових типу.


CheckBoxField – в кожному рядку виводиться прапорець CheckBox.


ImageField дозволяє виводити картинку, якщо в поле зберігається шлях до неї.


HyperLinkField аналог HyperLinkColumn в DataGrid. Його можна використовувати для передачі параметрів QueryStringParameter, щоб в результаті виводити відфільтровану інформацію. На сторінці CustomersByCountry знаходиться джерело даних, знайомий по сьомій лекції.






  <asp:SqlDataSource ID=”SqlDataSource4″ runat=”server” ConnectionString=”<%$ ConnectionStrings:NorthwindConnectionString %>”
SelectCommand=”SELECT * FROM [Customers] where @Country is null or Country = @Country”
ProviderName=”<%$ ConnectionStrings:NorthwindConnectionString.ProviderName %>” CancelSelectOnNullParameter=”False”>
<SelectParameters>
<asp:QueryStringParameter Name=”Country” QueryStringField=”Country” />
</SelectParameters>
</asp:SqlDataSource>

До нього прив’язаний GridView з полем типу HyperLinkField.






  <asp:GridView ID=”GridView1″ runat=”server” DataSourceID=”SqlDataSource4″ OnRowUpdating=”GridView1_RowUpdating”
OnRowDataBound=”GridView1_RowDataBound” OnRowUpdated=”GridView1_RowUpdated”
AutoGenerateColumns=”False”>
<Columns>
<asp:BoundField DataField=”CompanyName” HeaderText=”CompanyName” SortExpression=”CompanyName” />
<asp:BoundField DataField=”ContactName” HeaderText=”ContactName” SortExpression=”ContactName” />
<asp:BoundField DataField=”ContactTitle” HeaderText=”ContactTitle” SortExpression=”ContactTitle” />
<asp:BoundField DataField=”Address” HeaderText=”Address” SortExpression=”Address” />
<asp:BoundField DataField=”City” HeaderText=”City” SortExpression=”City” />
<asp:HyperLinkField HeaderText=”Country” DataNavigateUrlFields=”Country”
DataNavigateUrlFormatString=”~/CustomersByCountry.aspx?country={0}”
DataTextField=”Country” />
</Columns>
</asp:GridView>
<asp:HyperLink ID=”HyperLink1″ runat=”server” NavigateUrl=”~/CustomersByCountry.aspx”>View all</asp:HyperLink>

Події GridView


Елементи управління, описувані в цій лекції, мають по дві події для кожного операції. Одне з них виникає до початку виконання операції, друге – після. Наприклад, і RowUpdated – коли користувач оновлює запис, відбувається подія RowUpdating, виконується команда Update джерела даних і потім відбувається подія RowUpdated.


в RowUpdating ми можемо дізнатися, яка інформація надсилається джерела даних і змінити її, а можливо і скасувати оновлення.


У обробник події RowUpdating передається аргумент типу GridViewUpdateEventArgs. Його властивість RowIndex визначає індекс поточного рядка. Щоб скасувати операцію, встановіть властивість Cancel в true.


У колекціях OldValues ​​і NewValues ​​містяться старі і нові значення полів. У цьому прикладі перед оновленням дані кодуються з метою захисту від хакерів.






     protected void GridView1_RowUpdating(Object sender, GridViewUpdateEventArgs e)
{
foreach (DictionaryEntry entry in e.NewValues)
{
if(entry.Value!=null)
e.NewValues[entry.Key] = Server.HtmlEncode(entry.Value.ToString());
}
}

Подія RowUpdated можна використовувати, щоб обробляти помилки при введенні даних. У таблиці Customers поле CompanyName не допускає порожнього значення. Якщо користувач його введе, буде викинуто виключення. Щоб не допустити появи екрану з незрозумілим текстом, додаємо мітку






  <asp:Label ID=”ErrorLabel” runat=”server” Text=” ” Font-Bold=”True” ForeColor=”Red”></asp:Label><br />

Перехоплюємо і обробляємо помилку редагування:






    protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
if (e.Exception != null)
{
ErrorLabel.Text = e.Exception.Message;
e.ExceptionHandled = true;
}
}

Інші парні події –

















RowDeleting


RowDeleted


PageIndexChanged


PageIndexChanging


SelectedIndexChanged


SelectedIndexChanging


Sorted


Sorting


У програмному режимі можна маніпулювати колекцією Rows, що складається з об’єктів типу GridViewRow. Рядки GridView мають властивості RowState і RowType. RowState може приймати значення з перерахування: Normal, Edit, Alternate, Insert, and Selected.


Дані, що зберігаються в рядку, можна отримати з колекції DataItem, яка індексується назвами полів.


Створіть сторінку Products.aspx і з знову за допомогою drag-and-drop таблиці Products створіть GridView. Подивимося, як можна в обробнику події RowDataBound змінювати зовнішній вигляд таблиці. Нехай потрібно встановити різні кольори фону в залежності від категорії товару. Додамо обробник RowDataBound. У аргументу події є властивість Row, яке дозволяє маніпулювати рядком GridView.






     protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
switch ((int)((DataRowView)e.Row.DataItem)[“CategoryID”])
{
case 1: e.Row.BackColor = Color.AliceBlue; break;
case 2: e.Row.BackColor = Color.AntiqueWhite; break;
case 3: e.Row.BackColor = Color.FloralWhite; break;
case 4: e.Row.BackColor = Color.Beige; break;
default:
e.Row.BackColor = Color.White; break;
}
}
}

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






  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes[“onmouseover”] = “this.style.backgroundColor=”#FFE4B5″”;
e.Row.Attributes[“onmouseout”] = “this.style.backgroundColor=”#FFFFFF””;
}
}

Наш GridView виводить числові значення полів CategoryId і SupplierId. Але, звичайно, користувачеві потрібні назви, і брати їх доводиться з інших таблиць. Можна пов’язати GridView і з поданням (View), але уявлення не підтримують редагування.


Встановимо властивість AutoGenerateEditButton в True і перетворимо стовпець CategoryId в в TemplateField, а також додамо друге джерело даних:






     <asp:SqlDataSource ID=”SqlDataSource2″ runat=”server”
ConnectionString=”<%$ ConnectionStrings:NorthwindConnectionString %>”
SelectCommand=”SELECT [CategoryID], [CategoryName] FROM [Categories] ORDER BY [CategoryName]”>
</asp:SqlDataSource>

Visual Studio 2005 згенерував шаблон, який належить змінити на такий:






 
<EditItemTemplate>
<asp:DropDownList  ID=”CatDropDownList” runat=”server”
DataSourceID=”SqlDataSource2″ DataValueField=”CategoryId”
DataTextField=”CategoryName” SelectedValue=<%# Bind(“CategoryId”) %>>
</asp:DropDownList >
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID=”CatLabel” runat=”server” ></asp:Label>
</ItemTemplate>
</asp:TemplateField>

При цьому в режимі відображення рядка в колонці “Категорія” нічого не виводиться. Щоб отримати потрібне значення з таблиці Categories, напишемо обробник події RowDataBound.






  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
if (e.Row.RowState == DataControlRowState.Normal //
e.Row.RowState == DataControlRowState.Alternate)
{ / / Отримати дані з SqlDataSource2
DataView ds = (DataView)SqlDataSource2.Select(DataSourceSelectArguments.Empty); / / Отримати значення поточної категорії
DataRowView view = (DataRowView)e.Row.DataItem;
int catid = (int)view.Row[3]; / / Відфільтрувати потрібну категорію
ds.RowFilter = string.Format(“CategoryID=”{0}””, catid);
Label Text1 = (Label)e.Row.FindControl(“CatLabel”);
Text1.Text = ds[0].Row[“CategoryName”].ToString();
}
}

Точно так само можна вчинити з полем SupplierID.


DetailsView


Елемент управління DetailsView – ще одна новинка ASP.NET 2.0. Він показує кожен раз один запис з джерела даних у таблиці з 2 стовпцями, де ліворуч відображається назва поля, а праворуч – значення. Так само, як і GridView, DetailsView дозволяє виробляти розбивку на сторінки, редагування та видалення з автоматичним зв’язуванням з джерелом даних. Він також є спадкоємцем CompositeDataBoundControl.


Visual Studio 2005 надає, як завжди, SmartTag, за допомогою якого можна задати джерело даних, автоформатіровать елемент управління, відредагувати поля та шаблони полів. У нього є шаблон InsertItemTemplate, якого немає в GridView. DetailsView підтримує розбиття на сторінки, хоча на сторінці завжди тільки один запис.


Приклад DetailsView, де дані беруться з бази даних Northwind, таблиця Employees.






  <asp:DetailsView ID=”DetailsView1″ runat=”server” DataSourceID=”SqlDataSource2″
Height=”50px”
Width=”561px” CellPadding=”4″ GridLines=”None” ForeColor = “# 333333” HeaderText = “Особиста справа”
AutoGenerateRows=”False” DataKeyNames=”EmployeeID”
AutoGenerateInsertButton=”True”
<Fields>
<EditItemTemplate>
<asp:TextBox ID=”TextBox1″ runat=”server” Text=”<%# Bind(“HireDate”) %>”></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:Calendar ID=”CalendarHireDate” runat=”server”
BackColor=”#EFF3FB” ForeColor=”#003399″
></asp:Calendar>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID=”Label1″ runat=”server” Text=”<%# Bind(“HireDate”) %>”></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Fields>
<FooterStyle BackColor=”#507CD1″ Font-Bold=”True” ForeColor=”White” />
<EditRowStyle BackColor=”#2461BF” />
<RowStyle BackColor=”#EFF3FB” />
<PagerStyle BackColor=”#2461BF” ForeColor=”White” HorizontalAlign=”Center” />
<HeaderStyle BackColor=”#507CD1″ Font-Bold=”True” ForeColor=”White” />
<AlternatingRowStyle BackColor=”White” />
<CommandRowStyle BackColor=”#D1DDF1″ Font-Bold=”True” />
<FieldHeaderStyle BackColor=”#DEE8F5″ Font-Bold=”True” />
</asp:DetailsView>

А так це виглядає на формі.
























Особиста справа


Прізвище


Fuller


Ім’я


Andrew


Посада


Vice President, Sales


Дата народження


19.02.1952 0:00:00


Дата прийому


14.08.1992 0:00:00


Телефон


(206) 555-9482


На відміну від GridView, DetailsView дозволяє вставляти записи. Для цього потрібно встановити значення властивості AutoGenerateInsertButton = “True”. При відображенні з’явиться кнопка New. Її натиснення переводить елемент в режим вставки, за замовчуванням для кожного поля генеруються TextBox-и.



























Особиста справа


Прізвище

 

Ім’я

 

Посада

 

Дата народження

 

Дата прийому

 

Телефон

 

Insert Cancel


Якщо джерело даних для DetailsView – SqlDataSource, то у нього мають бути визначені властивість InsertCommand і набір параметрів.


У DetailsView є пари подій, які відбуваються при зв’язуванні з даними, при переході з режиму перегляду в режим вставки, при гортанні сторінки.




















ItemCreated


немає пари


ItemDeleting


ItemDeleted


ItemInserted


ItemInserting


ItemUpdated


ItemUpdating


ModeChanged


ModeChanging


У таблиці Employees деякі поля повинні бути заповнені, в них варто AllowNulls = false. Тому при роботі нашої форми відбудеться виняток, якщо спробувати вставити запис, не ввівши ім’я та прізвище. Щоб уникнути цього, під час обробки події ItemInserting потрібно зробити перевірку. Також обробимо подія ModeChanged, щоб нагадати клієнту про необхідність ввести ці поля.






  protected void DetailsView1_ModeChanged(object sender, EventArgs e)
{
switch (DetailsView1.CurrentMode)
{
case DetailsViewMode.Insert: DetailsView1.HeaderText = “Заповніть, будь ласка, форму. Ім’я та прізвище обов’язкові.”;
DetailsView1.HeaderStyle.ForeColor = System.Drawing.Color.Purple;
DetailsView1.HeaderStyle.BackColor = System.Drawing.Color.AliceBlue;
break;
case DetailsViewMode.ReadOnly: DetailsView1.HeaderText = “Особиста справа”;
DetailsView1.HeaderStyle.ForeColor = System.Drawing.Color.White;
DetailsView1.HeaderStyle.BackColor = System.Drawing.Color.FromArgb(0x507CD1);
break;
}
}

Так як DetailsView1 таки таблиця, шукаємо поля введення в 0 і 1 рядку в 1 стовпці. Якщо там пусто, скасуємо вставку.






  protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
TextBox textbox1 = (TextBox)DetailsView1.Rows[0].Controls[1].Controls[0];
textbox1.Text.Trim();
TextBox textbox2 = (TextBox)DetailsView1.Rows[1].Controls[1].Controls[0];
textbox2.Text.Trim();
if (textbox1.Text == “” // textbox2.Text == “”)
e.Cancel= true;
}

DetailsView можна використовувати спільно з іншими елементами управління. Тоді потрібно запис можна буде знайти не перегортаючи сторінки, а вибираючи, наприклад в DropDownList.






  <asp:SqlDataSource ID=”SqlDataSource1″ runat=”server” ConnectionString=”<%$ ConnectionStrings:NorthwindConnectionString2 %>”
DeleteCommand=”DELETE FROM [Suppliers] WHERE [SupplierID] = @SupplierID”
InsertCommand=”INSERT INTO [Suppliers] ([CompanyName], [ContactName],
[ContactTitle], [Address], [City], [Region], [PostalCode], [Country],
[Phone], [Fax], [HomePage]) VALUES (@CompanyName, @ContactName,
@ContactTitle, @Address, @City, @Region, @PostalCode, @Country,
@Phone, @Fax, @HomePage)” ProviderName=”<%$ ConnectionStrings:NorthwindConnectionString2.ProviderName %>”
SelectCommand=”SELECT [SupplierID], [CompanyName], [ContactName],
[ContactTitle], [Address], [City], [Region], [PostalCode], [Country],
[Phone], [Fax], [HomePage] FROM [Suppliers] WHERE [SupplierID] = @SupplierID”
UpdateCommand=”UPDATE [Suppliers] SET [CompanyName] = @CompanyName,
[ContactName] = @ContactName, [ContactTitle] = @ContactTitle,
[Address] = @Address, [City] = @City, [Region] = @Region, [PostalCode] = @PostalCode, [Country] = @Country,
[Phone] = @Phone, [Fax] = @Fax, [HomePage] = @HomePage WHERE [SupplierID] = @SupplierID”
EnableCaching=”True”>
<SelectParameters>
<asp:ControlParameter ControlID=”DropDownList1″ Name=”SupplierID” PropertyName=”SelectedValue” Type=”String” />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name=”CompanyName” Type=”String” />
<asp:Parameter Name=”ContactName” Type=”String” />
<asp:Parameter Name=”ContactTitle” Type=”String” />
<asp:Parameter Name=”Address” Type=”String” />
<asp:Parameter Name=”City” Type=”String” />
<asp:Parameter Name=”Region” Type=”String” />
<asp:Parameter Name=”PostalCode” Type=”String” />
<asp:Parameter Name=”Country” Type=”String” />
<asp:Parameter Name=”Phone” Type=”String” />
<asp:Parameter Name=”Fax” Type=”String” />
<asp:Parameter Name=”HomePage” Type=”String” />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name=”CompanyName” Type=”String” />
<asp:Parameter Name=”ContactName” Type=”String” />
<asp:Parameter Name=”ContactTitle” Type=”String” />
<asp:Parameter Name=”Address” Type=”String” />
<asp:Parameter Name=”City” Type=”String” />
<asp:Parameter Name=”Region” Type=”String” />
<asp:Parameter Name=”PostalCode” Type=”String” />
<asp:Parameter Name=”Country” Type=”String” />
<asp:Parameter Name=”Phone” Type=”String” />
<asp:Parameter Name=”Fax” Type=”String” />
<asp:Parameter Name=”HomePage” Type=”String” />
<asp:Parameter Name=”SupplierID” Type=”Int32″ />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name=”SupplierID” Type=”Int32″ />
</DeleteParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID=”SqlDataSource2″ runat=”server” ConnectionString=”<%$ ConnectionStrings:NorthwindConnectionString2 %>”
ProviderName=”<%$ ConnectionStrings:NorthwindConnectionString2.ProviderName %>”
SelectCommand=”SELECT [SupplierID], [CompanyName] FROM [Suppliers]”>
</asp:SqlDataSource>
<asp:DropDownList ID=”DropDownList1″ runat=”server”
DataSourceID=”SqlDataSource2″
DataTextField=”CompanyName” DataValueField=”SupplierID”
AutoPostBack=”True”>
</asp:DropDownList>
<asp:DetailsView ID=”DetailsView1″ runat=”server”
DataSourceID=”SqlDataSource1″ Height=”86px”
Width=”452px” DataKeyNames=”SupplierID” BackColor=”White”
BorderColor=”#3366CC” BorderWidth=”1px” CellPadding=”4″>
<Fields>
<asp:CommandField ShowDeleteButton=”True” ShowEditButton=”True” ShowInsertButton=”True” />
</Fields>
<FooterStyle BackColor=”#99CCCC” ForeColor=”#003399″ />
<EditRowStyle BackColor=”#009999″ Font-Bold=”True” ForeColor=”#CCFF99″ />
<RowStyle BackColor=”White” ForeColor=”#003399″ />
<PagerStyle BackColor=”#99CCCC” ForeColor=”#003399″ HorizontalAlign=”Left” />
<HeaderStyle BackColor=”#003399″ Font-Bold=”True” ForeColor=”#CCCCFF” />
</asp:DetailsView>

Значення AutoPostBack = “True” в DropDownList1 необхідно, щоб сторінка оновлювалася і запис в DetailsView1 змінювалася.


FormView


Ще один новий елемент FormView схожий на DetailsView, але відрізняється від нього тим, що потребує шаблоні для свого представлення.






  <asp:SqlDataSource ID=”SqlDataSource1″ runat=”server” ConnectionString=”<%$ ConnectionStrings:pubsConnectionString1 %>”
DeleteCommand=”DELETE FROM [authors] WHERE [au_id] = @au_id”
InsertCommand=”INSERT INTO [authors] ([au_id], [au_lname], [au_fname], [phone], [address], [city], [state], [zip], [contract])
VALUES (@au_id, @au_lname, @au_fname, @phone, @address, @city, @state, @zip, @contract)”
ProviderName=”<%$ ConnectionStrings:pubsConnectionString1.ProviderName %>”
SelectCommand=”SELECT [au_id], [au_lname], [au_fname], [phone], [address], [city], [state], [zip], [contract] FROM [authors]”
UpdateCommand=”UPDATE [authors] SET [au_lname] = @au_lname, [au_fname] = @au_fname,
[phone] = @phone, [address] = @address, [city] = @city, [state] = @state, [zip] = @zip, [contract] = @contract
WHERE [au_id] = @au_id” EnableCaching=”true” CacheDuration=”120″>
<InsertParameters>
<asp:Parameter Name=”au_id” Type=”String” />
<asp:Parameter Name=”au_lname” Type=”String” />
<asp:Parameter Name=”au_fname” Type=”String” />
<asp:Parameter Name=”phone” Type=”String” />
<asp:Parameter Name=”address” Type=”String” />
<asp:Parameter Name=”city” Type=”String” />
<asp:Parameter Name=”state” Type=”String” />
<asp:Parameter Name=”zip” Type=”String” />
<asp:Parameter Name=”contract” Type=”Boolean” />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name=”au_lname” Type=”String” />
<asp:Parameter Name=”au_fname” Type=”String” />
<asp:Parameter Name=”phone” Type=”String” />
<asp:Parameter Name=”address” Type=”String” />
<asp:Parameter Name=”city” Type=”String” />
<asp:Parameter Name=”state” Type=”String” />
<asp:Parameter Name=”zip” Type=”String” />
<asp:Parameter Name=”contract” Type=”Boolean” />
<asp:Parameter Name=”au_id” Type=”String” />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name=”au_id” Type=”String” />
</DeleteParameters>
</asp:SqlDataSource>
   
<asp:FormView ID=”FormView1″ runat=”server” DataKeyNames=”au_id”
DataSourceID=”SqlDataSource1″>
<EditItemTemplate>
au_id:
<asp:Label ID=”au_idLabel1″ runat=”server” Text=”<%# Eval(“au_id”) %>”></asp:Label><br />
au_lname:
<asp:TextBox ID=”au_lnameTextBox” runat=”server” Text=”<%# Bind(“au_lname”) %>”>
</asp:TextBox><br />
au_fname:
<asp:TextBox ID=”au_fnameTextBox” runat=”server” Text=”<%# Bind(“au_fname”) %>”>
</asp:TextBox><br />
phone:
<asp:TextBox ID=”phoneTextBox” runat=”server” Text=”<%# Bind(“phone”) %>”>
</asp:TextBox><br />
address:
<asp:TextBox ID=”addressTextBox” runat=”server” Text=”<%# Bind(“address”) %>”>
</asp:TextBox><br />
city:
<asp:TextBox ID=”cityTextBox” runat=”server” Text=”<%# Bind(“city”) %>”>
</asp:TextBox><br />
state:
<asp:TextBox ID=”stateTextBox” runat=”server” Text=”<%# Bind(“state”) %>”>
</asp:TextBox><br />
zip:
<asp:TextBox ID=”zipTextBox” runat=”server” Text=”<%# Bind(“zip”) %>”>
</asp:TextBox><br />
contract:
<asp:CheckBox ID=”contractCheckBox” runat=”server” Checked=”<%# Bind(“contract”) %>” /><br />
<asp:LinkButton ID=”UpdateButton” runat=”server” CausesValidation=”True” CommandName=”Update”
Text=”Update”>
</asp:LinkButton>
<asp:LinkButton ID=”UpdateCancelButton” runat=”server” CausesValidation=”False” CommandName=”Cancel”
Text=”Cancel”>
</asp:LinkButton>
</EditItemTemplate>
<InsertItemTemplate>
au_id:
<asp:TextBox ID=”au_idTextBox” runat=”server” Text=”<%# Bind(“au_id”) %>”>
</asp:TextBox><br />
au_lname:
<asp:TextBox ID=”au_lnameTextBox” runat=”server” Text=”<%# Bind(“au_lname”) %>”>
</asp:TextBox><br />
au_fname:
<asp:TextBox ID=”au_fnameTextBox” runat=”server” Text=”<%# Bind(“au_fname”) %>”>
</asp:TextBox><br />
phone:
<asp:TextBox ID=”phoneTextBox” runat=”server” Text=”<%# Bind(“phone”) %>”>
</asp:TextBox><br />
address:
<asp:TextBox ID=”addressTextBox” runat=”server” Text=”<%# Bind(“address”) %>”>
</asp:TextBox><br />
city:
<asp:TextBox ID=”cityTextBox” runat=”server” Text=”<%# Bind(“city”) %>”>
</asp:TextBox><br />
state:
<asp:TextBox ID=”stateTextBox” runat=”server” Text=”<%# Bind(“state”) %>”>
</asp:TextBox><br />
zip:
<asp:TextBox ID=”zipTextBox” runat=”server” Text=”<%# Bind(“zip”) %>”>
</asp:TextBox><br />
contract:
<asp:CheckBox ID=”contractCheckBox” runat=”server” Checked=”<%# Bind(“contract”) %>” /><br />
<asp:LinkButton ID=”InsertButton” runat=”server” CausesValidation=”True” CommandName=”Insert”
Text=”Insert”>
</asp:LinkButton>
<asp:LinkButton ID=”InsertCancelButton” runat=”server” CausesValidation=”False” CommandName=”Cancel”
Text=”Cancel”>
</asp:LinkButton>
</InsertItemTemplate>
<ItemTemplate>
au_id:
<asp:Label ID=”au_idLabel” runat=”server” Text=”<%# Eval(“au_id”) %>”></asp:Label><br />
Author”s name:
<asp:Label ID=”au_fnameLabel” runat=”server” Text=”<%# Bind(“au_fname”) %>”></asp:Label>
 
<asp:Label ID=”au_lnameLabel” runat=”server” Text=”<%# Bind(“au_lname”) %>”></asp:Label><br />
phone:
<asp:Label ID=”phoneLabel” runat=”server” Text=”<%# Bind(“phone”) %>”></asp:Label>
  
address:
<asp:Label ID=”addressLabel” runat=”server” Text=”<%# Bind(“address”) %>”></asp:Label><br />
city:
<asp:Label ID=”cityLabel” runat=”server” Text=”<%# Bind(“city”) %>”></asp:Label>
 
state:
<asp:Label ID=”stateLabel” runat=”server” Text=”<%# Bind(“state”) %>”></asp:Label>
  
zip:
<asp:Label ID=”zipLabel” runat=”server” Text=”<%# Bind(“zip”) %>”></asp:Label><br />
contract:
<asp:CheckBox ID=”contractCheckBox” runat=”server” Checked=”<%# Bind(“contract”) %>”
Enabled=”false” /><br />
<asp:LinkButton ID=”EditButton” runat=”server” CausesValidation=”False” CommandName=”Edit”
Text=”Edit”>
</asp:LinkButton>
<asp:LinkButton ID=”DeleteButton” runat=”server” CausesValidation=”False” CommandName=”Delete”
Text=”Delete”>
</asp:LinkButton>
<asp:LinkButton ID=”NewButton” runat=”server” CausesValidation=”False” CommandName=”New”
Text=”New”>
</asp:LinkButton>
</ItemTemplate>
</asp:FormView>

На цьому ми завершимо розгляд роботи з базами даних.


Висновок


ASP.NET 2.0 дає в користування програмістам архітектуру прив’язки даних, яка полегшує це завдання. Замість того, щоб вручну заповнювати елементи керування даними, отриманими в результаті запиту, ми створюємо елемент-джерело даних і прив’язуємо до них один або декілька споживачів даних.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*