Огляд GridView

Що таке GridView

З погляду функціональності – це така сама таблиця, як і DataGrid, кожен запис якої відповідає запису у джерелі даних. Кожен стовпець може бути асоційований із полем у джерелі даних. Крім цього, GridView (як і DataGrid) має шапку (Header), нижній колонтитул (Footer) та інформацію про розбивку на сторінки (Pager).

GridView оголошено як:

CompositeDataBoundControl – це базовий клас, який забезпечує зв'язування з даними (цей клас у свою чергу успадковує DataBoundControl, який є базовим для всіх data-bound контролів в ASP.NET 2.0).

IPostBackContainer і IPostBackEventHandler необхідні обробки всіх PostBack’ов контролю, а реалізація інтерфейсів ICallbackContainer і ICallbackEventHandler дозволяє задіяти новий механізм клієнтських асинхронних викликів.

GridView має безліч властивостей та подій, які визначають його поведінку. Насамперед, це з'єднання з джерелом даних та отримання даних, виведення даних, оновлення даних, а також сортування та розбивка на сторінки.

Об'єктна модель джерел даних

Ця модель є схемою, коли між самим джерелом даних і шаром виведення даних (у нашому випадку це GridView) знаходиться ще один шар, який є посередником між джерелом і контролем візуалізації даних і який надає загальний інтерфейс як для першого (джерела даних), так і і для других (контролів візуалізації, чи то наш GridView, чи допустимо FormView). Наприклад розглянемо одне із основних контролів візуалізації – SqlDataSource. Як видно з назви, цей контроль призначений для роботи з SQL. Насамперед, миповинні помістити цей контроль на форму (у будь-яке місце форми між тегами):

Цей контрол має 4 основні властивості, за назвами яких можна здогадатися про їх призначення – SelectCommand, InsertCommand, UpdateCommand та DeleteCommand. На тому, як передавати в ці sql-команди параметри, я не буду зупинятися – це гідно окремої статті; Для нас сьогодні важливо те, що ці характеристики описують sql-команди для кожного з чотирьох процесів над даними.

Вибірка, додавання, оновлення та видалення даних.

Насамперед, нам необхідно зв'язати наш GridView з контролем-джерелом. Для цього GridView має властивість DataSourceID, значення якого має відповідати ID контролю-джерела. Хочу звернути увагу на те, що GridView має також властивість DataSource, яка служить для зв'язування даних "по-старому" - в коді з присвоєнням об'єкта типу IList. Використання обох властивостей одночасно призведе до помилки – необхідно використовувати DataSource або DataSourceID.

Отже, ми пов'язали DataSource з контролем-джерелом даних. Якщо властивість SelectCommand (для об'єкта ObjectDataSource це SelectMethod) встановлено - з GridView будуть пов'язані дані, отримані в результаті виконання цієї команди (або методу у випадку ObjectDataSource).

Якщо ми зараз відкриємо нашу сторінку – ми побачимо щось на кшталт:

огляд

Далі займемося видаленням рядків (і записів із джерела даних). Як бачимо, DeleteCommand приймає параметр типу int, який називається id і відповідає id записи у таблиці. Ми знаємо, що id є унікальним полем і тому з чистою совістю робимо це поле ключовим для нашого GridView:

Далі нам необхідно додати кнопку для кожного рядка, який видалятиме рядок з GridView ііз джерела даних. Найпростіше це зробити, додавши новий стовпець типу CommandField:

Пробуємо нашу сторінку у дії:

даних

Чудово. Тепер складніша дія – редагування. Для редагування необхідно перевести необхідний рядок у стан редагування. Для цього в нашому (або в новому, це хто як хоче) стовпчику CommandField додаємо ShowEditButton="true"

Подивимося, що в нас виходить:

огляд

Тепер при переході рядка у стан редагування замість TextBox буде показано DropDownList. Далі нам необхідно зв'язати цей DropDownList зі списком із таблиці Categories. Хочу повідомити, що в ASP.NET 2.0 багато контролю отримали можливість працювати з об'єктною моделлю джерел даних, у тому числі і DropDownList. Тому додаємо ще один SqlDataSource на форму, встановлюємо йому SelectCommand-="SELECT * FROM Categories", далі встановлюємо властивість нашого DropDownList DataSource >

