ПредишенСледващото

До сега, в Примери DataGrid контрола се използва за показване на данни, свързани с отделно графи за всяко поле. Ако искате да поставите няколко стойности в една клетка, или да имат неограничен персонализиране на съдържанието на клетка, добавяйки, HTML-тагове и сървърни контроли, той трябва да се използва колона от тип TemplateField.

TemplateField ви дава възможност да се определи напълно приспособима шаблон за колона. Вътре в шаблона, можете да добавите тагове контроли, произволни HTML елементи и данни обвързващи изрази. Можете да получите пълна свобода да се покаже нищо.

Да предположим, че искате да създадете колона, която съчетава областта на името на примерна база данни на служителите Northwind. За да изпълните този трик, че е възможно да се изгради нещо подобно TemplateField:

Ако сега се свързват GridView, тя ще извлече информация от източника на данни и да мине през колекция от предмети. Той обработва ItemTemplate за всяка позиция, изчисли израз на данни свързване и добавя генерирания HTML-маркиране на масата. Този модел е съвсем проста - тя определя само две израз данни обвързващо. След изчисляване на тези изрази се превръща в обикновен текст:

шаблони гледания

Както можете да видите, в тези изрази, използвайте Оценка () - Статичен метод клас DataBinder. се изисква присъствието на Оценка () - той автоматично извлича елемента от данни, че е свързан с текущия ред, констатация използва отражение на съответното поле (за DataRow обект) или имоти (за потребителски данни за обекти) и извлича стойността. процес на размисъл добавя малко работа. Въпреки това е малко вероятно, че тези общи разходи ще се увеличат много време на заявка.

Ако се опитате да се свърже поле, което не съществува в комплекта резултат, можете да получите грешка по време на работа. Ако премахнете допълнителните полета, които няма да бъдат обвързани с всеки модел, няма проблем.

Когато котва SqlDataSource в данните елемент режим данни е DataRowView. Когато свързан с режима на SqlDataSource DataReader, елементът от данни ще DbDataRecord.

Оценка () метод също добавя много полезна функция за форматиране на полетата с данни "в движение". За да използвате тази услуга, ще трябва да се рестартира версия метод Оценка (), който взема допълнителен параметър на - низ за форматиране.

Шаблон колони могат да бъдат смесени с други видове колони, както е показано в предишния пример. Или можете да се отървете от всички останали колони и постави информацията от таблицата Служители в форматиран шаблон:

Резултатът е показан по-долу:

шаблони гледания

Използването на няколко шаблона

В предишния пример се използва за разделяне на шаблон вид артикул конфигурационни данни. Въпреки ItemTemplate - не е единственият модел, който предлага GridView. GridView всъщност ви позволява да конфигурирате различни аспекти на външния си вид с помощта на различни шаблони. В рамките на всеки шаблон колона, можете да използвате шаблони, които са описани в таблицата по-долу:

И определят външния вид на устройствата за управление, използван при поставянето на нов запис

От всички шаблони, които са изброени в таблицата, на EditItemTemplate е един от най-полезните, тъй като тя дава възможност да се контролира поведението на поле при редактиране. Ако не използвате шаблон колони, а след това се ограничават до прости текстови полета без никаква проверка. GridView също определя два шаблони, които могат да бъдат използвани извън колоните. Тя PagerTemplate шаблон. можете да настроите външния вид на управление на страницата, и EmptyDataTemplate. който позволява да видите съдържанието, което ще се появи, ако гледания е задължен да празен обект на данни.

свързване метод

Едно от предимствата на шаблони е, че те ви позволи да използвате данни-свързващ експресии, които разширяват възможностите на формата и представянето на свързани данни. Една от основните методи, което се случва в много сценарии - е използването на метода за обработка на стойност поле клас на страницата. Това отменя ограниченията задължителни прости данни и ви позволява да включите динамична информация, както и условно логика.

Да предположим, че искате да създадете колона, в която ще бъде показана иконата до всеки ред. Въпреки това, вие не искате да използвате статичен икона. Вместо това, изображението трябва да бъде избран на базата на тази линия. Фигурата по-долу показва пример, в който отметки до продуктите, които са в наличност:

