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

Лекція 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 FirstPageText="Первая" Mode="NextPreviousFirstLast" LastPageText="Последняя" NextPageText="-> "/> <

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






       <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>

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






 <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 згенерував шаблон, який належить змінити на такий:






 <asp:TemplateField HeaderText="Категорія" SortExpression="CategoryID">
<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>
<asp:BoundField DataField="LastName" HeaderText="Фамілія" SortExpression="LastName" />
<asp:BoundField DataField="FirstName" HeaderText="Імя" SortExpression="FirstName" />
<asp:BoundField DataField="Title" HeaderText="Должность" SortExpression="Title" />
<asp:BoundField DataField="BirthDate" HeaderText="Дата рожденія" SortExpression="BirthDate" />
<asp:TemplateField HeaderText="Дата пріема" SortExpression="HireDate">
<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>
<asp:BoundField DataField="HomePhone" HeaderText="Телефон" SortExpression="HomePhone" />
</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>

*

*