який

Насамперед обробимо подію RowDataBound – аналог події ItemDataBound у DataGrid.

GridViewRow має властивості RowState та RowType, які мають типи перерахувань DataControlRowState та DataControlRowType відповідно. Як неважко здогадатися – перше з них зберігає поточний стан рядка (наприклад, рядок у стані редагування), а друге – тип рядка (наприклад, що цей рядок є заголовком). Для того, щоб вибрати всі «нормальні» рядки і лише в режимі відображення, можна використовувати таку перевірку:

У GridView всі непарні рядки вважаються "нормальними", а всі непарні - альтернативними, тому RowState перевіряється на 2 значення. Використовуючи, крім декларативного програмування, «звичайне» програмування в коді сторінки можнаПродати в GridView досить складну логіку.

Також хочу зауважити, що у разі використання "звичайного" програмування для випадків оновлення або видалення даних необхідно використовувати

Вставлення нових рядків.

GridView не має стандартних засобів для вставлення нових записів. Для цього зручно використовувати FormView та DetailView. Якщо дуже хочеться реалізувати вставку в GridView - можна створити форму в PagerTemplate.

Зверніть увагу, що контроль SqlDataSource має властивість InsertCommand.

GridView та Visual Studio.NET 2005.

сторінки

Як ми бачимо, використовуючи Visual Studio.NET 2005 ми можемо ще більше полегшити собі життя – створення/редагування стовпів, налаштування сортування, розбивки на сторінки, а також підключення до тих чи інших DataSource, загалом багато з того, що ми робили вище ми можемо зробити через цю можливість. Крім усього іншого, сюди входить також можемо зробити через подібний робили вище, ми можемо зробити через подібний конфігураційний розділ.

GridView

Крім нової концепції зв'язку з джерелом даних, GridView у порівнянні з DataGrid має кілька не настільки суттєвих, але все ж таки приємних нововведень.

EmptyDataTemplate

У DataGrid якщо джерело не має жодного запису – то щоб вивести повідомлення на кшталт «Немає записів» доводилося робити такий фінт – додавати будь-який контрол, який виводить текст (наприклад, Label) і при біндингу перевіряти кількість записів у джерелі і якщо ця кількість була 0 - ховати DataGrid, а в Label виводити напис. Причому потрібно також не забути «обнулювати» цей рядок щоразу при биндинге, т.к. інакше напис залишався, навіть якщо дані вже з'явилися. У GridView введено новий шаблонEmptyDataTemplate:

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

"Парні" події.

В ASP.NET 2.0 практично всі контроли (і GridView серед них) мають по дві події для кожної «фізичної» події. Одне виникає до початку виконання операції, друге – після. Наприклад, RowDeleting і RowDeleted – у RowDeleting ми можемо дізнатися, що буде видалятися.

Застосування зворотних дзвінків сторінки з JavaScript сценаріїв.

Властивість EnablePagingAndSortingCallbacks (за замовчуванням false) дозволяє застосовувати технологію зворотних дзвінків сторінки (це також нововведення в ASP.NET 2.0) для переходу між сторінками та сортування даних. Нагадаю, що дана технологія дозволяє не перевантажувати всю сторінку, а перевантажити тільки сам контрол.

Адаптація GridView для мобільних пристроїв.

ASP.NET 2.0 дозволяє програмісту адаптувати GridView для генерації HTML, більш «дружнього» для мобільних пристроїв. Найяскравіша відмінність мобільних пристроїв від ПК – це менший екран. Для виведення лише одного запису та механізму навігації між ними існує група елементів SummaryTitle, DetailLink, DetailTitle та властивість SummaryViewColumn.

Розбивка на сторінках.

Перш за все, хочу сказати, що SqlDataSource дозволяє оптимізувати запит до БД і вибирати тільки дані, необхідні для поточної сторінки Gr >

Нові типи стовпців.

Для GridView введені деякі нові типи стовпців: CheckBoxField і ImageField, за назвами яких нескладно здогадатися, що вони з себе представляють J

Локалізація GridView.

Цей абзац не є нововведенням у Gr >