шаблони гледания

Ето как да се определи статус колоната и източника на данни:

Тази техника се използва в много сценарии. Например, тя може да се използва за корекция на цените в съответствие с текущите валутните курсове, или да конвертирате цифров код в смислен част от текст. Можете дори да създадете изцяло изчислени колони - например, да се прилагат поле EmployeeDateOfBirth (датата на раждане на служителя), за да се изчисли стойността на EmployeeAge на колоната (на възраст от работника или служителя).

Използвайки този подход, в този пример може да се инсталира н атрибут ЕВРОВОК . Това ви позволява да укажете алтернативен текст, който ще даде по-смислено описание (като OK или Отказ), което отразява състоянието на съответния обект.

Събитие работа в шаблона

В някои случаи, ще трябва да се справят събития, предизвикани от контроли, които се добавят към колоната на модела. Например, да предположим, че предишния пример е променен, така че вместо да показва икона на статичен статус той създава връзка под формата на активен образ чрез контрол ImageButton. Постигането на това е съвсем проста:

Проблемът е, че добавянето на контрол за шаблон, GridView създава множество копия на този контрол - по един за всеки елемент на данни. Когато ImageButton е кликнал върху, имате нужда от начин да се определи кой точно копие на изображението е било направено, и то е свързано с ред.

Начин за решаване на този проблем е да се използват гледания събитията, вместо бутон събитията, които съдържа. За тази цел на събитието GridView.RowCommand, тъй като тя се задейства, когато кликнете върху някой от бутоните по някакъв шаблон. Метод, когато контролът на събитие в шаблона се превръща в събитие като контрола, наречен балон пролиферация събития.

Разбира се, вие все още се нуждаят от начин за прехвърляне на информация RowCommand събитие да се идентифицират един ред, в който действието се състоя. Secret - в два низови свойства на контролите на бутона: CommandName и CommandArguments. В CommandName зададете описателно име, което може да се използва за разграничаване на кликванията върху ImageButton, като кликнете върху другите контроли бутонни в GridView. В CommandArguments посочи специфичен фрагмент низ данни, които могат да се използват за идентифициране на реда, където се прави едно кликване. Изпращането на тази информация, използвайки данни обвързващи изрази.

Следващият предавания шаблон областта, съдържаща изменения ЕВРОВОК ImageButton:

И тук е кодът се изисква да се отговори на кликване върху ImageButton:

Горният пример просто показва ProductID в етикет Label1.

Не забравяйте, че чрез използване на вградена поддръжка в избора гледания редове можете да направят живота ви по-лесно. Просто задайте CommandName в Select и да се справят събитие SelectIndexChanged, както е описано в "Избиране на редове". Макар че този подход осигурява лесен достъп до бара, където се прави с едно щракване, това няма да помогне, ако искате да предоставите много бутони, за решаване на различни проблеми.

Редактиране с шаблона

Един от основните аргументи в полза на използването на шаблони е да предостави разширени възможности за редактиране. Преди се показва като GridView подкрепя автоматични възможности за редактиране. Всичко, което е необходимо за това - за да превключите на линията, за да редактирате режим чрез определяне GridView.EditItemIndex собственост.

Най-лесният начин да направите това е възможно - добави CommandFieId колона с ShowEditButton собственост. настроен да вярно (или набор GridView.AutoGenerateEditButton имот е вярно). Във всеки случай, ще се стигне до избор на колони, използвани за показване на команди за редактиране. Първоначално, тази колона ще покаже връзката с текст Edit (Редактиране) до всеки запис. Когато потребителят кликне върху тази връзка, всички етикети във всички колони са заменени с линия текстови полета (ако те не са достъпни само за четене).

Стандартна поддръжка за редактиране има някои ограничения:

Тя не винаги е препоръчително да редактирате стойностите в текстовите полета. Някои типове данни се обработват най-добре от други контроли (например падащи списъци), големи области изискват многоредово текстови полета и т.н.

Не е валидиране. Това би било добра идея да се ограничи възможности за редактиране, така че е невъзможно да въведете отрицателни стойности валута и т.н. Това може да стане чрез добавяне на контроли за проверка на автентичността на EditItemTemplate модел.

тя е непривлекателна често. Низ от текстови полета на върха на контрола на маса изисква твърде много място и рядко изглежда професионално.

Колоните шаблона просто не го правят. Вместо това, вие изрично уточни контролите за редактиране и оформление, използващи EditItemTemplate шаблон. Този процес може да отнеме доста време.

По-долу е шаблон за редактиране, която позволява редактиране на едно поле - поле бележки (първата модифицирана пример):

Окабеляване редактира стойност на контрола, вместо конвенционалния метод Оценка () по отношение на свързващите данни трябва да се използва метод за свързване (). Само Bind () метод създава двупосочна връзка, като се гарантира, че актуализираните стойности ще бъдат изпратени към сървъра.

Друг важен факт, който трябва да се има предвид, - когато гледания актуализация коригира, че го направи само с прикрепени, редактируеми параметри. В предишния пример, това означава, че ще изпрати гледания единично @Notes параметри за полето Бележки. Това е важно, защото, когато пишете команда параметрите му се актуализация (в случая на SqlDataSource), можете да използвате само един параметър, както е показано тук:

По същия начин, ако използвате ObjectDataSource, трябва да се уверите, че методът за актуализация отнема само един параметър наречен Notes. Фигурата показва ред в режим на редактиране:

шаблони гледания

Редактиране с разширени функции за управление

Предимството за редактиране шаблон-базирани е особено очевидно, когато е необходимо да се свържат по-сложни контроли като списъци. Например предишния пример може да бъде променена, като поле TitleOfCourtesy може да се редактира чрез падащия списък. Тук е шаблон, който ще бъде необходимо, за да направите това:

Този шаблон позволява на потребителя да изберете заглавието на любезността на ограничен набор от допустимото. За да създадете този списък, е необходимо да се прибегне до един малък трик - да DropDownList.DataSource данни обвързващи израз, който показва, обичай собственост. Този имот може да се връщате подходящ източник на данни за възможни титли. По-долу е дефиницията на имотите в уеб страница клас TitleOfCourtesy:

Тази стъпка се предвижда падащия списък на съдържанието, но не решава проблема, свързан с първоначалния избор на правилното заглавие в списъка за съществуваща стойност на полето. Най-добрият подход е да се свързва с метода на потребителските SelectedIndex приема текущото заглавие и връща индекса на стойността му в списъка. В този пример, задачата изпълнява метод GetSelectedTitle (). Той взема титлата като вход и връща индекса на съответната стойност в масива връща от TitlesOfCourtesy:

Този код търси в масив, използвайки статичния метод Array.IndexOf (). Обърнете внимание на необходимостта от изрично донесе титлата на тип низ. Това се дължи на факта, че DataBinder.Eval () метод връща обект, а не като низ, и тази стойност се предава GetSelectedTitle (метод). Фигурата по-долу показва падащия списък в действие:

шаблони гледания

За съжаление, този пример все още не е завършена. Сега имате списък кутия, изпълнена в режим на редактиране, за да изберете автоматично на правилната позиция. Все пак, ако промените избора, стойността няма да бъде изпратен обратно в източника на данни. В този пример, можете да се опитате да решите проблема с помощта метод за свързване () с имота, че SelectedValue, тъй като текстът в контрола точно съответства на текста, който искате да добавите към протокола.

Понякога, обаче, нещата не са толкова прости, и се изисква да преведе стойността в друго представителство на базата данни. В тази ситуация, единственият вариант - да се справят с RowUpdating събитие открива на контрол списък на текущия ред и извличане на текста. След това можете да добавите динамично допълнителни параметри, както е показано по-долу:

UpdateCommand в SqlDataSource също трябва да бъдат актуализирани, за да използвате параметър @TitleOfCourtesy:

Сега е актуализиран успешно и двете полета - Бележки и TitleOfCourtesy. Както можете да видите, редактируеми шаблони предоставят значителни възможности, но понякога за дълго време, за да кодира.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!