Sie sind auf Seite 1von 380

Tutorial 1: Creacin de una capa de acceso de

datos
C#SHARP
Scott Mitchell
06 2006
Descargue el ASPNET_Data_Tutorial_1_CS.ee c!"igo "e e#e$%lo.
Descargar el cdigo de ejemplo ASPNET_Data_Tutorial_1_CS.exe.
Contenido del Tutorial 1 (Visual C #)
&'tro"ucci!'
Paso 1( Crear u' %ro)ecto *e+ ) co'ei!' a la +ase "e "atos
Paso 2( Creaci!' "e la ca%a "e acceso a los "atos
Paso ,( Agregar los $-to"os co' %ar.$etros "e la ca%a "e acceso "e "atos
Paso /( Actuali0ar1 i'sertar ) eli$i'ar "atos
Paso 2( Co$%letar el 'i3el "e acceso a "atos
resu$e'
Introduccin
Co$o "esarrolla"ores 4e+1 'uestras 3i"as gira' e' tor'o a tra+a#ar co' "atos. Crea$os las
+ases "e "atos %ara al$ace'ar los "atos1 el c!"igo %ara recu%erar ) $o"i5icar1 ) las
%.gi'as 4e+ %ara reco%ilar ) resu$ir la $is$a. Este es el %ri$er tutorial "e u'a serie larga
6ue 3a a e%lorar t-c'icas %ara i$%le$e'tar estos %atro'es co$u'es e' ASP.NET
2.0. 7a$os a e$%e0ar co' la creaci!' "e u'aar6uitectura "e so5t4are co$%uesto %or u'a
ca%a "e acceso a "atos 8DA9:1 utili0a'"o co'#u'tos "e "atos co' ti%o1 u'a ca%a "e l!gica
e$%resarial 8;99: 6ue hace cu$%lir las reglas "e 'egocio %erso'ali0a"as1 ) u'a ca%a "e
%rese'taci!' co$%uesta %or %.gi'as ASP.NET 6ue co$%arte' u'a %.gi'a co$<'
"ise=o. >'a 3e0 6ue esta +ase +ac?e'" se ha esta+leci"o1 3a$os a %asar a la %rese'taci!'
"e i'5or$es1 6ue $uestra c!$o $ostrar1 resu$ir1 reco%ilar ) 3ali"ar "atos "e u'a
a%licaci!' 4e+. Estos tutoriales est.' orie'ta"os a ser co'ciso ) o5rece' i'struccio'es %aso
a %aso las i'struccio'es co' u' $o't!' "e ca%turas "e %a'talla 6ue le guiar. a tra3-s "el
%roceso 3isual. Ca"a tutorial est. "is%o'i+le e' C # ) 7isual ;asic ) i'clu)e u'a "escarga
"el c!"igo co$%leto usa"o. 8Este %ri$er tutorial es +asta'te largo1 %ero el resto se
%rese'ta' e' tro0os $ucho $.s "igeri+le.:
Para estos tutoriales 3a$os a utili0ar u' Microso5t S@9 Ser3er 2002 E%ress E"itio' 3ersi!'
"e la +ase "e "atos Ne%tu'o situa"o e' elApp_Data "irectorio. A"e$.s "e los archi3os "e
+ase "e "atos1 el App_Data car%eta ta$+i-' co'tie'e los scri%ts "e S@9 %ara crear la +ase
"e "atos1 e' caso "e 6ue "esee utili0ar u'a 3ersi!' "e +ase "e "atos "i5ere'te. Estos
scri%ts %ue"e' ta$+i-' ser "escarga"as "irecta$e'te "es"e Microso5t 1 si uste"
%re5iere. Si utili0a u'a 3ersi!' "i5ere'te "e S@9 Ser3er "e la +ase "e "atos North4i'"1
uste" te'"r. 6ue actuali0ar la NORTHWNDConnectionString co'5iguraci!' "e la a%licaci!'
"e Web.config archi3o. 9a a%licaci!' 4e+ ha si"o "esarrolla"o usa'"o 7isual Stu"io 2002
Pro5essio'al E"itio' co$o siste$a "e archi3os +asa"o e' %ro)ecto "e sitio *e+. Si'
e$+argo1 to"os los tutoriales 5u'cio'a' igual "e +ie' co' la 3ersi!' gratuita "e 7isual
Stu"io 20021 7isual *e+ De3elo%erhtt%( A A $s"'.$icroso5t.co$ A 3stu"io A e%ress A 34" A.
E' este tutorial 3a$os a e$%e0ar "es"e el %ri'ci%io ) crear la ca%a "e acceso a "atos
8DA9:1 segui"o %or la creaci!' "e la ca%a "e l!gica e$%resarial 8;99: e' la segu'"a tutorBa1
) tra+a#a'"o e' el "ise=o "e %.gi'a ) la 'a3egaci!' e' el tercero. 9os tutoriales "es%u-s
"e la tercera se +asar. e' los 5u'"a$e'tos esta+leci"os e' los tres %ri$eros. Te'e$os
$ucho 6ue cu+rir e' este %ri$er tutorial1 asB 6ue "is%ara a 7isual Stu"io ) 3a$os a
e$%e0arC
Paso 1: Crear un proyecto Web y conexin a la base
de datos
A'tes "e 6ue %o"a$os crear 'uestra ca%a "e acceso a "atos 8DA9:1 %ri$ero te'e$os 6ue
crear u' sitio 4e+ ) la co'5iguraci!' "e 'uestra +ase "e "atos. Co$ie'ce %or crear u'
siste$a "e archi3os +asa"o e' 'ue3o sitio 4e+ ASP.NET. Para lograr esto1 3a)a al $e'<
Archi3o ) seleccio'e Nue3o sitio 4e+1 $ostra'"o el 'ue3o sitio *e+ cua"ro "e "i.logo. Eli#a
la %la'tilla Sitio *e+ ASP.NET1 esta+le0ca la u+icaci!' "e la lista "es%lega+le Siste$a "e
archi3os1 eli#a u'a car%eta %ara colocar el sitio 4e+1 ) co'5igurar el i"io$a "e C #.
Figura 1 Crear un nue!o arc"i!o basado en el siste#a del sitio Web
Esto crear. u' 'ue3o sitio 4e+ co' u' Default.aspx %.gi'a ASP.NET ) u' App_Data car%eta.
Co' el sitio 4e+ crea"o1 el siguie'te %aso es agregar u'a re5ere'cia a la +ase "e "atos e'
el E%lora"or "e ser3i"ores "e 7isual Stu"io.Me"ia'te la a"ici!' "e u'a +ase "e "atos %ara
el E%lora"or "e ser3i"ores %ue"e agregar ta+las1 %roce"i$ie'tos al$ace'a"os1 3istas1 etc1
to"o ello "es"e 7isual Stu"io. Ta$+i-' %ue"e 3er los "atos "e la ta+la o crear sus %ro%ias
co'sultas )a sea a $a'o o gr.5ica$e'te a tra3-s "el De'era"or "e co'sultas. A"e$.s1
cua'"o co'strui$os los co'#u'tos "e "atos co' ti%o %ara el DA9 te'"re$os 6ue %u'to "e
7isual Stu"io %ara la +ase "e "atos "e los 6ue los co'#u'tos "e "atos co' ti%o se "e+e
co'struir. A %esar "e 6ue %ue"e %ro%orcio'ar esta i'5or$aci!' "e co'ei!' e' ese %u'to
e' el tie$%o1 7isual Stu"io relle'a auto$.tica$e'te u'a lista "es%lega+le "e las +ases "e
"atos )a registra"os e' el E%lora"or "e ser3i"ores.
9os %asos %ara agregar la +ase "e "atos North4i'" al E%lora"or "e ser3i"ores "e%e'"er.
"e si "esea utili0ar el ser3i"or S@9 Ser3er 2002 E%ress E"itio' "e +ase "e "atos e'
el App_Data car%eta o si tie'e u' Microso5t S@9 Ser3er 2000 o 20021 la co'5iguraci!' "el
ser3i"or "e +ase "e "atos 6ue "esea utili0ar e' su lugar.
$tili%ando una base de datos en el App_Data Carpeta
Si uste" 'o tie'e u' ser3i"or S@9 Ser3er 2000 o Ser3er 2002 "e +ase "e "atos %ara
co'ectarse a1 o si$%le$e'te 6uieres e3itar te'er 6ue a=a"ir la +ase "e "atos a u' ser3i"or
"e +ase "e "atos1 %ue"e utili0ar el S@9 Ser3er 2002 E%ress E"itio' 3ersi!' "e la +ase "e
"atos Ne%tu'o 6ue se e'cue'tra e' el sitio 4e+ "e "escarga "e App_Data car%eta
8 northwnd.mdf :.
>'a +ase "e "atos coloca"os e' el App_Data car%eta se agrega' auto$.tica$e'te a la "el
E%lora"or "e ser3i"ores. Asu$ie'"o 6ue tie'e S@9 Ser3er 2002 E%ress E"itio' i'stala"o
e' su $.6ui'a uste" "e+e 3er a u' 'o"o lla$a"o 'orth4'".$"5 e' el E%lora"or "e
ser3i"ores1 6ue se %ue"e e%a'"ir ) e%lorar sus ta+las1 3istas1 %roce"i$ie'tos
al$ace'a"os1 ) asB sucesi3a$e'te 83er Eigura 2:.
El App_Data car%eta ta$+i-' %ue"e te'er Microso5t Access . mdb archi3os1 6ue1 al igual 6ue
sus ho$!logos "e S@9 Ser3er1 se agrega' auto$.tica$e'te a la "el E%lora"or "e
ser3i"ores. Si 'o "esea utili0ar cual6uiera "e las o%cio'es "e S@9 Ser3er1 sie$%re se
%ue"e"escargar u'a 3ersi!' "e Microso5t Access "el archi3o "e +ase "e "atos North4i'" )
caer e' el App_Data "irectorio. Te'ga e' cue'ta1 si' e$+argo1 6ue las +ases "e "atos "e
acceso 'o so' ta' caracterBsticas co$o las "e S@9 Ser3er1 ) 'o est.' "ise=a"os %ara ser
utili0a"os e' los esce'arios "el sitio 4e+. A"e$.s1 u' %ar "e los ,2 F tutoriales utili0ar.
cierto 'i3el "e +ase "e "atos "e caracterBsticas 6ue 'o so' co$%ati+les co' el acceso.
Conexin a la base de datos en un ser!idor de &icroso't ()* (er!er +,,,
o +,,- (er!er base de datos
Alter'ati3a$e'te1 uste" %ue"e co'ectarse a u'a +ase "e "atos Ne%tu'o i'stala"a e' u'
ser3i"or "e +ase "e "atos. Si el ser3i"or "e +ase "e "atos 'o tie'e )a la +ase "e "atos
North4i'" i'stala"o1 %ri$ero "e+e agregar el ser3i"or "e +ase "e "atos e#ecuta'"o el
scri%t "e i'stalaci!' i'clui"o e' la "escarga "e este tutorial o %or la "escarga "e la 3ersi!'
S@9 Ser3er 2000 "e Ne%tu'o ) el scri%t "e i'stalaci!' "irecta$e'te "es"e el sitio *e+ "e
Microso5t.
>'a 3e0 6ue ha)a i'stala"o la +ase "e "atos1 3a)a al E%lora"or "e ser3i"ores e' 7isual
Stu"io1 haga clic e' el 'o"o Co'eio'es "e "atos ) seleccio'e Agregar co'ei!'. Si 'o 3e el
E%lora"or "e ser3i"ores 3a)a al E%lora"or "e 7ista A Ser3er1 o %ulse Ctrl F Alt F S.Co'
ello se a+re el cua"ro "e "i.logo Agregar co'ei!'1 e' el 6ue %ue"e es%eci5icar el ser3i"or
%ara co'ectarse a la i'5or$aci!' "e aute'ticaci!' ) el 'o$+re "e +ase "e "atos. >'a 3e0
6ue ha)a co'5igura"o correcta$e'te la i'5or$aci!' "e co'ei!' "e +ase "e "atos ) hacer
clic e' el +ot!' Ace%tar1 la +ase "e "atos se agrega co$o u' 'o"o +a#o el 'o"o Co'eio'es
"e "atos. Pue"e e%a'"ir el 'o"o "e +ase "e "atos %ara e%lorar sus ta+las1 3istas1
%roce"i$ie'tos al$ace'a"os1 ) asB sucesi3a$e'te.
Figura + .gregar una conexin de base de datos del ser!idor de bases de datos
de /ort"0ind
Paso +: Creacin de la capa de acceso a datos
Cua'"o se tra+a#a co' "atos "e u'a o%ci!' es i'tegrar la l!gica "e los "atos es%ecB5icos
"irecta$e'te e' la ca%a "e %rese'taci!' 8e' u'a a%licaci!' 4e+1 las %.gi'as ASP.NET
re%rese'ta' la ca%a "e %rese'taci!':. Esto %ue"e to$ar la 5or$a "e escri+ir c!"igo "e
ADG.NET e' la %arte "e c!"igo "e la %.gi'a ASP.NET o $e"ia'te el co'trol S6lDataSource
"e la %orci!' "e $arca"o. E' cual6uier caso1 este e'5o6ue 5uerte$e'te a las %are#as la
l!gica "e acceso a "atos co' la ca%a "e %rese'taci!'. 9o 6ue se reco$ie'"a1 si' e$+argo1
es se%arar la l!gica "e acceso a los "atos "e la ca%a "e %rese'taci!'. Esta ca%a se%ara"a
se co'oce co$o la ca%a "e acceso a "atos1 DA91 %ara a+re3iar1 ) 'or$al$e'te se
i$%le$e'ta co$o u' %ro)ecto "e +i+liotecas "e clase i'"e%e'"ie'te. 9os +e'e5icios "e
esta ar6uitectura e' ca%as est.' +ie' "ocu$e'ta"as 83er HGtras lecturasH1 al 5i'al "e este
tutorial %ara o+te'er i'5or$aci!' so+re estas 3e'ta#as: ) es el e'5o6ue 6ue te'"r. e' esta
serie.
To"o el c!"igo 6ue es es%ecB5ico %ara el orige' "e "atos su+)ace'te I co$o la creaci!' "e
u'a co'ei!' a la +ase "e "atos1 la e$isi!'
"e SELECCIONAR 1 INSERTAR 1 ACTUALIZAR ) ELIMINAR co$a'"os1 etc I "e+e' estar u+ica"os e' el
DA9. 9a ca%a "e %rese'taci!' 'o "e+e co'te'er 'i'gu'a re5ere'cia a "icho c!"igo "e
acceso "e "atos1 si'o 6ue "e+e hacer lla$a"as a la DA9 %ara cual6uier ) to"os los "atos
solicita"os. 9as ca%as "e acceso a "atos 'or$al$e'te co'tie'e' $-to"os %ara acce"er a
los "atos "e +ase "e "atos su+)ace'te.9a +ase "e "atos North4i'"1 %or e#e$%lo1
tie'e Productos ) Categoras ta+las 6ue registra' los %ro"uctos %ara la 3e'ta ) las
categorBas a las 6ue %erte'ece'. E' 'uestro DA9 te'"re$os $-to"os co$o(
GetCategories (), 6ue "e3uel3e' i'5or$aci!' acerca "e to"as las categorBas
GetProducts () 1 6ue "e3uel3e i'5or$aci!' so+re to"os los %ro"uctos
GetProductsByCategoryID ( IdCategora ) 1 6ue "e3ol3er. to"os los %ro"uctos 6ue
%erte'ece' a u'a categorBa
GetProductByProductID ( productID ) 1 6ue "e3uel3e i'5or$aci!' so+re u' %ro"ucto e'
%articular
Estos $-to"os1 cua'"o se i'3oca1 se co'ectar. a la +ase "e "atos1 e#ecutar la co'sulta "e
su caso1 ) "e3ol3er los resulta"os. JC!$o %o"e$os "e3ol3er estos resulta"os es
i$%orta'te. Estos $-to"os s!lo %ue"e "e3ol3er u' DataSet o DataRea"er %o+la"a %or la
co'sulta "e +ases "e "atos1 %ero los resulta"os i"eal$e'te estos "e+e' ser "e3ueltos
co' los objetos con establecimiento inflexible . >' o+#eto co' esta+leci$ie'to i'5lei+le es
a6uel cu)o es6ue$a est. rBgi"a$e'te "e5i'i"o e' tie$%o "e co$%ilaci!'1 $ie'tras 6ue lo
co'trario1 u' o+#eto "-+il$e'te escrito1 es u' es6ue$a 6ue 'o se co'oce hasta el tie$%o
"e e#ecuci!'.
Por e#e$%lo1 el DataRea"er ) DataSet 8%or "e5ecto: so' o+#etos 3aga$e'te escrito1 )a 6ue
su es6ue$a est. "e5i'i"o %or las colu$'as "e3ueltas %or la co'sulta "e +ase "e "atos
utili0a"a %ara %o+larlas. Para acce"er a u'a colu$'a e' %articular a %artir "e u'a
3aga$e'te escrito DataTa+le te'e$os 6ue utili0ar u'a si'tais co$o( DataTable filas
[. ndice ] [" columnName "] . Escri+ir suelta el DataTa+le e' este e#e$%lo se "e$uestra
%or el hecho "e 6ue te'e$os 6ue acce"er a 'o$+re "e la colu$'a $e"ia'te u'a ca"e'a o
u' B'"ice or"i'al. >' esta+leci$ie'to i'5lei+le "e ti%os DataTa+le1 %or el co'trario1 te'"r.
ca"a u'a "e sus colu$'as i$%le$e'ta' co$o %ro%ie"a"es1 lo 6ue resulta e' el c!"igo 6ue
se 3e asB( DataTable . Filas [ ndice ]. columnName .
Para "e3ol3er los o+#etos co' esta+leci$ie'to i'5lei+le1 los "esarrolla"ores %ue"e' crear
sus %ro%ios o+#etos "e 'egocio %erso'ali0a"os o utili0ar co'#u'tos "e "atos co' ti%o. >'
o+#eto "e 'egocio se lle3a a ca+o %or el %ro$otor co$o u'a clase cu)as %ro%ie"a"es
suele' re5le#ar las colu$'as "e la ta+la "e +ase "e "atos su+)ace'te "el o+#eto "e 'egocio
re%rese'ta. >' DataSet es u'a clase ge'era"a %ara uste" %or 7isual Stu"io +asa"o e' u'
es6ue$a "e +ase "e "atos ) cu)os $ie$+ros so' "e ti%a"o 5uerte "e acuer"o co' este
es6ue$a. El DataSet se co$%o'e "e clases 6ue etie'"e' el co'#u'to "e "atos ADG.NET1
DataTa+le1 DataRo4 ) clases. A"e$.s "e las ta+las "e "atos co' esta+leci$ie'to i'5lei+le1
co'#u'tos "e "atos co' ti%o ahora ta$+i-' i'clu)e' Ta+leA"a%ters1 6ue so' clases co'
$-to"os %ara lle'ar el co'#u'to "e "atos "e ta+las "e "atos ) la %ro%agaci!' "e las
$o"i5icacio'es e' la ta+las "e "atos "e 3uelta a la +ase "e "atos.
/ota Para o+te'er $.s i'5or$aci!' so+re las 3e'ta#as ) "es3e'ta#as "el uso "e
co'#u'tos "e "atos co' ti%o e' co$%araci!' co' los o+#etos "e 'egocio %erso'ali0a"os1
co'sulte Dise=o "e co$%o'e'tes "e 'i3eles ) tras%aso "e "atos a tra3-s "e -stos .
7a$os a utili0ar co'#u'tos "e "atos co' esta+leci$ie'to i'5lei+le "e la ar6uitectura estos
tutoriales. 9a Eigura , $uestra el 5lu#o "e tra+a#o e'tre las "i5ere'tes ca%as "e u'a
a%licaci!' 6ue utili0a co'#u'tos "e "atos co' ti%o.
Figura 1 Todos los datos de Cdigo de .cceso es relegado a la 2.*
Creacin de un 2ata(et con tipo y el adaptador de la tabla
Para e$%e0ar a crear 'uestra DA91 se i'icia $e"ia'te la a"ici!' "e u' DataSet a 'uestro
%ro)ecto. Para lograr esto1 haga clic "erecho e' el 'o"o "el %ro)ecto e' el E%lora"or "e
solucio'es ) seleccio'e Agregar 'ue3o ele$e'to. Seleccio'e la o%ci!' "e co'#u'to "e
"atos "e la lista "e %la'tillas ) el 'o$+re "e Northwind.xsd .
Figura 3 4ptar por a5adir un nue!o con6unto de su proyecto
Des%u-s "e hacer clic e' Agregar1 cua'"o se le %i"e 6ue agregue el co'#u'to "e "atos a
la App_Code car%eta1 seleccio'e Si. El Dise=a"or "e DataSet se $ostrar.1 ) el Asiste'te %ara
la co'5iguraci!' "e Ta+leA"a%ter se i'icia1 lo 6ue le %er$ite a=a"ir su Ta+leA"a%ter
%ri$ero e' el DataSet.
>' DataSet sir3e co$o u'a colecci!' co' esta+leci$ie'to i'5lei+le "e "atos1 si'o 6ue se
co$%o'e "e i'sta'cias "e DataTa+le i'5lei+le "e ti%os1 ca"a u'o "e los cuales a su 3e0 se
co$%o'e "e casos DataRo4 i'5lei+le "e ti%os. 7a$os a crear u' esta+leci$ie'to i'5lei+le
"e ti%os DataTa+le %ara ca"a u'a "e las ta+las "e +ase "e "atos su+)ace'te 6ue te'e$os
6ue tra+a#ar e' esta serie "e tutoriales.7a$os a e$%e0ar co' la creaci!' "e u' DataTa+le
%ara los productos "e $esa.
Te'ga e' cue'ta 6ue DataTa+les i'5lei+le "e ti%os 'o i'clu)e' 'i'gu'a i'5or$aci!' so+re
c!$o acce"er a los "atos "e la ta+la "e +ase "e "atos su+)ace'te. Co' el 5i' "e recu%erar
los "atos %ara lle'ar el DataTa+le1 se utili0a u'a clase Ta+leA"a%ter1 6ue 5u'cio'a co$o
'uestra ca%a "e acceso a "atos. Para 'uestros productos DataTa+le1 Ta+leA"a%ter
co'te'"r. los $-to"os I GetProducts () 1GetProductByCategoryID ( IdCategora ) 1 ) asB
sucesi3a$e'te I 6ue 3a$os a i'3ocar a %artir "e la ca%a "e %rese'taci!'. El %a%el "el
DataTa+le es la "e ser3ir co$o o+#etos co' esta+leci$ie'to i'5lei+le utili0a %ara %asar
"atos e'tre las ca%as.
El Asiste'te %ara la co'5iguraci!' "e Ta+leA"a%ter co$ie'0a le %e"ir. 6ue seleccio'e 6u-
+ase "e "atos %ara tra+a#ar. 9a lista "es%lega+le $uestra las +ases "e "atos e' el
E%lora"or "e ser3i"ores. Si 'o a=a"ir la +ase "e "atos North4i'" al E%lora"or "e
ser3i"ores1 %ue"e hacer clic e' el +ot!' Nue3a co'ei!' e' este $o$e'to %ara hacerlo.
Figura - 7legir la base de datos /ort"0ind de la lista desplegable
Des%u-s "e seleccio'ar la +ase "e "atos ) hacer clic e' Siguie'te1 se le %e"ir. si "esea
guar"ar la ca"e'a "e co'ei!' e' elWeb.config archi3o. Al guar"ar la ca"e'a "e co'ei!'
6ue 3a a e3itar te'er 6ue co"i5ica"o e' las clases Ta+leA"a%ter1 lo 6ue si$%li5ica las cosas1
si los ca$+ios "e ca"e'a "e co'ei!' la i'5or$aci!' e' el 5uturo. Si o%ta %or guar"ar la
ca"e'a "e co'ei!' e' el archi3o "e co'5iguraci!' 6ue es coloca"o e'
el <connectionStrings> secci!'1 6ue %ue"e ser o%cio'al$e'te e'cri%ta"a %ara $a)or
seguri"a" o $o"i5icas 5uera "e %la0o a tra3-s "e la 'ue3a %.gi'a "e ASP.NET 2.0 e'
%ro%ie"a" "e la herra$ie'ta "e i'ter5a0 gr.5ica "e a"$i'istraci!' "e &&S1 6ue es $.s i"eal
%ara los a"$i'istra"ores.
Figura 8 9uardar la cadena de conexin en Web.config
A co'ti'uaci!'1 te'e$os 6ue "e5i'ir el es6ue$a "e la %ri$era DataTa+le co'
esta+leci$ie'to i'5lei+le ) "ar el %ri$er $-to"o %ara 'uestro Ta+leA"a%ter utili0ar al
relle'ar el DataSet co' ti%os "eclara"os. Estos "os %asos se lle3a' a ca+o "e 5or$a
si$ult.'ea $e"ia'te la creaci!' "e u'a co'sulta 6ue "e3uel3e las colu$'as "e la ta+la
6ue 6uere$os 6ue se re5le#a e' 'uestro DataTa+le. Al 5i'al "el asiste'te le "are$os u'
'o$+re "e $-to"o %ara esta co'sulta. >'a 3e0 6ue se ha logra"o1 este $-to"o %ue"e ser
i'3oca"o "es"e 'uestra ca%a "e %rese'taci!'. El $-to"o se e#ecutar. la co'sulta "e5i'i"a
) relle'ar u' DataTa+le co' esta+leci$ie'to i'5lei+le.
Para e$%e0ar a "e5i'ir la co'sulta S@91 %ri$ero "e+e$os i'"icar c!$o 6uere$os 6ue el
Ta+leA"a%ter 6ue e#ecutar la co'sulta.Po"e$os utili0ar u'a se'te'cia S@9 a"Ihoc1 crear u'
'ue3o %roce"i$ie'to al$ace'a"o1 o utili0ar u' %roce"i$ie'to al$ace'a"o eiste'te. Para
estos tutoriales 3a$os a utili0ar a"Ihoc se'te'cias S@9. Se re5iere' a ;ria'
No)es artBculo1 co'struir u'a ca%a "e acceso a "atos co' el Dise=a"or "e DataSet "e 7isual
Stu"io 2002 %ara 3er u' e#e$%lo "el uso "e %roce"i$ie'tos al$ace'a"os.
Figura : Consulta de los datos #ediante una declaracin ad "oc de ()*
E' este %u'to se %ue"e escri+ir e' la co'sulta S@9 a $a'o. Cua'"o se crea el %ri$er
$-to"o e' el Ta+leA"a%ter 6ue 'or$al$e'te 6uere$os te'er el retor'o co'sulta las
colu$'as 6ue "e+e' ser e%resa"os e' la corres%o'"ie'te DataTa+le. Po"e$os lograr esto
$e"ia'te la creaci!' "e u'a co'sulta 6ue "e3uel3e to"as las colu$'as ) to"as las 5ilas "e
los Productos de la ta+la(
Figura ; Introdu%ca la consulta ()* en el cuadro de texto
Co$o alter'ati3a1 utilice el De'era"or "e co'sultas ) gr.5ica$e'te la co'strucci!' "e la
co'sulta1 co$o se $uestra e' la Eigura K.
Figura < Crear la consulta de 'or#a gr='ica> a tra!?s del 7ditor de consultas
Des%u-s "e crear la co'sulta1 %ero a'tes "e %asar a la siguie'te %a'talla1 haga clic e' el
+ot!' G%cio'es a3a'0a"as. E' %ro)ectos "e sitio 4e+1 HDe'erar i'struccio'es &'sert1
>%"ate ) DeleteH es la <'ica o%ci!' a3a'0a"a seleccio'a"a %or "e5ecto1 si se e#ecuta este
asiste'te "es"e u'a +i+lioteca "e clases o u' %ro)ecto "e *i'"o4s la o%ci!' H>sar
co'curre'cia o%ti$istaH o%ci!' ta$+i-' ser.' seleccio'a"os. De#a la o%ci!' H>sar
co'curre'cia o%ti$istaH o%ci!' "esacti3a"a %or el $o$e'to. 7a$os a ea$i'ar la
co'curre'cia o%ti$ista e' 5uturos tutoriales.
Figura 1, (eleccione slo la opcin @9enerar instrucciones Insert> $pdate y
2elete@ 4pcin
Des%u-s "e 3eri5icar las o%cio'es a3a'0a"as1 haga clic e' Siguie'te %ara %asar a la
%a'talla 5i'al. A6uB se 'os %i"e 6ue seleccio'e cu.les so' los $-to"os %ara agregar a la
Ta+leA"a%ter. Ha) "os $o"elos %ara relle'ar los "atos(
*lenar un 2ataTable I co' este $-to"o es u' $-to"o 6ue se cre! e' u' DataTa+le
co$o %ar.$etro1 6ue se lle'a +as.'"ose e' los resulta"os "e la co'sulta. 9a clase
DataA"a%ter "e ADG.NET1 %or e#e$%lo1 i$%le$e'ta este $o"elo co' su relleno
()$-to"o.
2e!uel!e una 2ataTable I co' este e'5o6ue1 el $-to"o crea ) lle'a el DataTa+le
%ara uste" ) lo "e3uel3e co$o el 3alor "e retor'o $-to"os.
>ste" %ue"e te'er el Ta+leA"a%ter i$%le$e'tar u'o o a$+os "e estos %atro'es. Ta$+i-'
%ue"e ca$+iar el 'o$+re "e los $-to"os esta+leci"os a6uB. 7a$os a "e#ar las "os casillas
$arca"a1 a %esar "e 6ue s!lo 3a a utili0ar el %atr!' "e esta <lti$a a tra3-s "e estos
tutoriales. A"e$.s1 3a$os a ca$+iar el 'o$+re "el lugar ge'-rico GetData $-to"o
%ara GetProducts .
Si est. acti3a"a1 la casilla 5i'al1 HDe'erateD;DirectMetho"s1H crea Insert () 1 Update
() ) Delete () los $-to"os "e Ta+leA"a%ter. Si "e#a esta o%ci!' si' $arcar1 to"as las
actuali0acio'es se "e+e' hacer a tra3-s "el Ta+leA"a%ter <'ico Update () $-to"o1 6ue
tie'e e' el DataSet1 DataTa+le1 u' <'ico o+#eto DataRo4 o u'a $atri0 "e o+#etos
DataRo4. 8Si ha "esacti3a"o la HDe'erar i'struccio'es &'sert1 >%"ate ) DeleteH "es"e las
%ro%ie"a"es a3a'0a"as e' la Eigura K esta+leci$ie'to "e esta casilla 'o te'"r. 'i'g<'
e5ecto.: 7a$os a "e#ar esta casilla seleccio'a"a.
Figura 11 Ca#biar el no#bre del #?todo de GetData para GetProducts
Co$%lete el asiste'te1 haga clic e' Ei'ali0ar. Des%u-s se cierra el asiste'te 6ue se
"e3uel3e' al Dise=a"or "e DataSet1 lo 6ue "e$uestra la DataTa+le 6ue aca+a$os "e
crear. >ste" %ue"e 3er la lista "e colu$'as "e la Productos DataTa+le
8 ProductID 1 ProductName 1 ) asB sucesi3a$e'te:1 asB co$o los $-to"os "e
la ProductsTableAdapter 8 Fill () ) GetProducts () :.
Figura 1+ *os productos de 2ataTable y ProductsTableAdapter se "an a5adido al
con6unto de datos con tipo
E' este $o$e'to te'e$os u' DataSet co' u' solo DataTa+le 8 Northwind.Products : ) u'a
clase DataA"a%ter i'5lei+le "e ti%os 8NorthwindTableAdapters.ProductsTableAdapter : co'
u' GetProducts () $-to"o. Estos o+#etos se %ue"e' utili0ar %ara acce"er a u'a lista "e
to"os los %ro"uctos "e c!"igo co$o(
NorthwindTableAdapters.ProductsTableAdapter productsAdapter = new
NorthwindTableAdapters.ProductsTableAdapter ();
Northwind.ProductsDataTable productos;
productos productsAdapter.GetProducts = ();
foreach (Northwind.ProductsRow productRow en los productos)
Response.Write ("del producto:" + + productRow.ProductName "<br />");
Este c!"igo 'o 'os o+liga' a escri+ir u' %oco "e acce"er a los "atos es%ecB5icos "el
c!"igo. No tu3i$os 6ue crear u'a i'sta'cia "e las clases ADG.NET1 'o tie'e 6ue re5erirse a
cual6uier ti%o "e ca"e'a "e co'ei!'1 las co'sultas S@9 o %roce"i$ie'tos al$ace'a"os. E'
ca$+io1 el Ta+leA"a%ter %ro%orcio'a el c!"igo "e +a#o 'i3el "e acceso "e "atos %ara
'osotros.
Ca"a o+#eto 6ue se utili0a e' este e#e$%lo es ta$+i-' i'5lei+le "e ti%os1 lo 6ue %er$ite
6ue 7isual Stu"io %ro%orcio'a &'telliSe'se ) e' tie$%o "e co$%ilaci!' co$%ro+aci!' "e
ti%os. L lo $e#or "e to"as las ta+las "e "atos "e3ueltos %or el Ta+leA"a%ter se %ue"e
e'la0ar a "atos "e ASP.NET Co'troles *e+1 tales co$o los co'troles Dri"7ie41 Details7ie41
Dro%Do4'9ist1 Chec?;o9ist1 ) 3arios otros. El siguie'te e#e$%lo ilustra la u'i!' DataTa+le
"e3uelto %or el GetProducts () $-to"o a u' Dri"7ie4 e' ta' s!lo u'os escasos tres lB'eas
"e c!"igo e' el Page_Load co'trola"or "e e3e'tos.
.llProductsaspx
<% @ Page Language = "C #" AutoEventWireup = "true" CodeFile = "AllProducts.aspx.cs"
Inherits = "todosProductos"%>
<DOCTYPE html PUBLIC "- / / W3C / / DTD XHTML 1.0 Transitional / / EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title> Ver todos los productos en un GridView </ title>
<link rel="stylesheet" href="Styles.css" type="text/css" />
</ Head>
<body>
<form id="Form1" runat="server">
<div
<h1>
Todos los productos </ h1>
<p>
<asp:GridView ID="GridView1" runat="server" CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
</ Asp: GridView>
</ P>

</ Div>
</ Form>
</ Body>
</ Html>
.llProductsaspxcs
using System;
using System.Data;
utilizando System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
utilizando System.Web.UI;
utilizando System.Web.UI.WebControls;
utilizando System.Web.UI.WebControls.WebParts;
utilizando System.Web.UI.HtmlControls;
utilizando NorthwindTableAdapters;
pblica todosProductos clase parcial: System.Web.UI.Page
{
protected void Page_Load (object sender, EventArgs e)
{
ProductsTableAdapter productsAdapter = new ProductsTableAdapter ();
GridView1.DataSource productsAdapter.GetProducts = ();
GridView1.DataBind ();
}
}
Figura 11 *a lista de los productos se #uestra en un 9ridVie0
Au'6ue este e#e$%lo re6uiere 6ue escri+ir tres lB'eas "e c!"igo e' 'uestra %.gi'a "e
ASP.NET Page_Load co'trola"or "e e3e'tos1 e' 5uturos tutoriales 3a$os a ea$i'ar c!$o
usar el G+#ectDataSource %ara recu%erar los "atos "e 5or$a "eclarati3a "e la DA9. Co' el
G+#ectDataSource 6ue 'o te'"r. 6ue escri+ir 'i'g<' c!"igo ) o+te'er el a%o)o "e
%agi'aci!' ) la clasi5icaci!' ta$+i-'C
Paso 1: .gregar los #?todos con par=#etros de la
capa de acceso a datos
E' este %u'to ProductsTableAdapter clase tie'e u' solo $-to"o1 GetProducts () 1 6ue
"e3uel3e to"os los %ro"uctos e' la +ase "e "atos. Si +ie' es ca%a0 "e tra+a#ar co' to"os
los %ro"uctos es1 si' "u"a <til1 ha) 3eces e' 6ue 3a$os a 6uerer recu%erar i'5or$aci!'
so+re u' %ro"ucto es%ecB5ico1 o to"os los %ro"uctos 6ue %erte'ece' a u'a categorBa
%articular. Para agregar esta 5u'cio'ali"a" a 'uestro 'i3el "e acceso a los "atos 6ue
%o"e$os a=a"ir los $-to"os co' %ar.$etros %ara el Ta+leA"a%ter.
7a$os a a=a"ir el GetProductsByCategoryID ( IdCategora ) $-to"o. Para agregar u' 'ue3o
$-to"o %ara la DA91 3ol3er al Dise=a"or "e DataSet1 haga clic e'
el ProductsTableAdapter secci!' ) eli#a Agregar co'sulta.
Figura 13 Aaga clic con el Table.dapter y elegir .gregar consulta
E' %ri$er lugar 'os %regu'te si 6uere$os acce"er a la +ase "e "atos usa'"o u' a"Ihoc
i'strucci!' S@9 o u' %roce"i$ie'to 'ue3o o )a eiste'te al$ace'a"as. 7a$os a o%tar %or
utili0ar u'a se'te'cia S@9 a"Ihoc "e 'ue3o. A co'ti'uaci!'1 se 'os %regu'ta 6u- ti%o "e
co'sulta S@9 6ue 'os gustarBa utili0ar. De+i"o a 6ue "esea "e3ol3er to"os los %ro"uctos
6ue %erte'ece' a u'a categorBa "eter$i'a"a1 6uere$os escri+ir
u'a SELECCIONAR "eclaraci!' 6ue "e3uel3e 5ilas.
Figura 1- (eleccione Crear un SELECT de declaracin Bue de!uel!e 'ilas
El siguie'te %aso es "e5i'ir la co'sulta S@9 utili0a"a %ara acce"er a los "atos. Co$o 'os
6uiere' regresar s!lo a6uellos %ro"uctos 6ue %erte'ece' a u'a categorBa %articular1 )o uso
el $is$o SELECT de "eclaraci!' "e GetProducts () 1 %ero a=a"e lo
siguie'te DONDEcl.usula( DONDE CategoryID = @ CategoryID . El @ CategoryID %ar.$etro i'"ica
6ue el asiste'te "e Ta+leA"a%ter 6ue el $-to"o 6ue esta$os crea'"o re6uerir. u'
%ar.$etro "e e'tra"a "el ti%o corres%o'"ie'te 8es "ecir1 u' e'tero 'ulos:.
Figura 18 7scriba una consulta para de!ol!er slo los productos en una
categorCa
E' el <lti$o %aso %o"e$os elegir 6ue los %atro'es "e acceso "e "atos a utili0ar1 asB co$o
%erso'ali0ar los 'o$+res "e los $-to"os ge'era"os. Para el %atr!' "e relle'o1 3a$os a
ca$+iar el 'o$+re a FillByCategoryID ) %ara el regreso u' %atr!' "e ca$+io DataTa+le
8el Obtn X $-to"os:1 3a$os a usar GetProductsByCategoryID .
Figura 1: 7legir los no#bres de los #?todos de Table.dapter
Des%u-s "e co$%letar el asiste'te1 el Dise=a"or "e DataSet i'clu)e los $-to"os "e
Ta+leA"a%ter 'ue3o.
Figura 1; *os productos Bue a"ora se pueden consultar por categorCa
T!$ese u' $o$e'to %ara agregar u' GetProductByProductID ( productID ) $-to"o 6ue
utili0a la $is$a t-c'ica.
Estas co'sultas co' %ar.$etros se %ue"e %ro+ar "irecta$e'te "es"e el Dise=a"or "e
DataSet. Haga clic "erecho so+re el $-to"o e' el Ta+leA"a%ter ) eli#a 7ista %re3ia "e
"atos. A co'ti'uaci!'1 i'tro"u0ca los 3alores "e uso %ara los %ar.$etros ) haga clic e'
7ista %re3ia.
Figura 1< *os productos pertenecientes a la categorCa de bebidas se #uestran
Co' la GetProductsByCategoryID ( IdCategora ) $-to"o e' 'uestra DA91 ahora %o"e$os
crear u'a %.gi'a ASP.NET 6ue $uestra s!lo los %ro"uctos "e u'a categorBa es%eci5ica"a. El
siguie'te e#e$%lo $uestra to"os los %ro"uctos 6ue se e'cue'tra' e' la categorBa "e
+e+i"as1 6ue tie'e' u' CategoryID "e 1.
De!eragesaspx
<% @ Page Language = "C #" AutoEventWireup = "true" CodeFile = "Beverages.aspx.cs"
Inherits = "Bebidas"%>
<DOCTYPE html PUBLIC "- / / W3C / / DTD XHTML 1.0 Transitional / / EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
Pgina <title> ttulo </ title>
<link rel="stylesheet" href="Styles.css" type="text/css" />
</ Head>
<body>
<form id="Form1" runat="server">
<div
<h1> Bebidas </ h1>
<p>
<asp:GridView ID="GridView1" runat="server" CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
</ Asp: GridView>
</ P>
</ Div>
</ Form>
</ Body>
</ Html>
De!eragesaspxcs
using System;
using System.Data;
utilizando System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
utilizando System.Web.UI;
utilizando System.Web.UI.WebControls;
utilizando System.Web.UI.WebControls.WebParts;
utilizando System.Web.UI.HtmlControls;
utilizando NorthwindTableAdapters;
pblica Bebidas clase parcial: System.Web.UI.Page
{
protected void Page_Load (object sender, EventArgs e)
{
ProductsTableAdapter productsAdapter = new ProductsTableAdapter ();
GridView1.DataSource = productsAdapter.GetProductsByCategoryID (1);
GridView1.DataBind ();
}
}
Figura +, *os productos en la categorCa de bebidas es #ostrado
Paso 3: .ctuali%ar> insertar y eli#inar datos
Ha) "os %atro'es "e uso ge'eral %ara i'sertar1 actuali0ar ) eli$i'ar "atos. El %ri$er
%atr!'1 6ue )o lla$ar- el $o"elo "e +ase "e "atos "irecta1 i$%lica la creaci!' "e $-to"os
6ue1 cua'"o se i'3oca1 e$itir u'a INSERTAR 1 ACTUALIZAR 1 o DELETE co$a'"os a la +ase "e
"atos 6ue o%era e' u' registro "e +ase "e "atos <'ica. Estos $-to"os suele' ser a%ro+a"a
e' u'a serie "e 3alores escalares 8e'teros1 ca"e'as1 +oolea'os1 "ateti$es1 ) asB
sucesi3a$e'te: 6ue corres%o'"e' a los 3alores a i'sertar1 actuali0ar o eli$i'ar. Por
e#e$%lo1 co' este %atr!' %ara el Productos $esa "el $-to"o "e eli$i'aci!' %o"rBa te'er e'
u' %ar.$etro e'tero1 lo 6ue i'"ica elProductID "el registro 6ue "esea eli$i'ar1 $ie'tras
6ue el $-to"o "e i'serci!' to$arBa e' u'a ca"e'a %ara el ProductName 1 u' %u'to "eci$al
%ara el PrecioUnidad 1 u' '<$ero e'tero %ara el UnitsOnStock 1 ) asB sucesi3a$e'te.
Figura +1 Cada insercin> actuali%acin y solicitud de eli#inacin se en!Ca a la
base de datos in#ediata#ente
El otro %atr!' 6ue $e re5erir- co$o el %atr!' "e actuali0aci!' %or lotes1 es actuali0ar u'
DataSet1 DataTa+le o colecci!' "e o+#etos DataRo4 e' u'a lla$a"a al $-to"o. Co' este
%atr!' "e u' "esarrolla"or "e eli$i'acio'es1 i'sercio'es1 ) $o"i5ica el DataRo4 e' u'
DataTa+le ) luego %asa a los o+#etos DataRo4 o DataTa+le e' u' $-to"o "e
actuali0aci!'. Este $-to"o1 a co'ti'uaci!' se e'u$era' los o+#etos DataRo4 %asa"o e'1
"eter$i'a si se ha' $o"i5ica"o1 a=a"i"o o eli$i'a"o 8a tra3-s "e la DataRo4 "e la
%ro%ie"a" Ro4State "e 3alor:1 ) las cuestio'es "e la solicitu" "e +ase "e "atos a%ro%ia"a
%ara ca"a registro.
Figura ++ Todos los ca#bios se sincroni%an con la base de datos cuando el
#?todo de actuali%acin se in!oca
El Ta+leA"a%ter utili0a el %atr!' "e actuali0aci!' %or lotes %or "e5ecto1 %ero ta$+i-' es
co$%ati+le co' el %atr!' "irecto D;. Da"o 6ue he$os seleccio'a"o la o%ci!' HDe'erar
i'struccio'es &'sert1 >%"ate ) DeleteH "es"e las %ro%ie"a"es a3a'0a"as al crear 'uestro
Ta+leA"a%ter1 el ProductsTableAdapter co'tie'e u'a actualizacin () $-to"o1 6ue
i$%le$e'ta el %atr!' "e actuali0aci!' %or lotes.E' co'creto1 el Ta+leA"a%ter co'tie'e
u'a actualizacin () $-to"o 6ue se %ue"e %asar el DataSet1 DataTa+le i'5lei+le "e ti%os1
o u'o o $.s o+#etos DataRo4. Si "e#! el HDe'erateD;DirectMetho"sH casilla "e 3eri5icaci!'
$arca"a la %ri$era 3e0 6ue la creaci!' "el Ta+leA"a%ter el $o"elo D; "irecta ta$+i-' se
lle3ar. a ca+o a tra3-s "e Insert () 1 Update () ) Delete () $-to"os.
A$+os %atro'es "e $o"i5icaci!' "e "atos usar el
Ta+leA"a%ter InsertCommand 1 UpdateCommand ) DeleteCommand %ro%ie"a"es %ara e$itir
su INSERTAR 1 ACTUALIZAR 1 ) DELETE co$a'"os a la +ase "e "atos. >ste" %ue"e i's%eccio'ar )
$o"i5icar el InsertCommand 1UpdateCommand ) DeleteCommand %ro%ie"a"es hacie'"o clic e' el
Ta+leA"a%ter e' el Dise=a"or "e DataSet ) luego ir a la 3e'ta'a Pro%ie"a"es. 8Aseg<rese
"e ha+er seleccio'a"o el Ta+leA"a%ter1 ) 6ue el ProductsTableAdapter o+#eto es la
seleccio'a"a e' la lista "es%lega+le e' la 3e'ta'a Pro%ie"a"es.:
Figura +1 7l Table.dapter
"a InsertCommand > pdateCommand y DeleteCommand Propiedades
Para ea$i'ar o $o"i5icar cual6uiera "e estas %ro%ie"a"es "e +ase "e "atos "e co$a'"os1
haga clic e' el CommandTextsu+%ro%ie"a"1 6ue se a+re el De'era"or "e co'sultas.
Figura +3 Con'igurar el I!SE"TA" > ACTALI#A" > y DELETE declaraciones en el
9enerador de consultas
El siguie'te e#e$%lo $uestra c!$o utili0ar el $o"elo "e actuali0aci!' %or lotes %ara
"u%licar el %recio "e to"os los %ro"uctos 6ue 'o se sus%e'"a ) 6ue tie'e' 22 u'i"a"es e'
stoc? o $e'os(
NorthwindTableAdapters.ProductsTableAdapter productsAdapter = new
NorthwindTableAdapters.ProductsTableAdapter ();
/ / Para cada producto, el doble de su precio si no se interrumpe y
/ / Hay 25 artculos en stock o menos
Productos Northwind.ProductsDataTable productsAdapter.GetProducts = ();
foreach (producto Northwind.ProductsRow en los productos)
if (! product.Discontinued & & product.UnitsInStock <= 25)
product.UnitPrice *= 2;
/ / Actualizacin de los productos
productsAdapter.Update (productos);
El c!"igo siguie'te $uestra c!$o utili0ar el $o"elo "irecto D; %ara eli$i'ar $e"ia'te
%rogra$aci!' u' %ro"ucto e' %articular1 a co'ti'uaci!'1 actuali0ar1 ) luego a=a"ir u'o
'ue3o(
NorthwindTableAdapters.ProductsTableAdapter productsAdapter = new
NorthwindTableAdapters.ProductsTableAdapter ();
/ / Eliminar el producto con ProductID 3
productsAdapter.Delete (3);
/ / Actualizar Chai (ProductID de 1), en el UnitsOnOrder a 15
productsAdapter.Update ("Chai", 1, 1, "10 cajas x 20 bolsas", 18.0m, de 39 aos,
15, 10, falso, 1);
/ / Aadir un nuevo producto
productsAdapter.Insert ("Producto Nuevo", 1, 1, "12 latas por caja",
14.95m, 15, 0, 10, false);
Creacin de insercin personali%ados> actuali%acin y eli#inacin de los
#?todos
El Insert () 1 Update () ) Delete () los $-to"os crea"os %or el $-to"o "irecto D; %ue"e ser
u' %oco e'gorroso1 so+re to"o %ara las ta+las co' $uchas colu$'as. Mira'"o el e#e$%lo
"e c!"igo a'terior1 si' la a)u"a "e &'telliSe'se 'o es %articular$e'te claro
6u-productos $a%as colu$'a "e la ta+la %ara ca"a %ar.$etro "e e'tra"a a la actualizacin
() ) Insert () $-to"os. Pue"e ha+er $o$e'tos e' los 6ue s!lo 6uiere actuali0ar u'a sola
colu$'a o "os1 o 6uiere u'a $e"i"a de insercin () $-to"o 6ue1 tal 3e01 "e3ol3er el 3alor
"el registro reci-' i'serta"o IDENTIDAD 8i'cre$e'to auto$.tico: so+re el terre'o.
Para crear u' $-to"o %erso'ali0a"o1 3uel3a al Dise=a"or "e DataSet. Haga clic "erecho e'
el Ta+leA"a%ter ) eli#a Agregar co'sulta1 3ol3ie'"o a la asiste'te "e Ta+leA"a%ter. E' la
segu'"a %a'talla %o"e$os i'"icar el ti%o "e co'sulta %ara crear. 7a$os a crear u' $-to"o
6ue agrega u' 'ue3o %ro"ucto ) luego "e3uel3e el 3alor "el registro 6ue aca+a "e agregar
el ProductID . Por lo ta'to1 o%tar %or crear u' INSERTAR co'sulta.
Figura +- Crear un #?todo para agregar una nue!a 'ila a la Productos Tabla
E' la siguie'te %a'talla el InsertCommand Ms CommandText a%arece. Au$e'tar esta co'sulta
agrega'"o SCOPE_IDENTITY SELECT () al 5i'al "e la co'sulta1 lo 6ue "e3ol3er. el <lti$o 3alor
"e i"e'ti"a" i'serta"o e' u'a IDENTIDAD colu$'a e' el $is$o .$+ito. 87ea
la"ocu$e'taci!' t-c'ica %ara o+te'er $.s i'5or$aci!' acerca "e SCOPE_IDENTITY () ) %or
6u- es %ro+a+le 6ue "esee utili0ar SCGPE_&DENT&TL 8: e' lugar "e N N &DENT&TL .:
Aseg<rese "e 6ue 5i'alice la INSERTAR "eclaraci!' co' u' %u'to ) co$a a'tes "e a=a"ir
el SELECCIONE co$u'ica"o.
Figura +8 .u#entar la consulta para de!ol!er el SC$PE_IDE!TIT% &' Valor
Por <lti$o1 el 'o$+re "el 'ue3o $-to"o InsertProduct .
Figura +: 7stablecer el no#bre de /ue!o #?todo para InsertProduct
Cua'"o regresa al Dise=a"or "e DataSet se 3er. 6ue la ProductsTableAdapter co'tie'e u'
'ue3o $-to"o1 InsertProduct . Si este 'ue3o $-to"o 'o tie'e u' %ar.$etro %ara ca"a
colu$'a "e la Productos "e $esa1 es %ro+a+le 6ue uste" se ol3i"! "e %o'er 5i'
alINSERTAR "eclaraci!' co' u' %u'to ) co$a. Co'5igurar el InsertProduct $-to"o )
asegurarse "e 6ue tie'e u' %u'to ) co$a "e la "eli$itaci!' "e
la INSERTAR ) SELECCIONAR "eclaracio'es.
Por "e5ecto1 $-to"os "e i'serci!' "e e"ici!' 'oI6uer) $-to"os1 lo 6ue sig'i5ica 6ue
"e3ol3er. el '<$ero "e 5ilas a5ecta"as. Si' e$+argo1 6uere$os 6ue
el InsertProduct $-to"o %ara "e3ol3er el 3alor "e3uelto %or la co'sulta1 'o el '<$ero "e
5ilas a5ecta"as.Para lograr esto1 a#ustar el InsertProduct $-to"o ExecuteMode %ro%ie"a"
a escalar .
Figura +; Ca#biar el E(ecute)ode de propiedades para escalar
El siguie'te c!"igo $uestra este 'ue3o InsertProduct $-to"o e' acci!'(
NorthwindTableAdapters.ProductsTableAdapter productsAdapter = new
NorthwindTableAdapters.ProductsTableAdapter ();
/ / Aadir un nuevo producto
int = new_productID Convert.ToInt32 (productsAdapter.InsertProduct ("Producto Nuevo", 1,
1, "12 latas por caja", 14.95m, 10, 0, 10, false));
/ / Aunque pensndolo bien, eliminar el producto
productsAdapter.Delete (new_productID);
Paso -: Co#pletar el ni!el de acceso a datos
Te'ga e' cue'ta 6ue la ProductsTableAdapters clase "e3uel3e el Id. de
categora ) IdProveedor 3alores "e los productos de la ta+la1 %ero 'o i'clu)e
el CategoryName colu$'a "e la Categoras "e $esa o el CompanyName "e la colu$'a
"e Proveedores "e $esa1 au'6ue es %ro+a+le "e las colu$'as 6ue "esea $ostrar cua'"o se
$uestra' los %ro"uctos "e la i'5or$aci!'. Po"e$os au$e'tar el $-to"o "el Ta+leA"a%ter
i'icial1 GetProducts () 1 6ue i'clu)e ta'to la CategoryName ) CompanyName 3alores "e la
colu$'a1 6ue se actuali0ar. el esta+leci$ie'to i'5lei+le "e ti%os DataTa+le %ara i'cluir
estas 'ue3as colu$'as ta$+i-'.
Esto %ue"e re%rese'tar u' %ro+le$a1 si' e$+argo1 co$o los $-to"os "el Ta+leA"a%ter
%ara i'sertar1 actuali0ar ) eli$i'ar "atos est.' +asa"os e' este $-to"o
i'icial. A5ortu'a"a$e'te1 los $-to"os "e autoIge'era"o %ara i'sertar1 actuali0ar ) eli$i'ar
'o se 3e' a5ecta"os %or su+co'sultas e' la SELECT de la cl.usula. Te'ie'"o cui"a"o "e
a=a"ir 'uestras co'sultas a las categoras )proveedores co$o su+co'sultas1 e' lugar
"e UNETE s1 3a$os a e3itar te'er 6ue reela+orar esos $-to"os %ara la $o"i5icaci!' "e
"atos. Haga clic "erecho e' el GetProducts () $-to"o e' el ProductsTableAdapter ) eli#a
Co'5igurar. A co'ti'uaci!'1 a#ustar elSELECCIONAR cl.usula %ara 6ue se 3ea asB(
SELECT ProductID, ProductName, IdProveedor, CategoryID,
CantidadPorUnidad, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, descatalogados,
(SELECT CategoryName de categoras en las que Categoras.IdCategora = Products.CategoryID
como CategoryName, (SELECT CompanyName de Proveedores
DONDE Suppliers.SupplierID = Products.SupplierID) como SupplierName
FROM Productos
Figura +< .ctuali%ar el SELECCI$!E 2eclaracin para el GetProducts &' &?todo
Des%u-s "e actuali0ar el GetProducts () $-to"o a utili0ar esta 'ue3a co'sulta "e la
DataTa+le se i'clu)e' "os 'ue3as colu$'as(CategoryName ) SupplierName .
Figura 1, *os productos 2ataTable tiene dos nue!as colu#nas
To$e u' $o$e'to %ara actuali0ar el SELECCIONE cl.usula e' el GetProductsByCategoryID
( IdCategora ) $-to"o.
Si actuali0a el GetProducts () SELECT de uso "e NETE si'tais el Dise=a"or "e DataSet 'o
ser. ca%a0 "e ge'erar auto$.tica$e'te los $-to"os %ara i'sertar1 actuali0ar ) +orrar
"atos "e +ase "e "atos utili0a'"o el $o"elo "e +ase "e "atos "irecta. E' su lugar1 uste"
te'"r. 6ue crear $a'ual$e'te al igual 6ue hici$os co' el InsertProduct $-to"o
a'terior$e'te e' este tutorial. A"e$.s1 "e 5or$a $a'ual te'"r. 6ue %ro%orcio'ar
la InsertCommand 1 UpdateCommand ) DeleteCommand 3alores "e la %ro%ie"a"1 si "esea utili0ar el
$o"elo "e actuali0aci!' %or lotes.
.gregando el restante Table.dapters
Hasta ahora1 s!lo he$os $ira"o e' el tra+a#o co' u' Ta+leA"a%ter <'ico %ara u'a ta+la "e
+ase "e "atos <'ica. Si' e$+argo1 la +ase "e "atos Ne%tu'o co'tie'e 3arias ta+las
relacio'a"as 6ue te'"re$os 6ue tra+a#ar e' 'uestra a%licaci!' 4e+. >' DataSet %ue"e
co'te'er $<lti%les ta+las "e "atos relacio'a"as. Por lo ta'to1 %ara co$%letar 'uestra DA9
te'e$os 6ue a=a"ir ta+las "e "atos %ara las otras ta+las 6ue usare$os e' estos
tutoriales. Para a=a"ir u' 'ue3o o+#eto Ta+leA"a%ter a u' DataSet1 a+ra el Dise=a"or "e
DataSet1 haga clic e' el Dise=a"or1 ) seleccio'e Agregar A Ta+leA"a%ter. Esto crear. u'
'ue3o o+#eto DataTa+le ) Ta+leA"a%ter ) ca$i'ar a tra3-s "el asiste'te se ea$i'!
a'terior$e'te e' este tutorial.
T!$ese u'os $i'utos %ara crear la siguie'te Ta+leA"a%ters ) los $-to"os 6ue utili0a' las
siguie'tes co'sultas. Te'ga e' cue'ta 6ue las co'sultas e' el ProductsTableAdapter i'clu)e'
las su+co'sultas %ara agarrar la categorBa "e ca"a %ro"ucto ) los 'o$+res "e los
%ro3ee"ores. A"e$.s1 si uste" ha esta"o siguie'"o a lo largo1 6ue )a ha a=a"i"o
el ProductsTableAdapter clase GetProducts () )GetProductsByCategoryID
( IdCategora ) $-to"os.
ProductsTable.dapter
9etProducts:
SELECT ProductID, ProductName, IdProveedor, CategoryID,
CantidadPorUnidad, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel,
Discontinuadas, (SELECT CategoryName de categoras en las que
Categoras.IdCategora = Products.ProductID) como CategoryName, (SELECT
NombreCompaa de Proveedores DONDE Suppliers.SupplierID =
Products.SupplierID) como SupplierName
FROM Productos
9etProductsDyCategoryI2:
SELECT ProductID, ProductName, IdProveedor, CategoryID,
CantidadPorUnidad, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel,
Discontinuadas, (SELECT CategoryName de categoras en las que
Categoras.IdCategora = Products.ProductID) como CategoryName, (SELECT
NombreCompaa de Proveedores DONDE Suppliers.SupplierID =
Products.SupplierID) como SupplierName
FROM Productos
DONDE CategoryID = @ CategoryID
9etProductsDy(upplierI2
SELECT ProductID, ProductName, IdProveedor, CategoryID,
CantidadPorUnidad, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel,
Discontinuadas, (SELECT CategoryName de categoras en las que
Categoras.IdCategora = Products.ProductID) como CategoryName, (SELECT
NombreCompaa de Proveedores DONDE Suppliers.SupplierID =
Products.SupplierID) como SupplierName
FROM Productos
DONDE IdProveedor = @ IdProveedor
9etProductDyProductI2
SELECT ProductID, ProductName, IdProveedor, CategoryID,
CantidadPorUnidad, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel,
Discontinuadas, (SELECT CategoryName de categoras en las que
Categoras.IdCategora = Products.ProductID) como CategoryName, (SELECT
NombreCompaa de Proveedores DONDE Suppliers.SupplierID =
Products.SupplierID) como SupplierName
FROM Productos
WHERE ProductID = @ ProductID
CategoriesTable.dapter
GetCategories
Seleccione CategoryID, CategoryName Descripcin
FROM Categoras
9etCategoryDyCategoryI2
Seleccione CategoryID, CategoryName Descripcin
FROM Categoras
DONDE CategoryID = @ CategoryID
(uppliersTable.dapter
GetSuppliers
SELECCIONAR IdProveedor, CompanyName, Direccin, Ciudad, Pas, Telfono
A partir de proveedores
DetSu%%liers;)Cou'tr)
SELECCIONAR IdProveedor, CompanyName, Direccin, Ciudad, Pas, Telfono
A partir de proveedores
DONDE Pas = @ Pas
9et(upplierDy(upplierI2
SELECCIONAR IdProveedor, CompanyName, Direccin, Ciudad, Pas, Telfono
A partir de proveedores
DONDE IdProveedor = @ IdProveedor
7#ployeesTable.dapter
GetEmployees
Seleccione EmployeeID, Apellido, Nombre, Ttulo, Fecha de contratacin ReportsTo, Pas
FROM Empleados
9et7#ployeesDy&anager
Seleccione EmployeeID, Apellido, Nombre, Ttulo, Fecha de contratacin ReportsTo, Pas
FROM Empleados
DONDE ReportsTo = @ ManagerID
9et7#ployeeDy7#ployeeI2
Seleccione EmployeeID, Apellido, Nombre, Ttulo, Fecha de contratacin ReportsTo, Pas
FROM Empleados
DONDE EmployeeID = @ EmployeeID
Figura 11 7l 2ise5ador de 2ata(et despu?s de los cuatro Table.dapters se "an
a5adido
.gregar cdigo personali%ado a la 2.*
9os Ta+leA"a%ters ) ta+las "e "atos a=a"i"o al co'#u'to "e "atos co' ti%o se e%resa'
co$o u' archi3o "e "e5i'ici!' "e es6ue$as OM9 8 Northwind.xsd :. >ste" %ue"e 3er esta
i'5or$aci!' "e es6ue$a1 haga clic e' el Northwind.xsd archi3o e' el E%lora"or "e
solucio'es ) elegir 7er c!"igo.
Figura 1+ *a de'inicin de esBue#a E&* (E(2) para el con6unto de datos con
tipo /eptuno
Esta i'5or$aci!' "e es6ue$a se tra"uce e' C # o 7isual ;asic e' tie$%o "e "ise=o cua'"o
se co$%ila o e' tie$%o "e e#ecuci!' 8si es 'ecesario:1 $o$e'to e' 6ue uste" %ue"e
ca$i'ar a tra3-s "e ella co' el "e%ura"or. Para 3er este c!"igo ge'era"o auto$.tica$e'te
3a)a a la 7ista "e clases ) %ro5u'"i0ar e' el Ta+leA"a%ter o clases DataSet. Si uste" 'o 3e
la 7ista "e clases e' su %a'talla1 "irB#ase al $e'< 7er ) seleccio'e a %artir "e ahB1 o %ulse
Ctrl F Ma)<s F C. De la 7ista "e clases se %ue"e 3er las %ro%ie"a"es1 $-to"os ) e3e'tos
"e las clases DataSet ) Ta+leA"a%ter. Para 3er el c!"igo "e u' $-to"o e' %articular1 haga
"o+le clic e' el 'o$+re "el $-to"o e' la 7ista "e clases o el +ot!' "erecho so+re -l )
seleccio'e &r a "e5i'ici!'.
Figura 11 Inspeccionar el cdigo generado auto#=tica#ente por la (eleccin Ir
a de'inicin de la Vista de clases
Mie'tras 6ue ge'era auto$.tica$e'te el c!"igo %ue"e ser u' gra' ahorro "e tie$%o1 el
c!"igo es a $e'u"o $u) ge'-rica ) tie'e 6ue ser %erso'ali0a"o %ara satis5acer las
'ecesi"a"es es%ecB5icas "e u'a a%licaci!'. El riesgo "e ete'"er c!"igo ge'era"o
auto$.tica$e'te1 si' e$+argo1 es 6ue la herra$ie'ta 6ue ge'er! el c!"igo %o"rBa "eci"ir
6ue es hora "e Hrege'erarH ) so+rescri+ir las %erso'ali0acio'es. Co'. NET 2.0 Ms 'ue3o
co'ce%to "e clase %arcial1 es 5.cil "i3i"ir u'a clase e' 3arios archi3os. Esto 'os %er$ite
a=a"ir 'uestros %ro%ios $-to"os1 %ro%ie"a"es ) e3e'tos %ara las clases ge'era"as
auto$.tica$e'te si' te'er 6ue %reocu%arse acerca "e 7isual Stu"io so+rescri+ir 'uestras
%erso'ali0acio'es.
Para "e$ostrar c!$o %erso'ali0ar la DA91 3a$os a a=a"ir u'a GetProducts () $-to"o %ara
la SuppliersRow clase. El SuppliersRowclase re%rese'ta u' <'ico registro "e la Proveedores "e
$esa1 ca"a %ro3ee"or %ue"e %ro3ee"or "e cero a $uchos %ro"uctos1 %or lo
6ue GetProducts () "e3ol3er. los %ro"uctos "el %ro3ee"or es%eci5ica"o. Para lograr esto
crear u' 'ue3o archi3o "e clase e' elApp_Code car%eta co' el 'o$+re SuppliersRow.cs )
agregue el siguie'te c!"igo(
using System;
using System.Data;
utilizando NorthwindTableAdapters;
pblica parcial de la clase Neptuno
{
SuppliersRow public partial class
{
pblica GetProducts Northwind.ProductsDataTable ()
{
ProductsTableAdapter productsAdapter = new ProductsTableAdapter ();
volver productsAdapter.GetProductsBySupplierID (this.SupplierID);
}
}
}
Esta clase %arcial i'"ica al co$%ila"or 6ue cua'"o la co'strucci!' "e
la Northwind.SuppliersRow "e clase %ara i'cluir el GetProducts () el $-to"o 6ue aca+a$os "e
"e5i'ir. Si uste" co'stru)e su %ro)ecto ) luego 3ol3er a la 7ista "e clases 3er. GetProducts
() a%arece ahora co$o u' $-to"o "e Northwind.SuppliersRow .
Figura 13 7l GetProducts &' &?todo es a"ora parte de la !ort*+ind.Suppliers"o+ clase
El GetProducts () $-to"o 6ue ahora se %ue"e utili0ar %ara e'u$erar el co'#u'to "e
%ro"uctos "e u' %ro3ee"or e' %articular1 co$o $uestra el siguie'te c!"igo(
NorthwindTableAdapters.SuppliersTableAdapter suppliersAdapter = new
NorthwindTableAdapters.SuppliersTableAdapter ();
/ / Obtener todos los proveedores
Northwind.SuppliersDataTable proveedores suppliersAdapter.GetSuppliers = ();
/ / Enumere los proveedores
foreach (proveedor Northwind.SuppliersRow de proveedores)
{
Response.Write ("Proveedor:" + supplier.CompanyName);
Response.Write ("<ul>");
/ / Lista de los productos para este proveedor
Productos Northwind.ProductsDataTable supplier.GetProducts = ();
foreach (producto Northwind.ProductsRow en los productos)
Response.Write ("<li>" + product.ProductName + "</ li>");
Response.Write ("</ ul> </ p>");
}
Estos "atos ta$+i-' se %ue"e' 3isuali0ar e' cual6uiera "e los co'troles ASP.NET Ms *e+ "e
"atos. 9a siguie'te %.gi'a e'la0a a u' co'trol Dri"7ie4 co' "os ca$%os(
A ;ou'"Eiel" 6ue $uestra el 'o$+re "e ca"a %ro3ee"or1 )
>' Te$%lateEiel" 6ue co'tie'e u' co'trol ;ullete"9ist 6ue est. e'la0a"o a los
resulta"os "e3ueltos %or el GetProducts ()$-to"o %ara ca"a %ro3ee"or.
7a$os a ea$i'ar c!$o se $uestra co$o $aestroI"etalle e' los i'5or$es 5uturos
tutoriales. Por ahora1 este e#e$%lo sir3e %ara ilustrar el $-to"o %erso'ali0a"o a=a"i"o a
la Northwind.SuppliersRow clase.
(uppliers.ndProductsaspx
<% @ Page Language = "C #" AutoEventWireup = "true"
CodeFile = "SuppliersAndProducts.aspx.cs" Inherits = "SuppliersAndProducts"%>
<DOCTYPE html PUBLIC "- / / W3C / / DTD XHTML 1.0 Transitional / / EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
Pgina <title> ttulo </ title>
<link rel="stylesheet" href="Styles.css" type="text/css" />
</ Head>
<body>
<form id="Form1" runat="server">
<div
<h1>
Proveedores y sus productos </ h1>
<p>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<columnas>
<asp:BoundField DataField="CompanyName" HeaderText="Supplier" />
<asp:TemplateField HeaderText="Products">
<ItemTemplate>
<Asp:. BulletedList ID = "BulletedList1" runat = "server"
DataSource ='<%# (. (Northwind.SuppliersRow) ((System.Data.DataRowView)
Container.DataItem) Fila) GetProducts ()%> '
DataTextField = "ProductName">
</ Asp: BulletedList>
</ ItemTemplate>
</ Asp: TemplateField>
</ Columns>
</ Asp: GridView>
</ P>

</ Div>
</ Form>
</ Body>
</ Html>
(uppliers.ndProductsaspxcs
using System;
using System.Data;
utilizando System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
utilizando System.Web.UI;
utilizando System.Web.UI.WebControls;
utilizando System.Web.UI.WebControls.WebParts;
utilizando System.Web.UI.HtmlControls;
utilizando NorthwindTableAdapters;
pblica SuppliersAndProducts clase parcial: System.Web.UI.Page
{
protected void Page_Load (object sender, EventArgs e)
{
SuppliersTableAdapter suppliersAdapter = new SuppliersTableAdapter ();
GridView1.DataSource suppliersAdapter.GetSuppliers = ();
GridView1.DataBind ();
}
}
Figura 1- /o#bre del Pro!eedor co#pa5Ca coti%a en la colu#na de la i%Buierda>
sus productos en el derec"o
Fesu#en
Al co'struir u'a a%licaci!' 4e+ la creaci!' "e la DA9 "e+e ser u'o "e los %ri$eros %asos1
6ue se %ro"uce' a'tes "e e$%e0ar a crear la ca%a "e %rese'taci!'. Co' 7isual Stu"io1 la
creaci!' "e u'a DA9 so+re la +ase "e co'#u'tos "e "atos co' ti%o es u'a tarea 6ue %ue"e
reali0arse e' 10I12 $i'utos1 si' escri+ir u'a sola lB'ea "e c!"igo. 9os tutoriales "e a3a'0ar
se +asar. e' esta DA9. E' el siguie'te tutorial 3a$os a "e5i'ir u'a serie "e reglas "e
'egocio ) 3er c!$o %o'erlas e' %r.ctica e' u'a ca%a "e l!gica "e 'egocios %or se%ara"o.
Progra$aci!' 5eli0C
*eer #=s
Para $.s i'5or$aci!' so+re los te$as trata"os e' este tutorial1 co'sulte los siguie'tes
recursos(
9a co'strucci!' "e u'a DA9 $e"ia'te Ta+leA"a%ters i'5lei+le "e ti%os ) ta+las "e
"atos e' 7S 2002 ) ASP.NET 2.0
Dise=o "e co$%o'e'tes "e 'i3eles ) tras%aso "e "atos a tra3-s "e 'i3eles
Co'struir u'a ca%a "e acceso a "atos co' el Dise=a"or "e DataSet "e 7isual Stu"io
2002
Ci5rar i'5or$aci!' "e co'5iguraci!' "e a%licacio'es ASP.NET 2.0
&'5or$aci!' ge'eral so+re Ta+leA"a%ter
Tra+a#a'"o co' u' DataSet
>tili0a'"o el acceso a "atos co' ti%os e' 7isual Stu"io 2002 ) ASP.NET 2.0
C!$o a$%liar los $-to"os "e Ta+leA"a%ter
Recu%eraci!' "e "atos escalares "e u' %roce"i$ie'to al$ace'a"o
(obre el autor
Scott Mitchell1 autor "e seis ASP A ASP.NET li+ros ) 5u'"a"or "e /Du)sEro$Rolla.co$1 ha
esta"o tra+a#a'"o co' tec'ologBas *e+ "e Microso5t "es"e 1KKP. Scott tra+a#a co$o
co'sultor i'"e%e'"ie'te1 i'structor ) escritor1 recie'te$e'te co$%leta'"o su <lti$o
li+ro1Sa$s Teach Loursel5 ASP.NET 2.0 e' 2/ horas . Ql %ue"e ser alca'0a"o
e' $itchellN/gu)s5ro$rolla.co$ oa tra3-s "e su +log1 6ue se %ue"e e'co'trar
e' htt%(AAScottG'*riti'g.NET .
9racias especiales a
Esta serie "e tutoriales 5ue re3isa"o %or $uchos usuarios <til. 9os ea$i'a"ores %ri'ci%ales
%ara este tutorial i'clu)e' Ro' Dree'1 Diese'o4 Hilto'1 De''is Patterso'1 Shulo? 9i01 A+el
D!$e01 ) Carlos Sa'tos. &'teresa"os e' re3isar $is artBculos "e MSDN 6ue 3ie'eR Si es asB1
$e escri+a a $itchellN/Du)sEro$Rolla.co$ .
Tutorial +: Crear una capa de lgica de
negocios

Scott Mitchell
06 2006
Descargue el ASPNET_Data_Tutorial_2_CS.ee c!"igo "e e#e$%lo.
Descargar el cdigo de ejemplo ASPNET_Data_Tutorial_2_CS.exe.
Contenido del Tutorial + (Visual C #)
&'tro"ucci!'
Paso 1( Creaci!' "e la ;99 Clases
Paso 2( Acceso a los co'#u'tos "e "atos co' ti%o A tra3-s "e la ;99 Clases
Paso ,( Agregar 3ali"aci!' a 'i3el "e ca$%o a las clases DataRo4
Paso /( Agregar reglas %erso'ali0a"as "e 'egocios a la ;99 "e Clases
Resu$e'
Introduccin
9a ca%a "e acceso a "atos 8DA9:1 crea"a e' el %ri$er tutorial se%ara clara$e'te la l!gica
"e acceso a los "atos "e la l!gica "e %rese'taci!'. Si' e$+argo1 $ie'tras 6ue el DA9
se%ara clara$e'te los "etalles "e acceso a los "atos "e la ca%a "e %rese'taci!'1 6ue 'o
hace cu$%lir las reglas "e 'egocio 6ue se %ue"e' a%licar. Por e#e$%lo1 %ara 'uestra
a%licaci!' %o"e$os 6uerer %ara 'o %er$itir elCategoryID o IdProveedor ca$%os "e los
productos "e $esa1 %o"r. $o"i5icarse cua'"o las interrumpidas ca$%o est. esta+leci"o e'
11 o %ue"e ser 6ue "esee$os hacer cu$%lir las reglas "e a'tigSe"a"1 la %rohi+ici!' "e las
situacio'es e' 6ue es a"$i'istra"o %or u' e$%lea"o alguie' 6ue 5ue co'trata"o "es%u-s
"e ellos. Gtra situaci!' co$<' es la autori0aci!' I tal 3e0 s!lo los usuarios "e u'a 5u'ci!'
%articular se %ue"e eli$i'ar %ro"uctos o ca$+iar el PrecioUnidad 3alor.
E' este tutorial 3a$os a 3er c!$o ce'trali0ar las reglas "e 'egocio e' u'a ca%a "e l!gica
e$%resarial 8;99: 6ue sir3e co$o i'ter$e"iario e' el i'terca$+io "e "atos e'tre la ca%a "e
%rese'taci!' ) el DA9. E' u'a a%licaci!' real1 el %lo$o e' sa'gre "e+e ser a%lica"o e' u'
%ro)ecto "e +i+liotecas "e clase i'"e%e'"ie'te1 si' e$+argo1 %ara estos tutoriales 3a$os a
i$%le$e'tar el ;99 co$o u'a serie "e clases e' el App_Code car%eta co' el 5i' "e si$%li5icar
la estructura "el %ro)ecto. 9a Eigura 1 ilustra las relacio'es e'tre la ar6uitectura "e la ca%a
"e %rese'taci!'1 ;991 ) DA9.
Figura 1 7l D** separa la capa de presentacin de la capa de acceso a datos e
i#pone reglas de negocio
Paso 1: Creacin de las clases D**
Nuestra ;99 se co$%o'e "e cuatro clases1 u'a %ara ca"a Ta+leA"a%ter e' el DA91 ca"a u'a
"e estas clases ;99 te'"r. $-to"os %ara recu%erar1 i'sertar1 actuali0ar ) eli$i'ar "e la
Ta+leA"a%ter res%ecti3os e' el DA91 a%lica'"o las reglas "e 'egocio a"ecua"o.
Para se%arar "e 5or$a $.s li$%ia "e la DA9 ) ;99Iclases relacio'a"as1 3a$os a crear "os
su+car%etas e' el App_Code car%eta1 DAL )BLL . Si$%le$e'te haga clic e' el App_Code car%eta
e' el E%lora"or "e solucio'es ) eli#a Nue3a car%eta. Des%u-s "e crear estas "os car%etas1
$o3er el DataSet co' ti%o crea"a e' el %ri$er tutorial e' el DAL su+car%eta.
A co'ti'uaci!'1 cree los cuatro archi3os "e clase e' el ;99 BLL su+car%eta. Para lograr esto1
haga clic e' el BLL su+car%eta1 seleccio'e Agregar 'ue3o ele$e'to1 ) eli#a la %la'tilla "e la
Clase. No$+re "e las cuatro clases ProductsBLL 1 CategoriesBLL 1 SuppliersBLL )EmployeesBLL .
Figura + .5adir cuatro nue!as clases a la App_Code Carpeta
A co'ti'uaci!'1 3a$os a agregar $-to"os a ca"a u'a "e las clases %ara e'3ol3er
si$%le$e'te los $-to"os "e5i'i"os %ara la Ta+leA"a%ters "es"e el %ri$er tutorial. Por
ahora1 estos $-to"os s!lo se lla$e "irecta$e'te a la DA91 3a$os a 3ol3er $.s tar"e %ara
agregar la l!gica e$%resarial 'ecesaria.
/ota Si est. utili0a'"o 7isual Stu"io Sta'"ar" E"itio' o su%erior 8es "ecir1 uste"
es no utili0ar 7isual *e+ De3elo%er:1 si lo "esea1 %ue"e "ise=ar sus clases "e 5or$a 3isual
utili0a'"o el Dise=a"or "e clases . Co'sulte el +log "e Dise=a"or "e clases %ara $.s
i'5or$aci!' so+re esta 'ue3a caracterBstica "e 7isual Stu"io.
Para el ProductsBLL clase ha) 6ue a=a"ir u' total "e siete $-to"os(
GetProducts () I "e3uel3e to"os los %ro"uctos
GetProductByProductID ( productID ) I "e3uel3e el %ro"ucto co' el &D "e %ro"ucto
es%eci5ica"o
GetProductsByCategoryID ( IdCategora ) I "e3uel3e to"os los %ro"uctos "e la
categorBa i'"ica"a
GetProductsBySupplier ( supplierID ) I "e3uel3e to"os los %ro"uctos "es"e el
%ro3ee"or es%eci5ica"o
AddProduct ( productName, supplierID, categoryID, CantidadPorUnidad, precioUnitario,
UnitsInStock, UnidadesnPedido, reorder!e"el, suspendido ) I se i'serta u' 'ue3o
%ro"ucto e' la +ase "e "atos co' los 3alores %asa"os e'T "e3uel3e el ProductID 3alor
"el registro reci-' i'serta"o
UpdateProduct ( productName, supplierID, categoryID, CantidadPorUnidad,
precioUnitario, UnitsInStock, UnidadesnPedido, reorder!e"el, suspendido,
ProductID ) I actuali0acio'es "e u' %ro"ucto )a eiste'te e' la +ase "e "atos co' los
3alores %asa"os e'1 "e3uel3e verdadero si1 %recisa$e'te1 u'a 5ila se ha
actuali0a"o1 falso "e lo co'trario
DeleteProduct ( productID ) I eli$i'a el %ro"ucto es%eci5ica"o a %artir "e la +ase "e
"atos
ProductsD**cs
using System;
using System.Data;
utilizando System.Configuration;
using System.Web;
using System.Web.Security;
utilizando System.Web.UI;
utilizando System.Web.UI.WebControls;
utilizando System.Web.UI.WebControls.WebParts;
utilizando System.Web.UI.HtmlControls;
utilizando NorthwindTableAdapters;
[System.ComponentModel.DataObject]
pblica ProductsBLL clase
{
privado ProductsTableAdapter _productsAdapter = null;
ProductsTableAdapter adaptador protegidos
{
get {
if (_productsAdapter == null)
_productsAdapter = new ProductsTableAdapter ();
volver _productsAdapter;
}
}
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, true)]
pblica GetProducts Northwind.ProductsDataTable ()
{
Adapter.GetProducts retorno ();
}
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
pblica Northwind.ProductsDataTable GetProductByProductID (int ProductID)
{
volver Adapter.GetProductByProductID (ProductID);
}
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
pblica Northwind.ProductsDataTable GetProductsByCategoryID (int categoryID)
{
volver Adapter.GetProductsByCategoryID (IdCategora);
}
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
pblica Northwind.ProductsDataTable GetProductsBySupplierID (int supplierID)
{
volver Adapter.GetProductsBySupplierID (supplierID);
}
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Insert, true)]
pblica AddProduct bool (productName cadena, int? supplierID, int? IdCategora,
CantidadPorUnidad cadena,
decimal? precioUnitario, corto? UnitsInStock, corto?
UnidadesEnPedido, corto? reorderLevel,
bool suspendido)
{
/ / Se crea una instancia nueva ProductRow
Productos Northwind.ProductsDataTable = new Northwind.ProductsDataTable ();
Northwind.ProductsRow producto = products.NewProductsRow ();
product.ProductName = productName;
if (supplierID == null) product.SetSupplierIDNull (); ms product.SupplierID =
supplierID.Value;
if (IdCategora == null) product.SetCategoryIDNull (); ms product.CategoryID =
categoryID.Value;
if (CantidadPorUnidad == null) product.SetQuantityPerUnitNull (); ms
product.QuantityPerUnit CantidadPorUnidad =;
if (precioUnitario == null) product.SetUnitPriceNull (); ms product.UnitPrice =
unitPrice.Value;
if (UnitsInStock == null) product.SetUnitsInStockNull (); ms product.UnitsInStock
= unitsInStock.Value;
if (UnidadesEnPedido == null) product.SetUnitsOnOrderNull (); ms
product.UnitsOnOrder = unitsOnOrder.Value;
if (reorderLevel == null) product.SetReorderLevelNull (); ms product.ReorderLevel
= reorderLevel.Value;
product.Discontinued = interrumpidas;
/ / Aadir el nuevo producto
products.AddProductsRow (producto);
int = rowsAffected Adapter.Update (productos);
/ / Devuelve verdadero si, precisamente, una fila se inserta, de lo contrario
falso
volver rowsAffected == 1;
}
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Update, true)]
pblica UpdateProduct bool (productName cadena, int? supplierID, int? IdCategora,
CantidadPorUnidad cadena,
decimal? precioUnitario, corto? UnitsInStock, corto?
UnidadesEnPedido, corto? reorderLevel,
bool interrumpido, int ProductID)
{
Productos Northwind.ProductsDataTable = Adapter.GetProductByProductID (ProductID);
if (products.Count == 0)
/ / Ningn registro coincidente, devuelva falso
return false;
Northwind.ProductsRow producto = productos [0];
product.ProductName = productName;
if (supplierID == null) product.SetSupplierIDNull (); ms product.SupplierID =
supplierID.Value;
if (IdCategora == null) product.SetCategoryIDNull (); ms product.CategoryID =
categoryID.Value;
if (CantidadPorUnidad == null) product.SetQuantityPerUnitNull (); ms
product.QuantityPerUnit CantidadPorUnidad =;
if (precioUnitario == null) product.SetUnitPriceNull (); ms product.UnitPrice =
unitPrice.Value;
if (UnitsInStock == null) product.SetUnitsInStockNull (); ms product.UnitsInStock
= unitsInStock.Value;
if (UnidadesEnPedido == null) product.SetUnitsOnOrderNull (); ms
product.UnitsOnOrder = unitsOnOrder.Value;
if (reorderLevel == null) product.SetReorderLevelNull (); ms product.ReorderLevel
= reorderLevel.Value;
product.Discontinued = interrumpidas;
/ / Actualizar el registro del producto
int = rowsAffected Adapter.Update (producto);
/ / Devuelve verdadero si, precisamente, una fila se ha actualizado, si no falsa
volver rowsAffected == 1;
}
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Delete, true)]
pblica DeleteProduct bool (int ProductID)
{
int = rowsAffected Adapter.Delete (ProductID);
/ / Devuelve verdadero si, precisamente, una fila se ha eliminado, false en caso
contrario
volver rowsAffected == 1;
}
}
9os $-to"os 6ue "e3uel3a los "atos
I GetProducts 1 GetProductByProductID 1 GetProductsByCategoryID )GetProductBySuppliersID I es
+asta'te se'cillo )a 6ue +asta co' lla$ar hacia a+a#o e' el DA9. Mie'tras 6ue e' algu'os
casos %ue"e ha+er reglas "e 'egocio 6ue "e+e' a%licarse a este 'i3el 8%or e#e$%lo1 las
reglas "e autori0aci!' +asa"o e' el usuario actual$e'te co'ecta"o o el %a%el al 6ue
%erte'ece el usuario:1 si$%le$e'te a "e#ar estos $-to"os co$o est.. Para estos $-to"os1
e'to'ces1 el %lo$o e' sa'gre sir3e sola$e'te co$o u' %ro) a tra3-s "el cual la ca%a "e
%rese'taci!' acce"e a los "atos su+)ace'tes "e la ca%a "e acceso a "atos.
El AddProduct ) UpdateProduct $-to"os ta'to to$ar co$o %ar.$etros los 3alores "e los
ca$%os "e %ro"ucto ) a=a"ir u' 'ue3o %ro"ucto o actuali0aci!' "e u'o )a eiste'te1
res%ecti3a$e'te. Co$o $uchos "e los productos colu$'as "e la ta+la se %ue"e
ace%tarNULL 3alores 8 CategoryID 1 IdProveedor ) Precio por unidad 1 %or 'o$+rar algu'os:1
los %ar.$etros "e e'tra"a %ara AddProduct )UpdateProduct 6ue se asig'a' a tales colu$'as
usa' el uso "e ti%os a'ula+les . 9os ti%os a'ula+les so' 'ue3os. NET 2.0 ) %ro%orcio'ar u'a
t-c'ica %ara i'"icar si u' ti%o "e 3alor 6ue1 e' ca$+io1 ser nula . E' C # se %ue"e $arcar
u' ti%o "e 3alor co$o u' ti%o a'ula+le a=a"ie'"o ? "es%u-s "e 6ue el ti%o 8%or
e#e$%lo1 int x,? :. Se re5iere' a la ti%os a'ula+les secci!' e' la DuBa "e %rogra$aci!' "e C
# %ara $.s i'5or$aci!'.
9os tres $-to"os "e3uel3e' u' 3alor +oolea'o 6ue i'"ica si se i'serta u' registro1
actuali0a"o o eli$i'a"o "es"e la o%eraci!' 'o %ue"e resultar e' u'a 5ila a5ecta"a. Por
e#e$%lo1 si el "esarrolla"or "e %.gi'as lla$a"as DeleteProduct %asa'"o u' ProductID "e u'
%ro"ucto 'o eiste1 el DELETE co$u'ica"o e$iti"o a la +ase "e "atos 'o te'"r. 'i'g<'
e5ecto ) %or lo ta'to la DeleteProduct $-to"o "e3ol3er. falso .
Te'ga e' cue'ta 6ue cua'"o se a=a"e u' 'ue3o %ro"ucto o actuali0aci!' "e u'o )a
eiste'te 6ue to$a$os e' los 3alores "e ca$%o "el 'ue3o %ro"ucto o $o"i5icar co$o u'a
lista "e los escalares e' lugar "e ace%tar u' ProductsRow e#e$%lo. Este e'5o6ue 5ue
escogi"o "e+i"o a 6ue el ProductsRow clase se "eri3a "e la ADG.NET DataRow "e clase1 6ue
'o tie'e u' co'structor %re"eter$i'a"o si' %ar.$etros. Co' el 5i' "e crear u'
'ue3o ProductsRow e#e$%lo1 %ri$ero "e+e crear u'a ProductsDataTable i'sta'cia ) luego
lla$ar a su NewProductRow () $-to"o 86ue hace$os e' AddProduct :. Esta care'cia se le3a'ta
la ca+e0a cua'"o 'os re5eri$os a la i'serci!' ) actuali0aci!' "e los %ro"uctos utili0a'"o el
G+#ectDataSource. E' resu$e'1 el G+#ectDataSource i'te'ta crear u'a i'sta'cia "e los
%ar.$etros "e e'tra"a. Si el $-to"o ;99 es%era u' ProductsRow e#e$%lo1 el
G+#ectDataSource a tratar "e crear u'o1 %ero 'o "e+i"o a la 5alta "e u' co'structor si'
%ar.$etros %or "e5ecto. Para $.s i'5or$aci!' so+re este %ro+le$a1 co'sulte los siguie'tes
cargos "os ASP.NET Eoros( G+#ectDataSources Actuali0aci!' co' co'#u'tos "e "atos co'
ti%os ) %ro+le$a co' G+#ectDataSource ) DataSet co' ti%os "eclara"os .
A co'ti'uaci!'1 e' ta'to AddProduct ) UpdateProduct 1 el c!"igo crea
u'a ProductsRow e#e$%lo1 6ue se lle'a co' los 3alores aca+a "e %asar %ulg Al asig'ar
3alores a DataColu$' "e u'a DataRo4 "i5ere'tes so+re el terre'o las co$%ro+acio'es "e
3ali"aci!' %ue"e ocurrir. Por lo ta'to1 "e 5or$a $a'ual %o'ie'"o el %asa"o e' los 3alores
"e 'ue3o e' u'a 5ila "e "atos a)u"a a gara'ti0ar la 3ali"e0 "e los "atos 6ue se %asa al
$-to"o "e %lo$o e' sa'gre. Desgracia"a$e'te las clases DataRo4 i'5lei+le "e ti%os
ge'era"o %or 7isual Stu"io 'o utilice ti%os a'ula+les. Por el co'trario1 %ara i'"icar 6ue u'a
"eter$i'a"a DataColu$' "e u'a DataRo4 "e+e corres%o'"er a u' NULL el 3alor +ase "e
"atos 6ue "e+e utili0ar el Set ColumnName Null () $-to"o.
E' UpdateProduct e' %ri$er lugar "e carga e' el %ro"ucto "e actuali0aci!'
$e"ia'te GetProductByProductID ( productID ) . Si +ie' esto %ue"e %arecer u' 3ia#e
i''ecesario a la +ase "e "atos1 este 3ia#e etra 6ue 3ale la %e'a %ro+ar e' 5uturos
tutoriales 6ue e%lora' la co'curre'cia o%ti$ista. Co'curre'cia o%ti$ista es u'a t-c'ica
%ara asegurarse "e 6ue "os usuarios 6ue est.' tra+a#a'"o si$ult.'ea$e'te e' los $is$os
"atos 'o so+rescri+ir acci"e'tal$e'te los ca$+ios res%ecti3os. Aca%ara$ie'to "e la
totali"a" "el e%e"ie'te ta$+i-' hace $.s 5.cil %ara crear $-to"os "e actuali0aci!' e' el
;99 6ue s!lo $o"i5icar u' su+co'#u'to "e las colu$'as "e DataRo4. Cua'"o e%lora$os
la SuppliersBLL clase 3a$os a 3er u' e#e$%lo.
Por <lti$o1 se=alar 6ue el ProductsBLL clase tie'e el atri+uto DataG+#ect 6ue se le a%lica
8el [System.ComponentModel.DataObject]"erecho "e si'tais a'tes "e la "eclaraci!' "e clase
e' la %arte su%erior "el archi3o: ) los $-to"os tie'e' atri+utos
DataG+#ectMetho"Attri+ute . El DataObject atri+uto $arca la clase co$o u' o+#eto
a"ecua"o %ara la u'i!' a u' co'trol G+#ectDataSource 1 $ie'tras 6ue
el DataObjectMethodAttribute i'"ica el %ro%!sito "el $-to"o. Co$o 3ere$os e' 5uturos
tutoriales1 ASP.NET 2.0 Ms G+#ectDataSource 5acilita la "eclaraci!' "e "atos "e acceso "e
u'a clase. Para a)u"ar a 5iltrar la lista "e %osi+les clases %ara u'irse a la G+#ectDataSource
asiste'te1 %or "e5ecto1 s!lo las clases $arca"as co$o DataObjects se $uestra' e' la lista
"es%lega+le "el asiste'te lista. El ProductsBLL clase 5u'cio'ar. igual "e +ie' si' estos
atri+utos1 %ero a=a"ie'"o 6ue hace 6ue sea $.s 5.cil tra+a#ar co' el asiste'te e' el
G+#ectDataSource.
.gregando las otras Clases
Co' la ProductsBLL clase co$%leta1 to"a3Ba te'e$os 6ue a=a"ir las clases %ara tra+a#ar co'
las categorBas1 %ro3ee"ores ) e$%lea"os.To$e u' $o$e'to %ara crear las siguie'tes
clases ) $-to"os 6ue utili0a' los co'ce%tos e' el e#e$%lo a'terior(
Categories;99.cs
GetCategories ()
GetCategoryByCategoryID ( IdCategora )
Su%%liers;99.cs
GetSuppliers ()
GetSupplierBySupplierID ( supplierID )
GetSuppliersByCountry ( pas )
UpdateSupplierAddress ( supplierID , direcci#n , ciudad , pas )
E$%lo)ees;99.cs
GetEmployees ()
GetEmployeeByEmployeeID ( employeeID )
GetEmployeesByManager ( $anagerID )
El $-to"o 6ue 3ale la %e'a "estacar es
la SuppliersBLL clase UpdateSupplierAddress $-to"o. Este $-to"o %ro%orcio'a u'a i'ter5a0
%ara actuali0ar s!lo i'5or$aci!' "e la "irecci!' "el %ro3ee"or. &'ter'a$e'te1 este $-to"o
se lee e' el SupplierDataRow o+#eto co' el o+#eti3o
es%ecB5ico supplierID 8co' GetSupplierBySupplierID :1 se esta+lece la relaci!' "irecci!'I
%ro%ie"a"es1 ) luego lla$a a a+a#o e' el SupplierDataTable Ms actualizacin
de $-to"o. El UpdateSupplierAddress $-to"o siguie'te(
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Update, true)]
UpdateSupplierAddress pblico bool (int supplierID, direccin de la cadena, la cadena de
la ciudad, el pas de cuerda)
{
Northwind.SuppliersDataTable proveedores = Adapter.GetSupplierBySupplierID
(supplierID);
if (suppliers.Count == 0)
/ / Ningn registro coincidente, devuelva falso
return false;
ms
{
Proveedor Northwind.SuppliersRow = proveedores [0];
if (direccin == null) supplier.SetAddressNull (); ms supplier.Address address =;
if (ciudad == null) supplier.SetCityNull (); ms supplier.City = ciudad;
if (pas == null) supplier.SetCountryNull (); ms supplier.Country pas =;
/ / Actualiza la Direccin relacionados con un proveedor de informacin
int = rowsAffected Adapter.Update (proveedor);
/ / Devuelve verdadero si, precisamente, una fila se ha actualizado, si no falsa
volver rowsAffected == 1;
}
}
Re5i-rase a la "escarga "e este artBculo %ara $i a%licaci!' co$%leta "e las clases ;99.
Paso +: .cceso a los con6untos de datos con tipo a
tra!?s de las clases de D**
E' el %ri$er tutorial he$os 3isto e#e$%los "e c!$o tra+a#ar "irecta$e'te co' el DataSet
$e"ia'te %rogra$aci!'1 %ero co' la a"ici!' "e 'uestras clases ;991 la ca%a "e
%rese'taci!' "e+e' tra+a#ar co'tra la ;99 e' su lugar. E' el AllProducts.aspx e#e$%lo "el
%ri$er tutorial1 el ProductsTableAdapter 5ue utili0a"o %ara o+ligar a la lista "e %ro"uctos a u'
Dri"7ie41 co$o se $uestra e' el siguie'te c!"igo(
ProductsTableAdapter productsAdapter = new ProductsTableAdapter ();
GridView1.DataSource productsAdapter.GetProducts = ();
GridView1.DataBind ();
Para utili0ar las 'ue3as clases ;991 to"o lo 6ue ha) 6ue ca$+iar es la %ri$era lB'ea "e
c!"igo I si$%le$e'te ree$%lace elProductsTableAdapter o+#eto co' u' ProductBLL o+#eto(
Products,LL productLogic - ne+ Products,LL &'.
Grid/ie+0.DataSource productLogic.GetProducts - &'.
Grid/ie+0.Data,ind &'.
9as clases ;99 ta$+i-' se %ue"e acce"er "e 5or$a "eclarati3a 8al igual 6ue el DataSet:
co' el G+#ectDataSource. 7a$os a "iscutir el G+#ectDataSource co' $a)or "etalle e' los
siguie'tes tutoriales.
Figura 1 *a lista de los productos se #uestra en un 9ridVie0
Paso 1: .gregar !alidacin a ni!el de ca#po a las
clases 2ataFo0
A 'i3el "e ca$%o "e 3ali"aci!' se co$%rue+a 6ue se re5iere a los 3alores "e %ro%ie"a" "e
los o+#etos "e 'egocio al i'sertar o actuali0ar. Algu'as reglas "e 3ali"aci!' a 'i3el "e
ca$%o "e los %ro"uctos i'clu)e'(
El ProductName ca$%o "e+e ser "e /0 caracteres o $e'os "e lo'gitu"
El CantidadPorUnidad ca$%o "e+e ser "e 20 caracteres o $e'os "e lo'gitu"
El ProductID 1 ProductName ) descatalogados los ca$%os so' o+ligatorios1 %ero to"os los
"e$.s ca$%os so' o%cio'ales
El Precio por unidad 1 UnitsInStock 1 UnitsOnOrder ) ReorderLevel ca$%os "e+e ser
$a)or 6ue o igual a cero
Estas reglas %ue"e' ) "e+e' ser e%resa"os a 'i3el "e +ase "e "atos. El lB$ite "e
caracteres e' el ProductName ) CantidadPorUnidadca$%os so' ca%tura"os %or los ti%os "e
"atos "e las colu$'as "el Productos "e $esa 8 nvarchar (40) ) nvarchar (20) 1
res%ecti3a$e'te:. Si los ca$%os so' o+ligatorios ) o%cio'ales se e%resa' %or si la
colu$'a "e la ta+la "e +ase "e "atos %er$ite NULLs. Cuatro restriccio'es "e
co$%ro+aci!' "e 6ue eiste gara'ti0ar 6ue s!lo los 3alores $a)ores o iguales a cero se
%ue"e hacer e' elPrecioUnidad 1 UnitsInStock 1 UnitsOnOrder o ReorderLevel colu$'as.
A"e$.s "e a%licar estas reglas e' la +ase "e "atos ta$+i-' "e+erBa a%licarse a 'i3el "e
co'#u'to "e "atos. De hecho1 la lo'gitu" "el ca$%o ) si u' 3alor es 'ecesario u o%cio'al )a
est.' ca%tura"os %ara esta+lecer ca"a DataTa+le "e DataColu$'. Para 3er la eiste'te a
'i3el "e ca$%o "e 3ali"aci!' %ro%orcio'a auto$.tica$e'te1 3a)a al Dise=a"or "e DataSet1
seleccio'e u' ca$%o "e u'a "e las ta+las "e "atos ) luego ir a la 3e'ta'a
Pro%ie"a"es. Co$o $uestra la Eigura / se $uestra la CantidadPorUnidad DataColu$' e'
elProductsDataTable tie'e u'a lo'gitu" $.i$a "e 20 caracteres ) %er$ite NULL 3alores. Si
i'te'ta$os esta+lecer el ProductsDataRow MsCantidadPorUnidad %ro%ie"a" a u' 3alor "e
ca"e'a "e $.s "e 20 caracteres u'a ArgumentException ser. la'0a"a.
Figura 3 7l 2ataColu#n Proporciona b=sica de ca#po de ni!el de !alidacin
Desa5ortu'a"a$e'te1 'o %o"e$os es%eci5icar los co'troles lB$ites1 co$o
el PrecioUnidad 3alor "e+e ser $a)or o igual a cero1 a tra3-s "e la 3e'ta'a Pro%ie"a"es. A
5i' "e %ro%orcio'ar este ti%o "e 3ali"aci!' a 'i3el "e ca$%o 6ue 'ecesita$os %ara crear u'
co'trola"or "e e3e'tos %ara el e3e'to Colu$'Cha'gi'g DataTa+le . Co$o se $e'cio'! e'
el tutorial a'terior1 el co'#u'to "e "atos1 ta+las "e "atos ) o+#etos DataRo4 crea"o %or el
DataSet se %ue"e a$%liar $e"ia'te el uso "e clases %arciales. >tili0a'"o esta t-c'ica
%o"e$os crear u' ColumnChanging co'trola"or "e e3e'tos %ara
el ProductsDataTable clase. Co$ie'ce %or crear u'a clase e' el App_Code car%eta co' el
'o$+re ProductsDataTable.ColumnChanging.cs .
Figura - .gregue una nue!a clase a la App_Code Carpeta
A co'ti'uaci!'1 cree u' co'trola"or "e e3e'tos %ara el ColumnChanging caso "e 6ue asegura
6ue el PrecioUnidad 1 UnitsInStock 1UnitsOnOrder ) ReorderLevel 3alores "e la colu$'a 8si 'o
es NULL : es $a)or o igual a cero. Si cual6uiera "e las colu$'as co$o est. 5uera "e ra'go1
la'0ar u'a ArgumentException .
Products2ataTableColu#nC"angingcs
pblica parcial de la clase Neptuno
{
pblica parcial de la clase ProductsDataTable
{
pblico superior BeginInit vaco ()
{
this.ColumnChanging + = ValidateColumn;
}
vaco ValidateColumn (object sender, DataColumnChangeEventArgs e)
{
if (e.Column.Equals (this.UnitPriceColumn))
{
if (! Convert.IsDBNull (e.ProposedValue) & & (decimal) e.ProposedValue <0)
{
lanzar nuevos ArgumentException ("Precio por unidad no puede ser menor
que cero", "Precio por unidad");
}
}
else if (e.Column.Equals (this.UnitsInStockColumn) | |
e.Column.Equals (this.UnitsOnOrderColumn) | |
e.Column.Equals (this.ReorderLevelColumn))
{
if (! Convert.IsDBNull (e.ProposedValue) & & (corto) e.ProposedValue <0)
{
throw new ArgumentException (String.Format ("{0} no puede ser menor
que cero", e.Column.ColumnName), e.Column.ColumnName);
}
}
}
}
}
Paso 3: .gregar Feglas del /egocio personali%ada a
las clases de la D**
A"e$.s "e la 3ali"aci!' a 'i3el "e ca$%o1 'o %ue"e ser "e alto 'i3el "e reglas "e 'egocio
%erso'ali0a"as 6ue i'3olucra' "i5ere'tes e'ti"a"es o co'ce%tos 6ue 'o %ue"e e%resar e'
el .$+ito "e u'a sola colu$'a1 tales co$o(
Si u' %ro"ucto est. "escataloga"o1 su PrecioUnidad 'o se %ue"e' actuali0ar
PaBs "e u' e$%lea"o "e la resi"e'cia "e+e ser el $is$o %aBs "e su a"$i'istra"or "e
la resi"e'cia
>' %ro"ucto 'o %ue"e ser i'terru$%i"o si es el <'ico %ro"ucto %ro%orcio'a"o %or el
%ro3ee"or
9as clases ;99 "e+e co'te'er co'troles %ara gara'ti0ar el cu$%li$ie'to "e las reglas "e
'egocio "e la a%licaci!'. Estos co'troles se %ue"e' a=a"ir "irecta$e'te a los $-to"os 6ue
se a%lica'.
&$agB'ese 6ue 'uestras reglas "e 'egocio "icta' 6ue u' %ro"ucto 'o %ue"e ser
i'terru$%i"o si $arc! 5ue el <'ico %ro"ucto "e u' %ro3ee"or "eter$i'a"o. Es "ecir1 si el
%ro"ucto X es el <'ico %ro"ucto 6ue co$%ra$os "es"e el %ro3ee"or Y 1 'o %o"rBa
$arcar Xco$o i'terru$%i"as1 si1 si' e$+argo1 el %ro3ee"or Y 'os su$i'istra co' tres
%ro"uctos1 A 1 B ) C 1 e'to'ces se %o"rBa $arcar to"os ) ca"a u'o "e estos1 co$o
sus%e'"i"o. >'a regla "e 'egocio etra=o1 %ero las reglas "e 'egocio ) el se'ti"o co$<'
'o sie$%re est.' ali'ea"osC
Para hacer cu$%lir esta regla "e 'egocio e' el UpdateProducts $-to"o 6ue e$%e0arBa %or
co$%ro+ar si interrumpidas se esta+lece e' verdadero 1 ) si es asB1 6ue 'osotros
lla$a$os GetProductsBySupplierID %ara "eter$i'ar la ca'ti"a" "e %ro"uctos 6ue
co$%ra$os "es"e el %ro3ee"or "e este %ro"ucto. Si u' solo %ro"ucto se co$%ra a este
%ro3ee"or1 la'0a$os u'aApplicationException .
pblica UpdateProduct bool (productName cadena, int? supplierID, int? IdCategora,
CantidadPorUnidad cadena,
decimal? precioUnitario, corto? UnitsInStock, corto?
UnidadesEnPedido, corto? reorderLevel,
bool interrumpido, int ProductID)
{
Productos Northwind.ProductsDataTable = Adapter.GetProductByProductID (ProductID);
if (products.Count == 0)
/ / Ningn registro coincidente, devuelva falso
return false;
Northwind.ProductsRow producto = productos [0];
/ / Comprobacin de reglas de negocio - no puede dejar de un producto que es
suministrado por slo
/ / Un solo proveedor
if (suspendido)
{
/ / Obtener los productos que compramos de este proveedor
Northwind.ProductsDataTable productsBySupplier =
Adapter.GetProductsBySupplierID (product.SupplierID);
if (productsBySupplier.Count == 1)
/ / Este es el nico producto que compramos de este proveedor
throw new ApplicationException ("No se puede marcar un producto como
discontinuado si es el nico producto comprado a un proveedor");
}
product.ProductName = productName;
if (supplierID == null) product.SetSupplierIDNull (); ms product.SupplierID =
supplierID.Value;
if (IdCategora == null) product.SetCategoryIDNull (); ms product.CategoryID =
categoryID.Value;
if (CantidadPorUnidad == null) product.SetQuantityPerUnitNull (); ms
product.QuantityPerUnit CantidadPorUnidad =;
if (precioUnitario == null) product.SetUnitPriceNull (); ms product.UnitPrice =
unitPrice.Value;
if (UnitsInStock == null) product.SetUnitsInStockNull (); ms product.UnitsInStock
= unitsInStock.Value;
if (UnidadesEnPedido == null) product.SetUnitsOnOrderNull (); ms
product.UnitsOnOrder = unitsOnOrder.Value;
if (reorderLevel == null) product.SetReorderLevelNull (); ms product.ReorderLevel
= reorderLevel.Value;
product.Discontinued = interrumpidas;
/ / Actualizar el registro del producto
int = rowsAffected Adapter.Update (producto);
/ / Devuelve verdadero si, precisamente, una fila se ha actualizado, si no falsa
volver rowsAffected == 1;
}
Fesponder a errores de !alidacin en la capa de presentacin
Al lla$ar a la ;99 "e la ca%a "e %rese'taci!' 6ue %ue"e "eci"ir si se "e+e i'te'tar $a'e#ar
las ece%cio'es 6ue %ue"a' su+ir o "e#ar 6ue ellos su+e' a ASP.NET 8lo 6ue ele3ar.
el HttpApplication Ms error "el e3e'to:. Para co'trolar u'a ece%ci!' cua'"o se tra+a#a co'
el %lo$o e' sa'gre $e"ia'te %rogra$aci!'1 %o"e$os utili0ar u' Tr) ... Catch +lo6ue1 co$o
$uestra el siguie'te e#e$%lo(
ProductsBLL productLogic = new ProductsBLL ();
Informacin / / Actualizar ProductID 1 de
tratar de
{
/ / Esto no ya que estamos tratando de utilizar un
/ / Precio por unidad menor que el valor 0.
productLogic.UpdateProduct ("Scott t", 1, 1, null,-14m, 10, null, null, false, 1);
}
catch (ArgumentException ae)
{
Response.Write ("Hubo un problema:" + ae.Message);
}
Co$o 3ere$os e' 5uturos tutoriales1 co'trol "e ece%cio'es 6ue +rota' "e la ;99 al utili0ar
u' co'trol *e+ "e "atos %ara i'sertar1 actuali0ar o eli$i'ar "atos %ue"e' ser $a'i%ula"os
"irecta$e'te e' u' co'trola"or "e e3e'tos e' lugar "e te'er 6ue e'3ol3er el c!"igo
"e prueba .. . capturar +lo6ues.
Fesu#en
>'a a%licaci!' +ie' "ise=a"a se hace a $a'o e' "isti'tas ca%as1 ca"a u'a "e ellas e'cierra
u' %a%el %articular. E' el %ri$er tutorial "e esta serie "e artBculos 6ue he$os crea"o u'a
ca%a "e acceso "e "atos utili0a'"o co'#u'tos "e "atos co' ti%o1 e' este tutorial he$os
co'strui"o u'a ca%a "e l!gica "e 'egocios co$o u'a serie "e clases "e 'uestra
a%licaci!' App_Code car%eta 6ue hacer "esce'"er a 'uestro DA9. El ;99 i$%le$e'ta el
terre'o ) "e 'egocios a 'i3el "e la l!gica "e 'uestra a%licaci!'. A"e$.s "e la creaci!' "e
u' ;99 se%ara"o1 co$o lo hici$os e' este tutorial1 otra o%ci!' es ete'"er los $-to"os "e
los Ta+leA"a%ters H$e"ia'te el uso "e clases %arciales. Si' e$+argo1 esta t-c'ica 'o 'os
%er$ite ree$%la0ar los $-to"os eiste'tes 'i se%arar 'uestra DA9 ) ;99 'uestra ta'
li$%ia$e'te co$o el e'5o6ue 6ue he$os to$a"o e' este artBculo.
Co' la co$%leta DA9 ) ;991 esta$os listos %ara e$%e0ar e' 'uestra ca%a "e
%rese'taci!'. E' el siguie'te tutorial 3a$os a to$ar u' %e6ue=o "es3Bo a %artir "e te$as
"e acceso a los "atos ) "e5i'ir u' "ise=o "e %.gi'a cohere'te %ara su uso a tra3-s "e los
tutoriales.
Progra$aci!' 5eli0C
Tutorial 1: P=ginas principales y na!egacin
de sitios
Gunio de +,,8
Pu+lica"o( 22 "e Se%tie$+re "e 2006
Scott Mitchell
Descargar el c!"igo "e e#e$%lo ASPNET_Data_Tutorial_,_CS.ee.
E' esta %.gi'a
&'tro"ucci!'
Paso 1( Creaci!' "e la %.gi'a %ri'ci%al
Paso 2( A"ici!' "e u'a %.gi'a "e i'icio al sitio 4e+
Paso 2( Creaci!' "e u' $a%a "el sitio
Paso ,( 7isuali0aci!' "e u' $e'< seg<' el $a%a "el sitio
Paso /( A"ici!' "e ele$e'tos "e 'a3egaci!' ti%o +rea"cru$+
Paso 2( A"ici!' "e la %.gi'a %re"eter$i'a"a "e ca"a secci!'
Resu$e'
Acerca "el autor
Introduccin
>'a caracterBstica co$<' "e los sitios 4e+ orie'ta"os al usuario es la %rese'cia "e u'
"ise=o "e %.gi'a l!gico %ara to"o el sitio ) "e u' es6ue$a "e 'a3egaci!'. ASP.NET 2.0
%rese'ta "os caracterBsticas 'ue3as 6ue 5acilita' 'ota+le$e'te la creaci!' "e u' "ise=o "e
%.gi'a "e to"o el sitio ) "e u' es6ue$a "e 'a3egaci!'( %.gi'as %ri'ci%ales ) 'a3egaci!'
"e sitios. 9as %.gi'as %ri'ci%ales %er$ite' a los "esarrolla"ores crear u'a %la'tilla %ara
to"o el sitio co' regio'es co'5igura"as %ara la e"ici!'. Esta %la'tilla se %ue"e a%licar
%osterior$e'te a las %.gi'as ASP.NET "el sitio. E' "ichas %.gi'as s!lo es 'ecesario
%ro%orcio'ar el co'te'i"o "e las regio'es 6ue se %ue"e' e"itar "e las %.gi'as %ri'ci%alesT
las "e$.s $arcas "e la %.gi'a %ri'ci%al so' i"-'ticas %ara el resto "e %.gi'as ASP.NET
6ue usa' "icha %.gi'a. Este $o"elo %er$ite a los "esarrolla"ores "e5i'ir ) u'i5icar u'
"ise=o "e %.gi'a "e to"o el sitio1 "e $o"o 6ue 5acilita la creaci!' "e u' as%ecto cohere'te
) gara'ti0a 6ue to"as las %.gi'as se %ue"e' actuali0ar "e u'a 5or$a se'cilla.
El siste$a "e 'a3egaci!' "e sitios o5rece a los "esarrolla"ores "e %.gi'as u' $eca'is$o
%ara "e5i'ir u' $a%a "el sitio ) u'a AP& %ara "icho $a%a 6ue se "e+e co'sultar $e"ia'te
%rogra$aci!'. 9os 'ue3os co'troles 4e+ "e 'a3egaci!' 8Me'u1 Tree7ie4 ) SiteMa%Path:
5acilita' la tra's5or$aci!' total o %arcial "el $a%a "el sitio e' u' ele$e'to "e 'a3egaci!'
"e la i'ter5a0 "e usuario co$<'. 7a$os a usar el %ro3ee"or "e 'a3egaci!' "e sitios
%re"eter$i'a"o1 lo 6ue sig'i5ica 6ue 'uestro $a%a "el sitio estar. "e5i'i"o e' u' archi3o
co' 5or$ato OM9.
Para ilustrar estos co'ce%tos ) co'seguir 6ue 'uestros sitios 4e+ "e tutoriales se utilice'
$.s1 "ura'te esta lecci!' 3a$os a "e5i'ir u' "ise=o "e %.gi'a %ara to"o el sitio1
i$%le$e'tar u' $a%a "el sitio ) agregar la i'ter5a0 "e usuario "e 'a3egaci!'. Cua'"o
ter$i'e$os este tutorial ha+re$os a%re'"i"o u' "ise=o "e sitio 4e+ %er5eccio'a"o %ara
co'struir las %.gi'as 4e+ "el tutorial.
Figura 1. Resultado final del tutorial
Pri'ci%io "e la %.gi'a
Paso 1: Creacin de la p=gina principal
El %ri$er %aso co'siste e' la creaci!' "e la %.gi'a %ri'ci%al "el sitio. E' estos $o$e'tos
este sitio 4e+ est. 5or$a"o <'ica$e'te %or DataSet co' ti%o 8North4i'".s" e' la car%eta
A%%_Co"e:1 clases ;99 8Pro"ucts;99.cs1 Categories;99.cs1 etc. e' la car%eta A%%_Co"e:1 la
+ase "e "atos 8NGRTH*ND.MDE e' la car%eta A%%_Data:1 el archi3o "e co'5iguraci!'
8*e+.co'5ig: ) el archi3o "e la ho#a "e estilo CSS 8St)les.css:. 7aci- las %.gi'as ) archi3os
6ue $ostra+a' el uso "e DA9 ) ;99 e' los "os %ri$eros tutoriales %or6ue a'ali0are$os
esos e#e$%los co' $.s "etalle e' %r!i$os tutoriales.
Figura 2. Archivos del ro!ecto
Para crear u'a %.gi'a %ri'ci%al1 haga clic co' el +ot!' secu'"ario e' el 'o$+re "el
%ro)ecto e' el E%lora"or "e solucio'es ) seleccio'e Agregar 'ue3o ele$e'to. A
co'ti'uaci!'1 seleccio'e el ti%o "e %.gi'a %ri'ci%al "e la lista "e %la'tillas ) "e'o$B'ela
Site.$aster.
Figura ". Adici#n de una $gina rincial nueva al sitio %eb
A6uB se "e5i'e el "ise=o "e %.gi'a %ara to"o el sitio1 e' la %.gi'a %ri'ci%al. Pue"e usar la
3ista Dise=o ) agregar to"os los co'troles 4e+ o "e "ise=o 6ue 'ecesite1 o +ie' %ue"e
agregar las $arcas $a'ual$e'te e' la 3ista C!"igo 5ue'te. E' $i %.gi'a %ri'ci%al
usoho#as "e estilo e' casca"a %ara "e5i'ir las %osicio'es ) estilos co' co'5iguraci!' CSS
"e5i'i"os e' el archi3o eter'o St)le.css. Mie'tras 6ue 'o es %osi+le "e"ucirlo "el $arca"o
$ostra"o a co'ti'uaci!'1 las reglas CSS se "e5i'e' "e tal 5or$a 6ue el co'te'i"o "e
'a3egaci!' "e U"i3V se %rese'te e' %osicio'a$ie'to a+soluto %ara 6ue a%are0ca a la
i06uier"a ) te'ga u'a %ro5u'"i"a" 5i#a "e 200 %Beles.
(ite#aster
<%@ Master Language="C#" AutoEventWireup="true"
CodeFile="Site.master.cs" Inherits="Site" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Working with Data Tutorials</title>
<link href="Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrapper">
<form id="form1" runat="server">

<div id="header">
<span class="title">Working with Data Tutorials</span>
<span class="breadcrumb">TODO: Breadcrumb will go here...</span>
</div>

<div id="content">
<asp:contentplaceholder id="MainContent" runat="server">
<!-- Page-specific content will go here... -->
</asp:contentplaceholder>
</div>

<div id="navigation">
TODO: Menu will go here...
</div>
</form>
</div>
</body>
</html>
>'a %.gi'a %ri'ci%al "e5i'e el "ise=o "e %.gi'a est.tica ) las regio'es 6ue se %ue"e'
e"itar $e"ia'te las %.gi'as ASP.NET 6ue usa' la %.gi'a %ri'ci%al. El co'trol
Co'te'tPlaceHol"er1 6ue se %ue"e 3er "e'tro "el co'te'i"o "e U"i3V1 $arca estas
regio'es co' co'te'i"o 6ue se %ue"e e"itar. Esta %.gi'a %ri'ci%al tie'e s!lo u'
Co'te'tPlaceHol"er 8Mai'Co'te't:1 %ero las %.gi'as %ri'ci%ales %ue"e' te'er 3arios
Co'te'tPlaceHol"ers.
Al ca$+iar a la 3ista Dise=o co' el $arca"o a'terior1 se 3isuali0a el "ise=o "e la %.gi'a
%ri'ci%al. To"as las %.gi'as ASP.NET 6ue usa' esta %.gi'a %ri'ci%al te'"r.' este "ise=o
u'i5or$e ) la %osi+ili"a" "e es%eci5icar el $arca"o %ara la regi!' Mai'Co'te't
Figura &. '$gina rincial en la vista (ise)o
Pri'ci%io "e la %.gi'a
Paso +: .dicin de una p=gina de inicio al sitio 0eb
>'a 3e0 6ue he$os "e5i'i"o la %.gi'a %ri'ci%al1 esta$os listos %ara agregar %.gi'as
ASP.NET al sitio 4e+. E$%ece$os %or agregar De5ault.as% a la %.gi'a "e i'icio "el sitio
4e+. Haga clic co' el +ot!' secu'"ario e' el 'o$+re "el %ro)ecto e' el E%lora"or "e
solucio'es ) seleccio'e Agregar 'ue3o ele$e'to. Eli#a la o%ci!' Eor$ulario 4e+ "e la lista
"e %la'tillas ) "e'o$i'e el archi3o De5ault.as%. Ta$+i-' "e+e acti3ar la casilla "e
3eri5icaci!' HSeleccio'ar la %.gi'a %ri'ci%alH.
Figura *. Adici#n de formulario %eb nuevo+ activaci#n de la casilla de verificaci#n
,-eleccionar la $gina rincial,
Des%u-s "e hacer clic e' el +ot!' Ace%tar1 se 'os %i"e 6ue seleccio'e$os la %.gi'a
%ri'ci%al 6ue "e+e usar esta %.gi'a ASP.NET 'ue3a. Es %osi+le te'er 3arias %.gi'as
%ri'ci%ales e' u' %ro)ecto1 au'6ue ahora te'ga$os s!lo u'a.
Figura .. -elecci#n de la $gina rincial /ue debe usar la $gina A-'.012
Des%u-s "e elegir la %.gi'a %ri'ci%al1 las %.gi'as ASP.NET 'ue3as %rese'tar.' el $arca"o
siguie'te(
2e'aultaspx
<%@ Page Language="C#" MasterPageFile="~/Site.master"
AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"
Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent"
Runat="Server">
</asp:Content>
E' la "irecti3a NPage se hace re5ere'cia al archi3o "e la %.gi'a %ri'ci%al usa"o
8MasterPageEileWHXASite.$asterH: ) el $arca"o "e las %.gi'as ASP.NET co'tie'e u' co'trol
Co'te't %ara to"os los co'troles Co'te'tPlaceHol"er "e5i'i"os e' la %.gi'a %ri'ci%al1 co'
los Co'te'tPlaceHol"er&D "el co'trol asig'a"os al co'trol Co'te't %ara u'
Co'te'tPlaceHol"er es%ecB5ico. El co'trol Co'te't es "o'"e se coloca la $arca 6ue 6uiere
6ue a%are0ca e' el Co'te'tPlaceHol"er corres%o'"ie'te. Esta+le0ca el atri+uto Title "e la
"irecti3a NPage e' &'icio ) escri+a alg<' co'te'i"o "e +ie'3e'i"a e' el co'trol Co'te't(
2e'aultaspx
<%@ Page Language="C#" MasterPageFile="~/Site.master"
AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"
Title="Home" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent"
Runat="Server">
<h1>Welcome to the Working with Data Tutorial Site</h1>
<p>This site is being built as part of a set of tutorials that illustrate some of the
new data access and databinding features in ASP.NET 2.0 and Visual Web
Developer.</p>
<p>Over time, it will include a host of samples that demonstrate:</p>

<ul>
<li>Building a DAL (data access layer),</li>
<li>Using strongly typed TableAdapters and DataTables</li>
<li>Master-Detail reports</li>
<li>Filtering</li>
<li>Paging,</li>
<li>Two-way databinding,</li>
<li>Editing,</li>
<li>Deleting,</li>
<li>Inserting,</li>
<li>Hierarchical data browsing,</li>
<li>Hierarchical drill-down,</li>
<li>Optimistic concurrency,</li>
<li>And more!</li>
</ul>
</asp:Content>
El atri+uto Title "e la "irecti3a NPage 'os %er$ite i'"icar el tBtulo "e la %.gi'a "es"e la
%.gi'a ASP.NET1 au'6ue el ele$e'to UtitleV 'o est- "e5i'i"o e' la %.gi'a %ri'ci%al.
Ta$+i-' %o"e$os "e5i'ir el tBtulo $e"ia'te %rogra$aci!' utili0a'"o Page.Title. G+ser3e
ta$+i-' 6ue las re5ere'cias "e %.gi'as %ri'ci%ales a ho#as "e estilo 8co$o St)le.css: se
actuali0a' auto$.tica$e'te %ara 6ue 5u'cio'e' e' to"as las %.gi'as ASP.NET1
i'"e%e'"ie'te$e'te "el "irectorio "e la %.gi'a %ri'ci%al "o'"e se u+ica la %.gi'a
ASP.NET.
Si ca$+ia$os a la 3ista Dise=o1 %o"e$os 3isuali0ar c!$o se 3erBa 'uestra %.gi'a e' u'
e%lora"or. Te'ga e' cue'ta 6ue e' la 3ista Dise=o "e la %.gi'a ASP.NET s!lo se %ue"e
e"itar el co'te'i"o "e las regio'es co'5igura"as %ara elloT la $arca 'o'I
Co'te'tPlaceHol"er "e5i'i"a e' la %.gi'a %ri'ci%al a%arece e' gris.
Figura 3. 4a vista (ise)o de la $gina A-'.012 muestra las regiones /ue se ueden ! no se
ueden editar
Cua'"o u' e%lora"or 3isita u'a %.gi'a De5ault.as%1 el $otor ASP.NET co$+i'a
auto$.tica$e'te el co'te'i"o "e %.gi'a "e la %.gi'a %ri'ci%al ) el co'te'i"o "e ASP.NET )
re%rese'ta el co'te'i"o co$+i'a"o e' el 5or$ato HTM9 5i'al 6ue se e'3Ba al e%lora"or
solicita'te. Cua'"o se actuali0a el co'te'i"o "e la %.gi'a %ri'ci%al1 to"as las %.gi'as
ASP.NET 6ue usa' esta %.gi'a %ri'ci%al 3uel3e' a co$+i'ar su co'te'i"o co' el co'te'i"o
'ue3o "e la %.gi'a %ri'ci%al la %r!i$a 3e0 6ue se %ro"u0ca u'a solicitu". E' resu$e'1 el
$o"elo "e %.gi'a %ri'ci%al %er$ite "e5i'ir u'a <'ica %la'tilla "e "ise=o "e %.gi'a 8%.gi'a
%ri'ci%al: cu)os ca$+ios se re5le#ar.' "e 5or$a i'$e"iata e' to"o el sitio.
.dicin de p=ginas .(P/7T adicionales al sitio 0eb
7a$os a "e"icar u'os segu'"os a agregar c!"igos auiliares "e %.gi'as ASP.NET al sitio
6ue co'te'"r. 5i'al$e'te las "i5ere'tes "e$ostracio'es "e i'5or$es. Eistir.' $.s "e ,2
"e$ostracio'es e' total1 "e $o"o 6ue es %re5eri+le crear s!lo las %ri$eras %.gi'as co'
c!"igos auiliares ) 'o to"as. Puesto 6ue ta$+i-' ha+r. $uchas categorBas "e
"e$ostracio'es1 agregue u'a car%eta %ara las categorBas co' el 5i' "e a"$i'istrarlas
$e#or. De $o$e'to1 agregue las tres car%etas siguie'tes(
;asicRe%orti'g
Eilteri'g
Custo$Eor$atti'g
Por <lti$o1 agregue archi3os 'ue3os co$o se $uestra e' el E%lora"or "e solucio'es "e la
5igura P. Acu-r"ese "e acti3ar la casilla "e 3eri5icaci!' HSeleccio'ar la %.gi'a %ri'ci%alH
"es%u-s "e agregar ca"a archi3o.
Figura 5. Adici#n de los archivos siguientes
Pri'ci%io "e la %.gi'a
Paso +: Creacin de un #apa del sitio
>'a "e las $a)ores "i5iculta"es "e a"$i'istrar u' sitio 4e+ 5or$a"o %or $.s "e u'as
cua'tas %.gi'as es %o"er o5recer a los 3isita'tes u'a 5or$a "irecta "e 'a3egar %or el sitio.
De+e$os e$%e0ar %or co$%ro+ar 6ue la estructura "e 'a3egaci!' "el sitio est. "e5i'i"a. A
co'ti'uaci!'1 "icha estructura "e+e estar tra"uci"a a ele$e'tos "e 'a3egaci!' "e la
i'ter5a0 "e usuario1 co$o $e'<s o ele$e'tos ti%o +rea"cru$+. Por <lti$o1 to"o este
%roceso se "e+e $a'te'er ) actuali0ar $e"ia'te la a"ici!' "e %.gi'a 'ue3as al sitio ) la
eli$i'aci!' "e otras eiste'tes. A'tes "e la creaci!' "e ASP.NET 2.01 los "esarrolla"ores se
e'co'tra+a' solos a'te la creaci!' "e la estructura "e 'a3egaci!' "e u' sitio1 su
$a'te'i$ie'to ) la tra"ucci!' "e la $is$a a ele$e'tos "e 'a3egaci!' "e la i'ter5a0 "e
usuario. Si' e$+argo1 gracias a ASP.NET 2.0 los "esarrolla"ores %ue"e' utili0ar el siste$a
"e 'a3egaci!' "e sitios i'tegra"o1 6ue o5rece u'a gra' 5lei+ili"a".
El siste$a "e 'a3egaci!' "e sitios "e ASP.NET 2.0 o5rece a los "esarrolla"ores u' $e"io
%ara "e5i'ir u' $a%a "el sitio ) %osterior$e'te te'er acceso a esta i'5or$aci!' a tra3-s "e
u'a AP& "e %rogra$aci!'. ASP.NET i'clu)e u' %ro3ee"or "e $a%as "el sitio 6ue asu$e 6ue
los "atos "el $a%a se al$ace'ar.' e' u' archi3o OM9 5or$atea"o "e u'a 5or$a co'creta.
Si' e$+argo1 %uesto 6ue el siste$a "e 'a3egaci!' "e sitios 3ie'e i'tegra"o e' el $o"elo
"e %ro3ee"or1 se %ue"e a$%liar %ara 6ue sea co$%ati+le co' otras 5or$as "e seriali0aci!'
"e la i'5or$aci!' "el $a%a "el sitio. El artBculo "e Ye55 Prosise1 The S@9 Site Ma% Pro3i"er
LouM3e ;ee' *aiti'g Eor 8%ue"e estar e' i'gl-s: e%lica co$o crear u' %ro3ee"or "el $a%a
"el sitio 6ue al$ace'e el $a%a e' u'a +ase "e "atos "e S@9 Ser3erT otra o%ci!' es
crear u' %ro3ee"or "el $a%a "el sitio a %artir "e la estructura "el siste$a "e archi3os.
No o+sta'te1 e' este tutorial 3a$os a usar el %ro3ee"or "e $a%as "el sitio %re"eter$i'a"o
6ue se i'clu)e co' ASP.NET 2.0. Para crear el $a%a "el sitio1 haga clic co' el +ot!'
secu'"ario e' el 'o$+re "el %ro)ecto e' el E%lora"or "e solucio'es ) seleccio'e Agregar
'ue3o ele$e'to. Ma'te'ga el 'o$+re *e+.site$a% ) haga clic e' el +ot!' Agregar
Figura 6. Adici#n de un maa del sitio al ro!ecto
El archi3o "el $a%a "el sitio est. e' 5or$ato OM9. Te'ga e' cue'ta 6ue 7isual Stu"io
i'clu)e &'telliSe'se %ara la estructura "el $a%a "el sitio. El archi3o "el $a%a "el sitio "e+e
te'er el 'o"o UsiteMa%V co$o 'o"o raB01 6ue "e+e co'te'er eacta$e'te u' ele$e'to
secu'"ario UsiteMa%No"eV. Ese %ri$er ele$e'to UsiteMa%No"eV %ue"e1 a su 3e01
co'te'er u' '<$ero i'"eter$i'a"o "e ele$e'tos UsiteMa%No"eV "esce'"ie'tes.
De5i'a el $a%a "el sitio e' 5u'ci!' "e la estructura "el siste$a "e archi3os. Es "ecir1
agregue u' ele$e'to UsiteMa%No"eV %ara ca"a u'a "e las tres car%etas ) ele$e'tos
secu'"arios UsiteMa%No"eV %ara ca"a u'a "e las %.gi'as ASP.NET co'te'i"as e' "ichas
car%etas1 co$o se $uestra a co'ti'uaci!'(
Website#ap:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/Default.aspx" title="Home" description="Home">
<siteMapNode title="Basic Reporting" url="~/BasicReporting/Default.aspx"
description="Basic Reporting Samples">
<siteMapNode url="~/BasicReporting/SimpleDisplay.aspx" title="Simple
Display" description="Displays the complete contents of a database table." />
<siteMapNode url="~/BasicReporting/DeclarativeParams.aspx"
title="Declarative Parameters" description="Displays a subset of the contents of a
database table using parameters." />
<siteMapNode url="~/BasicReporting/ProgrammaticParams.aspx"
title="Setting Parameter Values" description="Shows how to set parameter values
programmatically." />
</siteMapNode>

<siteMapNode title="Filtering Reports" url="~/Filtering/Default.aspx"
description="Samples of Reports that Support Filtering">
<siteMapNode url="~/Filtering/FilterByDropDownList.aspx" title="Filter by
Drop-Down List" description="Filter results using a drop-down list." />
<siteMapNode url="~/Filtering/MasterDetailsDetails.aspx" title="Master-
Details-Details" description="Filter results two levels down." />
<siteMapNode url="~/Filtering/DetailsBySelecting.aspx" title="Details of
Selected Row" description="Show detail results for a selected item in a GridView." />
</siteMapNode>
<siteMapNode title="Customized Formatting"
url="~/CustomFormatting/Default.aspx" description="Samples of Reports Whose
Formats are Customized">
<siteMapNode url="~/CustomFormatting/CustomColors.aspx" title="Format
Colors" description="Format the grid&apos;s colors based on the underlying data."
/>
<siteMapNode url="~/CustomFormatting/GridViewTemplateField.aspx"
title="Custom Content in a GridView" description="Shows using the TemplateField
to customize the contents of a field in a GridView." />
<siteMapNode url="~/CustomFormatting/DetailsViewTemplateField.aspx"
title="Custom Content in a DetailsView" description="Shows using the
TemplateField to customize the contents of a field in a DetailsView." />
<siteMapNode url="~/CustomFormatting/FormView.aspx" title="Custom
Content in a FormView" description="Illustrates using a FormView for a highly
customized view." />
<siteMapNode url="~/CustomFormatting/SummaryDataInFooter.aspx"
title="Summary Data in Footer" description="Display summary data in the grid's
footer." />
</siteMapNode>
</siteMapNode>
</siteMap>
El $a%a "el sitio "e5i'e la estructura "e 'a3egaci!' "el sitio 4e+T se trata "e u'a #erar6uBa
6ue "escri+e las seccio'es 6ue 5or$a' el sitio. Ca"a ele$e'to UsiteMa%No"eV "e
*e+.site$a% re%rese'ta u'a secci!' "e la estructura "e 'a3egaci!' "el sitio.
Figura 17. 1l maa del sitio reresenta una estructura de navegaci#n jer$r/uica 8haga
clic a/u9 ara amliarla:
ASP.NET e%o'e la estructura "el $a%a "el sitio a tra3-s "e la clase SiteMa% classC
hre58htt%(AA$s"'2.$icroso5t.co$Ae'IusAli+rar)As)ste$.4e+.site$a%.as%: "e .NET
Era$e4or?. Esta clase %rese'ta u'a %ro%ie"a" Curre'tNo"e1 6ue "e3uel3e i'5or$aci!' "e
la secci!' 6ue el usuario est. 3isita'"oT la %ro%ie"a" RootNo"e "e3uel3e la raB0 "el $a%a
"el sitio 8&'icio e' 'uestro $a%a "el sitio:. A$+as %ro%ie"a"es1 Curre'tNo"e ) RootNo"e1
"e3uel3e' i'sta'cias SiteMa%No"eChre58htt%(AA$s"'2.$icroso5t.co$Ae'I
usAli+rar)As)ste$.4e+.site$a%'o"e.as%:1 6ue tie'e' %ro%ie"a"es co$o Pare'tNo"e1
Chil"No"es1 NetSi+li'g1 Pre3iousSi+li'g1 etc.1 6ue %er$ite' "es%la0arse %or la #erar6uBa
"el $a%a "el sitio.
Pri'ci%io "e la %.gi'a
Paso 1: Visuali%acin de un #enH segHn el #apa del sitio
Se %ue"e te'er acceso a los "atos e' ASP.NET 2.0 $e"ia'te le'gua#e "e %rogra$aci!'1
co$o e' ASP.NET 1.1 o +ie' $e"ia'te "eclaraci!' a tra3-s "e los co'troles "e orige' "e
"atos 'ue3os. Eiste' 3arios co'troles "e orige' "e "atos i'tegra"os1 co$o el co'trol
S6lDataSource %ara te'er acceso a los "atos "e la +ase "e "atos relacio'al o el co'trol
G+#ectDataSource %ara te'er acceso a los "atos "e clases1 e'tre otros. &'cluso %ue"e
crear co'troles "e orige' "e "atos %erso'ali0a"os.
9os co'troles "e orige' "e "atos "ese$%e=a' la 5u'ci!' "e %ro) e'tre su %.gi'a ASP.NET
) los "atos su+)ace'tes. Por lo ge'eral1 %ara 3isuali0ar u' co'#u'to "e "atos recu%era"os
"el co'trol "e orige' "e "atos1 se agrega otro co'trol 4e+ a la %.gi'a ) se e'la0a al co'trol
"e orige' "e "atos. Para e'la0ar u' co'trol 4e+ a u' co'trol "e orige' "e "atos1 co'5igure
la %ro%ie"a" DataSource&D "el co'trol 4e+ co' el $is$o 3alor "e la %ro%ie"a" &D "el
co'trol "e orige' "e "atos.
ASP.NET i'clu)e el co'trol SiteMa%DataSource1 6ue 'os %er$ite e'la0ar u' co'trol 4e+ al
$a%a "e 'uestro sitio 4e+1 %ara 5acilitar la a"$i'istraci!' "e los "atos "el $a%a "el sitio.
Se usa' 'or$al$e'te "os co'troles 4e+ 8Tree7ie4 ) Me'u: %ara %rese'tar u'a i'ter5a0 "e
usuario "e 'a3egaci!'. Para e'la0ar los "atos "el $a%a "el sitio a u'o "e estos co'troles1
agregue u' SiteMa%DataSource a la %.gi'a ) u' co'trol Tree7ie4 o Me'u 6ue te'ga la
%ro%ie"a" DataSource&D co'5igura"a corres%o'"ie'te$e'te. Por e#e$%lo1 %o"rBa$os
agregar u' co'trol Me'u a la %.gi'a %ri'ci%al $e"ia'te las $arcas siguie'tes(
<div id="navigation">
<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1">
</asp:Menu>

<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
</div>
Para te'er u' $a)or co'trol so+re la %.gi'a co' 5or$ato HTM9 e$iti"a1 %o"e$os e'la0ar el
co'trol SiteMa%DataSource al co'trol Re%eater co$o sigue(
<div id="navigation">
<ul>
<li><asp:HyperLink runat="server" ID="lnkHome"
NavigateUrl="~/Default.aspx">Home</asp:HyperLink></li>

<asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1">
<ItemTemplate>
<li>
<asp:HyperLink runat="server" NavigateUrl='<%# Eval("Url") %>'><%#
Eval("Title") %></asp:HyperLink>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>

<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server"
ShowStartingNode="false" />
</div>
El co'trol SiteMa%DataSource "e3uel3e u' 'i3el a la #erar6uBa "el $a%a "el sitio ca"a 3e0T
e' %ri$er lugar "el 'o"o raB0 "el $a%a 8&'icio e' 'uestro $a%a "el sitio:1 a co'ti'uaci!' "e
los 'i3eles siguie'tes 8;asic Re%orti'g1 Eilteri'g Re%orts ) Custo$i0e" Eor$atti'g: ) asB
sucesi3a$e'te. Cua'"o se e'la0a SiteMa%DataSource a u' Re%eater 8re%eti"or:1 -ste
e'u$era el %ri$er 'i3el "e3uelto ) crea u'a i'sta'cia "e &te$Te$%late %ara ca"a i'sta'cia
SiteMa%No"e "el %ri$er 'i3el. Para te'er acceso a u'a %ro%ie"a" co'creta "el
SiteMa%No"e1 %o"e$os usar E3al8roert!0ame:1 6ue es la 5or$a 6ue te'e$os "e o+te'er
las %ro%ie"a"es >rl ) Title "e SiteMa%No"e %ara el co'trol H)%er9i'?.
El e#e$%lo "e Re%eater a'terior re%rese'ta el $arca"o siguie'te(
<li>
<a href="/Code/BasicReporting/Default.aspx">Basic Reporting</a>
</li>
<li>
<a href="/Code/Filtering/Default.aspx">Filtering Reports</a>
</li>
<li>
<a href="/Code/CustomFormatting/Default.aspx">Customized Formatting</a>
</li>
Estos 'o"os "el $a%a "el sitio 8;asic Re%orti'g1 Eilteri'g Re%orts ) Custo$i0e" Eor$atti'g:
5or$a' el segundo 'i3el re%rese'ta"o "el $a%a "el sitio1 'o el %ri$ero. 9a ra0!' es 6ue la
%ro%ie"a" Sho4Starti'gNo"e "e SiteMa%DataSource est. esta+leci"a e' Ealse1 lo 6ue
%ro3oca 6ue el SiteMa%DataSource o$ita el 'o"o raB0 "el $a%a )1 e' 3e0 "el %ri$er 'i3el1
"e3uel3e el segu'"o 'i3el "e la #erar6uBa "el $a%a.
Para 3isuali0ar los ele$e'tos secu'"arios "e ;asic Re%orti'g1 Eilteri'g Re%orts )
Custo$i0e" Eor$atti'g SiteMa%No"es1 %o"e$os agregar otro Re%eater al &te$Te$%late
"el Re%eater i'icial. Este segu'"o Re%eater se e'la0a a la %ro%ie"a" Chil"No"es "e la
i'sta'cia SiteMa%No"e co$o sigue(
<asp:Repeater runat="server" ID="menu"
DataSourceID="SiteMapDataSource1">
<ItemTemplate>
<li>
<asp:HyperLink runat="server" NavigateUrl='<%# Eval("Url") %>'><%#
Eval("Title") %></asp:HyperLink>
<asp:Repeater runat="server" DataSource='<%# ((SiteMapNode)
Container.DataItem).ChildNodes %>'>
<HeaderTemplate>
<ul>
</HeaderTemplate>

<ItemTemplate>
<li>
<asp:HyperLink runat="server" NavigateUrl='<%# Eval("Url")
%>'><%# Eval("Title") %></asp:HyperLink>
</li>
</ItemTemplate>

<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
</li>
</ItemTemplate>
</asp:Repeater>
Estos "os Re%eater ge'era' el siguie'te $arca"o 8algu'as $arcas se ha' o$iti"o %or
ra0o'es "e +re3e"a":(
UliV Ua hre5WHACo"eA;asicRe%orti'gADe5ault.as%HV;asic Re%orti'gUAaV UulV UliV Ua
hre5WHACo"eA;asicRe%orti'gASi$%leDis%la).as%HVSi$%le Dis%la)UAaV UAliV UliV Ua
hre5WHACo"eA;asicRe%orti'gADeclarati3ePara$s.as%HVDeclarati3e Para$etersUAaV UAliV
UliV Ua hre5WHACo"eA;asicRe%orti'gAProgra$$aticPara$s.as%HVSetti'g Para$eter
7aluesUAaV UAliV UAulVUAliVUliV Ua hre5WHACo"eAEilteri'gADe5ault.as%HVEilteri'g
Re%ortsUAaV ...UAliVUliV Ua hre5WHACo"eACusto$Eor$atti'gADe5ault.as%HVCusto$i0e"
Eor$atti'gUAaV ...UAliV
Me"ia'te los estilos CSS elegi"os "el li+ro "e Rachel A'"re4 The CSS A'tholog)( 101
Esse'tial Ti%s1 Tric?s1 a'" Hac?s 8%ue"e estar e' i'gl-s:1 se ha "a"o u' estilo a los
ele$e'tos UulV ) UliV cu)o $arca"o ge'era el as%ecto siguie'te(
Figura 11. ;en< formado or dos Reeater ! varios estilos C--
Este $e'< se e'cue'tra e' la %.gi'a %ri'ci%al ) est. e'la0a"o al $a%a "el sitio "e5i'i"o e'
*e+.site$a%1 lo 6ue sig'i5ica 6ue cual6uier ca$+io reali0a"o e' el $a%a "el sitio se
re5le#ar. i'$e"iata$e'te e' to"as las %.gi'as 6ue use' la %.gi'a %ri'ci%al Site.$aster.
2es"abilitacin de Vie0(tate
To"os los co'troles ASP.NET %ue"e' $a'te'er o%cio'al$e'te su esta"o e' el esta"o "e
3ista1 6ue se seriali0a co$o u' ca$%o "e 5or$ulario oculto "e la %.gi'a HTM9
re%rese'ta"a. 9os co'troles se 3ale' "el esta"o "e 3ista %ara te'er %rese'te su esta"o
ca$+ia"o $e"ia'te %rogra$aci!' e' las "e3olucio'es1 co$o los "atos e'la0a"os a u'
co'trol 4e+ "e "atos. El esta"o "e 3ista %er$ite recor"ar la i'5or$aci!' "ura'te las
"e3olucio'esT si' e$+argo1 au$e'ta el ta$a=o "el $arca"o 6ue se "e+e e'3iar al clie'te )
%ue"e %ro"ucir u'a recarga i$%orta'te "e la %.gi'a si 'o se co'trola +ie'. 9os co'troles
4e+ "e "atos1 e' es%ecial el co'trol Dri"7ie41 so' %articular$e'te a"ecua"os %ara agregar
ca'ti"a"es a"icio'ales "e ?ilo+)tes al $arca"o "e u'a %.gi'a. Mie'tras 6ue "icho
i'cre$e'to %ue"e ser i'sig'i5ica'te co' res%ecto al a'cho "e +a'"a o a los usuarios "e la
i'tra'et1 el esta"o "e 3ista %ue"e su$ar 3arios segu'"os al 3ia#e "e i"a ) 3uelta "e los
usuarios 6ue lla$a'.
Para 3er el e5ecto "el esta"o "e 3ista1 3isite u'a %.gi'a e' u' e%lora"or ) 3ea "es%u-s el
c!"igo 5ue'te e$iti"o %or la %.gi'a 8e' &'ter'et E%lorer1 3a)a al $e'< 7er ) seleccio'e la
o%ci!' C!"igo 5ue'te:. Ta$+i-' %ue"e acti3ar el segui$ie'to "e %.gi'a %ara 3er la
asig'aci!' "el esta"o "e 3ista utili0a"o %or los co'troles "e la %.gi'a. 9a i'5or$aci!' "el
esta"o "e 3ista se seriali0a e' u' ca$%o "e 5or$ulario oculto "e'o$i'a"o __7&E*STATE1
6ue se u+ica e' u' ele$e'to U"i3V #usto "es%u-s "e la eti6ueta "e a%ertura U5or$V. El
esta"o "e 3ista s!lo se $a'tie'e cua'"o se utili0a u' 5or$ulario 4e+T si la %.gi'a ASP.NET
'o i'clu)e u' U5or$ ru'atWHser3erHV e' la si'tais "e "eclaraci!'1 'o eistir. u' ca$%o
"e 5or$ulario oculto __7&E*STATE e' las $arcas re%rese'ta"as.
El ca$%o "e 5or$ulario 7&E*STATE ge'era"o %or la %.gi'a %ri'ci%al su$a alre"e"or "e
1.P00 +)tes al $arca"o "e la %.gi'a. Esta recarga a"icio'al se "e+e1 e' %ri$er lugar1 al
co'trol Re%eater1 %or6ue el co'te'i"o "el co'trol SiteMa%DataSource se $a'tie'e e' el
esta"o "e 3ista. Mie'tras 6ue %ue"e %arecer 6ue 1.P00 +)tes 'o es ta'to1 al usar u'
Dri"7ie4 co' $uchos ca$%os ) registros1 el esta"o "e 3ista se %ue"e $ulti%licar
5.cil$e'te %or 10 o $.s.
El esta"o "e 3ista se %ue"e "esha+ilitar e' la $is$a %.gi'a o $e"ia'te los co'troles
esta+lecie'"o la %ro%ie"a" E'a+le7ie4State e' 5alse1 lo 6ue re"uce el ta$a=o "el $arca"o
re%rese'ta"o. Puesto 6ue el esta"o "e 3ista %ara u' co'trol 4e+ "e "atos $a'tie'e los
"atos e'la0a"os a "icho co'trol "ura'te las "e3olucio'es1 al "esha+ilitar este esta"o %ara
el co'trol1 se "e+e' e'la0ar los "atos %ara ca"a u'a "e las "e3olucio'es. Mie'tras 6ue "e
esto se e'carga el "esarrolla"or "e la %.gi'a e' la 3ersi!' 1. "e ASP.NETT e' ASP.NET 2.01
los co'troles 4e+ "e "atos se "e+e' 3ol3er a e'la0ar al co'trol "e orige' "e "atos %ara
ca"a "e3oluci!'1 si es 'ecesario.
Si "esea re"ucir el esta"o "e 3ista "e la %.gi'a1 esta+le0ca la %ro%ie"a" E'a+le7ie4State
"el co'trol Re%eater e' 5alse. Esto se %ue"e reali0ar $e"ia'te la 3e'ta'a Pro%ie"a"es "el
Dise=a"or o $e"ia'te "eclaraci!' e' la 3ista C!"igo 5ue'te. >'a 3e0 6ue se ha reali0a"o el
ca$+io "e Re%eater $e"ia'te "eclaraci!'1 el $arca"o "e+e te'er el siguie'te as%ecto(
<asp:Repeater runat="server" ID="menu"
DataSourceID="SiteMapDataSource1" EnableViewState="False">
<ItemTemplate>
... ItemTemplate contents omitted for brevity ...
</ItemTemplate>
</asp:Repeater>
Des%u-s "e este ca$+io1 el ta$a=o "el esta"o "e 3ista "e la %.gi'a re%rese'ta"a se ha+r.
re"uci"o a ta' s!lo 22 +)tes1 lo 6ue su%o'e u' ahorro "el KZ[ e' el ta$a=o "el esta"o "e
3ista. E' los tutoriales "e esta serie1 "esha+ilitare$os "e 5or$a %re"eter$i'a"a el esta"o
"e 3ista "e los co'troles 4e+ "e "atos %ara re"ucir el ta$a=o "el $arca"o re%rese'ta"o.
E' la $a)orBa "e los e#e$%los1 esta+lecere$os la %ro%ie"a" E'a+le7ie4State e' 5alse si'
'ecesi"a" "e e%licitarlo. S!lo ha+lare$os "el esta"o "e 3ista cua'"o se "e+a ha+ilitar
%ara 6ue el co'trol 4e+ "e "atos cu$%la su 5u'ci!'.
Pri'ci%io "e la %.gi'a
Paso 3: .dicin de ele#entos de na!egacin tipo breadcru#b
Para co$%letar la %.gi'a %ri'ci%al 3a$os a agregar u' ele$e'to "e 'a3egaci!' "e la
i'ter5a0 "e usuario ti%o +rea"cru$+ a ca"a %.gi'a. El ele$e'to +rea"cru$+ $uestra
r.%i"a$e'te a los usuarios su u+icaci!' actual e' la #erar6uBa "el sitio. Agregar ele$e'tos
+rea"cru$+ e' ASP.NET 2.0 es se'cilloT s!lo ha) 6ue a=a"ir u' co'trol SiteMa%Path a la
%.gi'a1 si' 'ecesi"a" "e c!"igos.
E' 'uestro sitio 3a$os a agregar este co'trol al U"i3V "e e'ca+e0a"o(
<span class="breadcrumb">
<asp:SiteMapPath ID="SiteMapPath1" runat="server">
</asp:SiteMapPath>
</span>
El ele$e'to +rea"cru$+ $uestra la %.gi'a actual "e la #erar6uBa "el $a%a "el sitio e' la
6ue est. el 3isita'te ) las %.gi'as a'teriores "el 'o"o "el $a%a hasta llegar a la raB0 8&'icio
e' 'uestro $a%a "el sitio:.
Figura 12. 1l elemento breadcrumb muestra la $gina actual ! las anteriores de la
jerar/u9a del maa del sitio
Pri'ci%io "e la %.gi'a
Paso -: .dicin de la p=gina predeter#inada de cada seccin
9os tutoriales "e 'uestro sitio est.' "i3i"i"os e' 3arias categorBas1 a sa+er1 ;asic
Re%orti'g1 Eilteri'g1 Custo$ Eor$atti'g1 etc.1 co' u'a car%eta e' ca"a u'a ) los tutoriales
corres%o'"ie'tes e' 5or$a "e %.gi'as ASP.NET "e'tro "e "icha car%eta. Asi$is$o1 ca"a
car%eta co'tie'e u'a %.gi'a De5ault.as%. 7a$os a 3isuali0ar to"os los tutoriales "e esta
secci!' corres%o'"ie'tes a esta %.gi'a %re"eter$i'a"a. Es "ecir1 te'"rBa$os 3B'culos a
Si$%leDis%la).as%1 Declarati3ePara$s.as% ) Progra$$aticPara$s.as% %ara la %.gi'a
De5ault.as% %re"eter$i'a"a "e la car%eta ;asicRe%orti'g. Ahora %o"e$os 3ol3er a usar la
clase SiteMa% ) u' co'trol 4e+ "e "atos %ara 3er esta i'5or$aci!'1 6ue se corres%o'"e co'
el $a%a "el sitio "e5i'i"o e' *e+.site$a%.
7a$os a 3er u'a lista "esor"e'a"a 3ol3ie'"o a usar u' Re%eater1 %ero esta 3e0 3ere$os el
tBtulo ) la "escri%ci!' "e los tutoriales. Puesto 6ue las $arcas ) los c!"igos 'ecesarios %ara
ello se "e+e' re%etir %ara ca"a %.gi'a De5ault.as%1 %o"e$os co'cretar esta l!gica "e la
i'ter5a0 "e usuario e' u' co'trol "e usuario. Cree u'a car%eta "e'o$i'a"a >serCo'trols e'
el sitio 4e+ ) agr-guele u' ele$e'to 'ue3o "el ti%o Co'trol "e usuario 4e+ "e'o$i'a"o
Sectio'9e3elTutorial9isti'g.ascT agregue ta$+i-' el $arca"o 6ue se i'clu)e a
co'ti'uaci!'(
Figura 1". Adici#n de un control de usuario %eb a la careta =serControls
(ection*e!elTutorial*istingascx
<%@ Control Language="C#" AutoEventWireup="true"
CodeFile="SectionLevelTutorialListing.ascx.cs"
Inherits="UserControls_SectionLevelTutorialListing" %>
<asp:Repeater ID="TutorialList" runat="server" EnableViewState="False">
<HeaderTemplate><ul></HeaderTemplate>
<ItemTemplate>
<li><asp:HyperLink runat="server" NavigateUrl='<%# Eval("Url") %>'
Text='<%# Eval("Title") %>'></asp:HyperLink>
- <%# Eval("Description") %></li>
</ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
(ection*e!elTutorial*istingascxcs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class UserControls_SectionLevelTutorialListing :
System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
// If SiteMap.CurrentNode is not null,
// bind CurrentNode's ChildNodes to the GridView
if (SiteMap.CurrentNode != null)
{
TutorialList.DataSource = SiteMap.CurrentNode.ChildNodes;
TutorialList.DataBind();
}
}
}
E' el e#e$%lo "e Re%eater a'terior1 e'la0a$os los "atos "e SiteMa% a Re%eater $e"ia'te
"eclaraci!'T si' e$+argo1 el co'trol "e usuario Sectio'9e3elTutorial9isti'g lo hace
$e"ia'te %rogra$aci!'. E' el co'trola"or "e e3e'tos Page_9oa"1 se hace u'a
co$%ro+aci!' %ara asegurarse "e 6ue esta es la %ri$era 3isita a la %.gi'a 8'o u'a
"e3oluci!': ) "e 6ue la >R9 "e esta %.gi'a est. asig'a"a a u' 'o"o "el $a%a "el sitio. Si
"icho co'trol "e usuario se usa e' u'a %.gi'a 6ue 'o se corres%o'"e a u'a e'tra"a
UsiteMa%No"eV1 SiteMa%.Curre'tNo"e "e3ol3er. 'ull ) 'o se e'la0ar.' "atos al Re%eater.
Si "a$os %or hecho 6ue te'e$os u' Curre'tNo"e1 "e+e$os e'la0ar la colecci!'
Chil"No"es a Re%eater. Puesto 6ue 'uestro $a%a "el sitio est. co'5igura"o "e tal 5or$a
6ue la %.gi'a De5ault.as% "e ca"a secci!' es el 'o"o %ri$ario "e to"os los tutoriales "e
"icha secci!'1 este c!"igo $ostrar. 3B'culos a to"os los tutoriales "e la secci!' #u'to co'
las "escri%cio'es corres%o'"ie'tes1 co$o se $uestra e' la ca%tura "e %a'talla siguie'te.
>'a 3e0 6ue se ha crea"o este Re%eater1 a+ra las %.gi'as De5ault.as% "e ca"a car%eta1
3a)a a la 3ista Dise=o ) arrastre el co'trol "e usuario e' la su%er5icie "e "ise=o "es"e el
E%lora"or "e solucio'es hasta el lugar "o'"e "esea 6ue a%are0ca la lista "e tutoriales.
Figura 1&. Control de usuario agregado a (efault.asx
Figura 1*. 1numeraci#n de los tutoriales contenidos en Basic Reorting
Pri'ci%io "e la %.gi'a
Fesu#en
Co' el $a%a "el sitio "e5i'i"o ) la %.gi'a %ri'ci%al co$%leta1 he$os co'segui"o u'a
%.gi'a co' u' "ise=o ) u' es6ue$a "e 'a3egaci!' l!gicos %ara los tutoriales relacio'a"os
co' "atos. &'"e%e'"ie'te$e'te "el '<$ero "e %.gi'as 6ue agregue$os al sitio1 el %roceso
"e actuali0aci!' "el "ise=o "e %.gi'a "e to"o el sitio o "e la i'5or$aci!' "e 'a3egaci!' es
r.%i"o ) se'cillo gracias a la ce'trali0aci!' "e la i'5or$aci!'. E' co'creto1 la i'5or$aci!'
"e "ise=o "e %.gi'a se "e5i'e e' la %.gi'a %ri'ci%al Site.$aster ) el $a%a "el sitio e'
*e+.site$a%. No 'ecesita$os escri+ir ning<n c!"igo %ara o+te'er este "ise=o "e %.gi'a
%ara to"o el sitio ) este $eca'is$o "e 'a3egaci!' )1 a"e$.s1 he$os co'segui"o e' 7isual
Stu"io u' "ise=o i'tuiti3o "o'"e 3e$os lo 6ue ha).
Des%u-s "e ha+er ter$i'a"o las ca%as "e acceso a "atos ) "e l!gica "e 'egocios ) "e
ha+er "e5i'i"o u' "ise=o "e %.gi'a cohere'te ) u' $eca'is$o "e 'a3egaci!' "el sitio1
esta$os %re%ara"os %ara e$%e0ar co' los $o"elos "e i'5or$e $.s co$u'es. E' los tres
tutoriales siguie'tes a'ali0are$os las tareas "e ela+oraci!' "e i'5or$es +.sicas1 es "ecir1
la 3isuali0aci!' "e "atos recu%era"os "e ;99 e' los co'troles Dri"7ie41 Details7ie4 )
Eor$7ie4.
Suerte co' la %rogra$aci!'.
Tutorial 3: Visuali%acin de datos con el
4b6ect2ata(ource

Scott Mitchell
06 2006
Descargue el ASPNET_Data_Tutorial_/_CS.ee c!"igo "e e#e$%lo.
Descargar el cdigo de ejemplo ASPNET_Data_Tutorial_4_CS.exe.
Contenido del Tutorial 3 (Visual C #)
&'tro"ucci!'
Paso 1( Agregar ) co'5igurar el co'trol G+#ectDataSource
Paso 2( Agregar u' co'trol 4e+ "e "atos ) e'lace a la G+#ectDataSource
co' The$es %ara u'a a%arie'cia co'siste'te
6ue $uestra u'a gra+aci!' a u'a hora e' el Details7ie4
Resu$e'
Introduccin
Co' 'uestra ar6uitectura "e a%licacio'es ) "ise=o 4e+ %.gi'a co$%leta1 esta$os listos
%ara e$%e0ar a e%lorar c!$o lle3ar a ca+o u'a serie "e "atos co$u'es ) las tareas "e
%rese'taci!' "e i'5or$es relacio'a"os. E' los tutoriales a'teriores he$os 3isto c!$o
e'la0ar $e"ia'te %rogra$aci!' los "atos "e la DA9 ) ;99 a u' co'trol "e "atos "e la *e+
e' u'a %.gi'a ASP.NET. Esta si'tais I la asig'aci!' "el co'trol 4e+ "e
"atos DataSource %ro%ie"a" "e los "atos %ara $ostrar ) lla$ar al co'trol DataBind
() $-to"o I 5ue el $o"elo utili0a"o e' las a%licacio'es ASP.NET 1.1 ) %ue"e seguir
utili0.'"ose e' el 2.0. Si' e$+argo1 ASP.NET 2.0 Ms 'ue3os co'troles "e orige' "e "atos
o5rece' u'a 5or$a "eclarati3a %ara tra+a#ar co' "atos. Me"ia'te estos co'troles se %ue"e'
e'la0ar los "atos recu%era"os "e la ;99 crea"o e' el tutorial a'terior1 si' te'er 6ue escri+ir
u'a lB'ea "e c!"igoC
ASP.NET 2.0 co' ci'co +arcos co'strui"os e' los co'troles "e orige' "e "atos
I S6lDataSource 1 AccessDataSource 1G+#ectDataSource 1 O$lDataSource ) SiteMa%DataSo
urce I au'6ue uste" %ue"e co'struir su %ro%ia co'troles "e orBge'es "e "atos 1 si es
'ecesario. Puesto 6ue he$os "esarrolla"o u'a ar6uitectura "e 'uestra a%licaci!' tutorial1
3a$os a estar utili0a'"o el G+#ectDataSource co'tra 'uestras clases ;99.
Figura 1 .(P/7T +, incluye cinco controles de origen de datos
El G+#ectDataSource 5u'cio'a co$o u' %ro) %ara tra+a#ar co' alg<' otro o+#eto. Para
co'5igurar el G+#ectDataSource se es%eci5ica este o+#eto su+)ace'te ) c!$o sus $-to"os
"e $a%a %ara los a=os
G+#ectDataSource Seleccionar 1Insertar 1 Actualizar ) Eliminar $-to"os. >'a 3e0 6ue este
o+#eto su+)ace'te se ha es%eci5ica"o ) sus $-to"os asig'a"os a la "e G+#ectDataSource1
%o"e$os e'la0ar el G+#ectDataSource a u' co'trol "e "atos "e la *e+. ASP.NET 3ie'e co'
$uchos co'troles 4e+ "e "atos1 i'clu)e'"o los co'troles Dri"7ie41 Details7ie41
Ra"io;utto'9ist ) Dro%Do4'9ist1 e'tre otros. Dura'te el ciclo "e 3i"a "e %.gi'a1 el co'trol
"e "atos "e *e+ %ue"e' 'ecesitar acce"er a los "atos1 est. "esti'a"o a1 6ue se lle3ar. a
ca+o $e"ia'te la i'3ocaci!' "e su G+#ectDataSource Seleccione el $-to"o1 si el co'trol
4e+ "e "atos co$%ati+le co' la i'serci!'1 actuali0aci!' o eli$i'aci!' "e las lla$a"as
%ue"e' hacerse a su G+#ectDataSource Insertar 1 Actualizar o Eliminar $-to"os. Estas
lla$a"as se e'ruta' %or el G+#ectDataSource a los $-to"os "el o+#eto a%ro%ia"o
su+)ace'te co$o el siguie'te "iagra$a se $uestra.
Figura + 7l 4b6ect2ata(ource sir!e co#o un proxy
Mie'tras 6ue el G+#ectDataSource se %ue"e utili0ar %ara lla$ar a los $-to"os %ara
i'sertar1 actuali0ar o eli$i'ar "atos1 3a$os a ce'trarse e' los "atos co'ta+lesT tutoriales
5uturo e%lorar el uso "e los co'troles G+#ectDataSource ) "atos "e la 4e+ 6ue $o"i5ica'
los "atos.
Paso 1: .gregar y con'igurar el control
4b6ect2ata(ource
Co$ie'ce a+rie'"o el SimpleDisplay.aspx %.gi'a e' el BasicReporting car%eta1 a la 3ista
Dise=o )1 a co'ti'uaci!'1 arrastre u' co'trol G+#ectDataSource "el cua"ro "e herra$ie'tas
a la su%er5icie "e "ise=o "e la %.gi'a. El G+#ectDataSource a%arece co$o u' cua"ro gris e'
la su%er5icie "e "ise=o1 )a 6ue 'o %ro"uce 'i'g<' c!"igo1 si'o 6ue si$%le$e'te acce"e a
los "atos $e"ia'te la i'3ocaci!' "e u' $-to"o "e u' o+#eto es%eci5ica"o. 9os "atos
"e3ueltos %or u' G+#ectDataSource %ue"e $ostrar u' co'trol 4e+ "e "atos1 co$o
Dri"7ie41 Details7ie41 Eor$7ie41 ) asB sucesi3a$e'te.
/ota Co$o alter'ati3a1 %ue"e 6ue agregar el co'trol "e "atos "e la *e+ a la %.gi'a )
luego1 "e sus eti6uetas i'telige'tes1 eli#a la o%ci!' UNue3a e'tra"aV "atos "e la lista
"es%lega+le.
Para es%eci5icar el G+#ectDataSource o+#eto su+)ace'te ) c!$o los $-to"os "e ese o+#eto
se asig'a' a las "e G+#ectDataSource1 haga clic e' el e'lace Co'5igurar orige' "e "atos "e
la G+#ectDataSource "e eti6uetas i'telige'tes.
Figura 1 Aaga clic en el enlace Con'iguracin de datos de origen de la etiBueta
inteligente
Esto 'os lle3a a la asiste'te Co'5igurar orige' "e "atos. E' %ri$er lugar1 "e+e es%eci5icar el
o+#eto G+#ectDataSource es tra+a#ar co' ellos. Si la o%ci!' HMostrar s!lo los "atos "e los
co$%o'e'tes "eH casilla est. $arca"a1 la lista "es%lega+le 6ue a%arece e' esta %a'talla
s!lo $uestra los o+#etos 6ue ha' si"o "ecora"as co' el DataObject atri+uto.Actual$e'te1
'uestra lista i'clu)e los Ta+leA"a%ters "el co'#u'to "e "atos co' ti%o ) las clases ;99 6ue
he$os crea"o e' el tutorial a'terior. Si uste" se ol3i"! "e agregar el DataObject atri+u)e' a
las clases "e la ca%a "e l!gica "e 'egocios 6ue 'o los 3ea e' esta lista. E' ese caso1
"esacti3e la casilla HMostrar s!lo los co$%o'e'tes "e "atosH casilla "e 3eri5icaci!' %ara 3er
to"os los o+#etos1 6ue "e+e i'cluir las clases ;99 8#u'to co' las otras clases e' el DataSet
co' ti%o I la DataTa+les DataRo4s1 ) asB sucesi3a$e'te:.
A %artir "e esta %ri$era %a'talla seleccio'e la ProductsBLL clase "e la lista "es%lega+le )
haga clic e' Siguie'te.
Figura 3 7speci'icar el ob6eto para utili%ar con el control 4b6ect2ata(ource
9a siguie'te %a'talla "el asiste'te le %e"ir. 6ue seleccio'e 6u- $-to"o "e+erBa i'3ocar el
G+#ectDataSource. 9a lista "es%lega+le $uestra los $-to"os 6ue "e3uel3e' los "atos e' el
o+#eto seleccio'a"o "e la %a'talla a'terior. A6uB
3e$os GetProductsByProductID 1 GetProducts 1 GetProductsByCategoryID ) GetProductsBySupplier
ID . Seleccio'e la GetProducts $-to"o "e la lista "es%lega+le ) haga clic e' Ei'ali0ar 8si se
ha a=a"i"o laDataObjectMethodAttribute a la ProductBLL $-to"os Ms1 co$o se $uestra e' el
tutorial a'terior1 esta o%ci!' ser. seleccio'a"a %or "e5ecto:.
Figura - 7legir el #?todo para de!ol!er los datos de la 'ic"a (eleccionar
Con'igurar #anual#ente el 4b6ect2ata(ource
El G+#ectDataSource Asiste'te %ara la co'5iguraci!' "e orBge'es "e "atos o5rece u'a 5or$a
r.%i"a "e es%eci5icar el o+#eto 6ue utili0a ) "e asociar lo 6ue los $-to"os "el o+#eto so'
i'3oca"os. Pue"e1 si' e$+argo1 co'5igurar el G+#ectDataSource a tra3-s "e sus
%ro%ie"a"es1 )a sea a tra3-s "e la 3e'ta'a Pro%ie"a"es o "irecta$e'te e' el $arca"o
"eclarati3o. ;asta co' esta+lecer la TypeName %ro%ie"a" co' el ti%o "e o+#eto su+)ace'te a
utili0ar1 ) elSelectMethod co' el $-to"o 6ue se i'3oca cua'"o se recu%era' "atos.
<Asp: ObjectDataSource ID = "ObjectDataSource1" runat = "server"
SelectMethod = "GetProducts"
TypeName = "ProductsBLL">
</ Asp: ObjectDataSource>
&'cluso si uste" %re5iere el asiste'te Co'5igurar orige' "e "atos %ue"e ha+er ocasio'es e'
las 6ue te'ga 6ue co'5igurar $a'ual$e'te el G+#ectDataSource1 co$o el asiste'te s!lo las
listas crea"as %or el "esarrolla"or clases. Si "esea e'la0ar el G+#ectDataSource a u'a clase
e' el NET Era$e4or? I. Tales co$o la clase Me$+ershi% 1 %ara acce"er a i'5or$aci!' "e
cue'tas "e usuario1 o la clase Director) %ara tra+a#ar co' la i'5or$aci!' "el siste$a "e
archi3os I 6ue te'"r. 6ue co'5igurar $a'ual$e'te el G+#ectDataSource %ro%ie"a"es.
Paso +: .gregar un control 0eb de datos y enlace a
la 4b6ect2ata(ource
>'a 3e0 6ue el G+#ectDataSource se ha a=a"i"o a la %.gi'a ) co'5igura"o1 esta$os listos
%ara agregar co'troles "e "atos *e+ a la %.gi'a %ara $ostrar los "atos "e3ueltos %or el "e
G+#ectDataSource Seleccionar $-to"o. Ni'g<' ti%o "e co'trol "e "atos "e *e+ se %ue"e
e'la0ar a u' G+#ectDataSource1 3a$os a 3er 6ue $uestra el G+#ectDataSource "e "atos e'
u' Dri"7ie41 Details7ie4 ) Eor$7ie4.
*a !inculacin de un 9ridVie0 a la 4b6ect2ata(ource
Agregar u' co'trol Dri"7ie4 "es"e el cua"ro "e herra$ie'tas
%ara SimpleDisplay.aspx su%er5icie "e "ise=o Ms. De la eti6ueta i'telige'te "el co'trol
Dri"7ie41 eli#a el co'trol G+#ectDataSource 6ue agreg! e' el %aso 1. Esto crear.
auto$.tica$e'te u'a ;ou'"Eiel" e' el Dri"7ie4 %ara ca"a %ro%ie"a" 6ue "e3uel3e los
"atos "e la "e G+#ectDataSource Seleccione el $-to"o 8es "ecir1 las %ro%ie"a"es "e5i'i"as
%or el DataTa+le Pro"uctos:.
Figura 8 $n 9ridVie0 "a sido a5adido a la p=gina y !inculado a
4b6ect2ata(ource
A co'ti'uaci!'1 %ue"e %erso'ali0ar1 ca$+iar1 o eli$i'ar ;ou'"Eiel"s el Dri"7ie41 haga clic
e' la o%ci!' E"itar colu$'as "e la eti6ueta i'telige'te.
Figura : 9estionar la DoundFields 9ridVie0 tra!?s del cuadro de di=logo 7ditar
colu#nas
T!$ese u' $o$e'to %ara $o"i5icar ;ou'"Eiel"s el Dri"7ie41 la eli$i'aci!' "e
la ProductID 1 IdProveedor 1CategoryID 1 CantidadPorUnidad 1 UnitsInStock 1 UnitsOnOrder ) Reorde
rLevel ;ou'"Eiel"s. ;asta co' seleccio'ar el ;ou'"Eiel" "e la lista e' la %arte i'5erior
i06uier"a ) haga clic e' el +ot!' "e eli$i'ar 8e' la O ro#a: %ara eli$i'arlos. A co'ti'uaci!'1
ca$+iar el ;ou'"Eiel"s %ara 6ue el CategoryName ) SupplierName ;ou'"Eiel"s %rece"er a
laPrecioUnidad ;ou'"Eiel" $e"ia'te la selecci!' "e estos ;ou'"Eiel"s ) hacie'"o clic e' la
5lecha hacia arri+a.Esta+lecer el HeaderText %ro%ie"a"es "e la ;ou'"Eiel"s resto
"e productos 1 categora 1 proveedores ) precios 1 res%ecti3a$e'te. A co'ti'uaci!'1
los precios ;ou'"Eiel" 5or$ato "e $o'e"a $e"ia'te la creaci!' "e la
;ou'"Eiel"HtmlEncode %ro%ie"a" e' Ealse ) su DataFormatString %ro%ie"a" {0: c} . Por
<lti$o1 e' se'ti"o hori0o'tal ali'ear elprecio a la "erecha ) el interrumpidas casilla "e
3eri5icaci!' e' el ce'tro a tra3-s "e la ItemStyle A HorizontalAlign%ro%ie"a".
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" EnableViewState="False">
<columnas>
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True"
SortExpression="CategoryName" />
<asp:BoundField DataField="SupplierName" HeaderText="Supplier" ReadOnly="True"
SortExpression="SupplierName" />
<Asp: BoundField DataField = "UnitPrice" DataFormatString = "{0: c}" HeaderText =
"Precio"
HtmlEncode = "false" SortExpression = "UnitPrice">
<ItemStyle HorizontalAlign="Right" />
</ Asp: BoundField>
<asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
SortExpression="Discontinued">
<ItemStyle HorizontalAlign="Center" />
</ Asp: CheckBoxField>
</ Columns>
</ Asp: GridView>
Figura ; DoundFields el 9ridVie0 se "an personali%ado
7l uso de te#as para un aspecto uni'or#e
Estos tutoriales se es5uer0a' %or eli$i'ar cual6uier co'5iguraci!' "e estilo "e co'trol "e
'i3el1 e' lugar "e utili0ar ho#as "e estilo "e5i'i"as e' u' archi3o eter'o sie$%re 6ue sea
%osi+le. El styles.css archi3o
co'tie'eDataWebControlStyle 1 HeaderStyle 1 RowStyle ) AlternatingRowStyle clases CSS 6ue se
"e+e utili0ar %ara "ictar la a%arici!' "e la *e+ los "atos utili0a"os e' los co'troles "e estos
tutoriales. Para lograr esto1 se %o"rBa esta+lecer el
Dri"7ie4 CssClass %ro%ie"a" DataWebControlStyle 1 )
su HeaderStyle 1 RowStyle ) AlternatingRowStyle%ro%ie"a"es M CssClass %ro%ie"a"es e'
co'secue'cia.
Si 'os 5i#a$os estos CssClass %ro%ie"a"es e' el co'trol *e+ te'"rBa$os 6ue recor"ar
e%lBcita$e'te estos 3alores "e %ro%ie"a"es %ara el co'trol "e to"as ) ca"a u'a *e+ "e
"atos e' 'uestro tutoriales. >' e'5o6ue $.s $a'e#a+le es "e5i'ir el 3alor %or "e5ecto CSS
relacio'a"as co' las %ro%ie"a"es "e los co'troles Dri"7ie41 Details7ie41 Eor$7ie4 ) los
co'troles "e uso "e u' te$a. >' te$a es u'a colecci!' "e 3alores "e %ro%ie"a"es "e
co'trol "e 'i3elI1 las i$.ge'es1 ) las clases CSS 6ue se %ue"e' a%licar a las %.gi'as a
tra3-s "e u' sitio %ara hacer cu$%lir u'a a%arie'cia co$<'.
Nuestro te$a 'o se i'clu)e' las i$.ge'es o archi3os "e CSS 83a$os a "e#ar la ho#a "e
estilo styles.css tal ) co$o est. "e5i'i"o e' la car%eta raB0 "e la a%licaci!' 4e+:1 %ero se
i'clu)e' "os S?i's. A la %iel es u' archi3o 6ue "e5i'e las %ro%ie"a"es %or "e5ecto "e u'
co'trol 4e+. E' co'creto1 3a$os a te'er u' archi3o "e la %iel "e los co'troles Dri"7ie4 )
Details7ie41 lo 6ue i'"ica el 3alor %or "e5ecto CssClass las %ro%ie"a"es relacio'a"as.
Co$ie'ce %or agregar u' archi3o "e la %iel a su %ro)ecto lla$a"o GridView.skin hacie'"o
clic "erecho so+re el 'o$+re "el %ro)ecto e' el E%lora"or "e solucio'es ) eli#a Agregar
'ue3o ele$e'to.
Figura < .gregar un arc"i!o de #=scara con no#bre Grid/ie+.s1in
9os archi3os "e la %iel "e+e' ser coloca"os e' u' te$a1 6ue se e'cue'tra' e'
el App_Themes car%eta. La 6ue a<' 'o tie'e' u'a car%eta1 7isual Stu"io o5recer.
a$a+le$e'te a crear u'o %ara 'osotros cua'"o la a"ici!' "e 'uestra %iel e' %ri$er
lugar. Haga clic e' SB %ara crear el App_Theme car%eta ) colocar la
'ue3a GridView.skin archi3o allB.
Figura 1, Va#os a Visual (tudio Crear la App_T*eme carpeta
Esto crear. u' 'ue3o te$a e' el App_Themes Dri"7ie4 car%eta co' el 'o$+re co' el archi3o
"e la %iel GridView.skin .
Figura 11 7l te#a de 9ridVie0 "a sido a5adido a la App_T*eme carpeta
Ca$+ie el 'o$+re "el te$a Dri"7ie4 a Data*e+Co'trols 8+ot!' "erecho "el rat!' so+re la
car%eta Dri"7ie4 e' elApp_Theme car%eta ) seleccio'e Ca$+iar 'o$+re:. A co'ti'uaci!'1
i'tro"u0ca el siguie'te $arca"o e' el GridView.skinarchi3o(
2asp3Grid/ie+ runat-4ser5er4 CssClass-4DataWebControlSt6le47
2Alternating"o+St6le CssClass-4Alternating"o+St6le4 87
2"o+St6le CssClass-4"o+St6le4 87
29eaderSt6le CssClass-49eaderSt6le4 87
28 Asp3 Grid/ie+7
Esto "e5i'e las %ro%ie"a"es %or "e5ecto %ara el CssClass %ro%ie"a"es relacio'a"as %ara
cual6uier Dri"7ie4 e' cual6uier %.gi'a 6ue utili0a el te$a Data*e+Co'trols. 7a$os a
a=a"ir otra %iel %ara el Details7ie41 u' co'trol 4e+ "e "atos 6ue 3a$os a utili0ar e'
+re3e. A=a"ir u' 'ue3o s?i' e' el te$a Data*e+Co'trols lla$a"o DetailsView.skin )
agregue el siguie'te $arca"o(
<asp:DetailsView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<FieldHeaderStyle CssClass="HeaderStyle" />
</ Asp: DetailsView>
Co' 'uestro te$a "e5i'i"o1 el <lti$o %aso es a%licar el te$a a 'uestra %.gi'a "e
ASP.NET. >' te$a %ue"e ser a%lica"o so+re u'a +ase "e %.gi'a %or %.gi'a1 o %ara to"as
las %.gi'as "e u' sitio 4e+. 7a$os a usar este te$a %ara to"as las %.gi'as "el sitio
4e+. Para lograr esto1 agregue el $arca"o siguie'te a Web.config Ms <system.web> secci!'(
<pages styleSheetTheme="DataWebControls" />
Eso es to"o lo 6ue ha) 6ue hacerC El StyleSheetTheme 3alor i'"ica 6ue las %ro%ie"a"es
es%eci5ica"as e' el te$a "e+eno a'ular las %ro%ie"a"es es%eci5ica"as e' el 'i3el "e
co'trol. Para es%eci5icar 6ue la co'5iguraci!' "el te$a "e+erBa estar %or e'ci$a a#ustes "e
co'trol1 utilice el tema "e atri+utos e' lugar "e StyleSheetTheme 1 %or "esgracia1 la
co'5iguraci!' "e te$a es%eci5ica"o %or el tema atri+uto 'o a%arece' e' la 3ista "e "ise=o
"e 7isual Stu"io. Se re5iere' a te$as ) $.scaras "e ASP.NET &'5or$aci!' ge'eral ) estilos
"el la"o "el ser3i"or $e"ia'te te$as %ara o+te'er $.s i'5or$aci!' so+re te$as )
$.scaras1 3ea C!$o( A%licar te$as "e ASP.NET %ara $.s i'5or$aci!' so+re la
co'5iguraci!' "e u'a %.gi'a %ara uso "e u' te$a.
Figura 1+ 7l 9ridVie0 &uestra el no#bre del producto> categorCa> Pro!eedor>
Precio> in'or#acin y descatalogados
Viendo un registro a la !e% en el 2etailsVie0
El Dri"7ie4 $uestra u'a 5ila %ara ca"a registro "e3uelto %or el co'trol "e orige' "e "atos
al 6ue est. "esti'a"o. Ha) 3eces1 si' e$+argo1 cua'"o 6uere$os $ostrar u' <'ico registro
o si$%le$e'te gra+ar u'o a la 3e0. El co'trol Details7ie4 o5rece esta 5u'cio'ali"a"1 lo 6ue
hace co$o u' archi3o HTM9 <table> co' "os colu$'as ) u'a 5ila %ara ca"a colu$'a o
%ro%ie"a" co$%arti"a co' el co'trol. >ste" %ue"e %e'sar e' el Details7ie4 co$o u'
Dri"7ie4 co' u' registro <'ico giro "e K0 gra"os.
Co$ie'ce %or agregar u' co'trol Details7ie4 sobre el Dri"7ie4 e' SimpleDisplay.aspx . A
co'ti'uaci!'1 se u'e' a la $is$a co$o el co'trol G+#ectDataSource Dri"7ie4. Al igual 6ue
co' los co'troles Dri"7ie41 u' ;ou'"Eiel" se a=a"ir. a la Details7ie4 %ara ca"a %ro%ie"a"
"el o+#eto "e3uelto %or la "e G+#ectDataSource Seleccionar $-to"o. 9a <'ica "i5ere'cia es
6ue el Details7ie4 ;ou'"Eiel"s est.' "is%uestos hori0o'tal ) 'o 3ertical.
Figura 11 .5adir un 2etailsVie0 a la p=gina y enla%arla a la 4b6ect2ata(ource
Al igual 6ue los co'troles Dri"7ie41 Details7ie4 ;ou'"Eiel"s %ue"e ser a#usta"o %ara
%ro%orcio'ar u'a 3isuali0aci!' $.s %erso'ali0a"a "e los "atos "e3ueltos %or el
G+#ectDataSource. 9a 5igura 1/ $uestra el Details7ie4 "es%u-s "e su ;ou'"Eiel"s
) CssClass %ro%ie"a"es se ha' co'5igura"o %ara hacer su a%arici!' si$ilar al "el e#e$%lo
Dri"7ie4.
Figura 13 7l 2etailsVie0 #uestra un solo registro
Te'ga e' cue'ta 6ue el Details7ie4 s!lo $uestra el %ri$er registro "e3uelto %or su orige'
"e "atos. Para %er$itir al usuario %aso a tra3-s "e to"os los registros1 u'o a la 3e01 ha)
6ue ha+ilitar la %agi'aci!' %ara el Details7ie4. Para ello1 3ol3er a 7isual Stu"io ) $ar6ue la
casilla Ha+ilitar %agi'aci!' e' la eti6ueta i'telige'te "el Details7ie4 es.
Figura 1- Aabilitar la paginacin en el control 2etailsVie0
Figura 18 Con la paginacin acti!ada> el 2etailsVie0 per#ite al usuario !er
cualBuier de los productos
Ha+lare$os $.s acerca "e la %agi'aci!' e' 5uturos tutoriales.
$n dise5o #=s 'lexible para #ostrar un registro a la !e%
El Details7ie4 es +asta'te rBgi"a e' la 5or$a e' 6ue $uestra ca"a registro "e3uelto %or el
G+#ectDataSource. Po"e$os 6uerer u'a 3isi!' $.s 5lei+le "e los "atos. Por e#e$%lo1 e'
lugar "e $ostrar el 'o$+re "el %ro"ucto1 categorBa1 %ro3ee"or1 %recio1 ) la i'5or$aci!' "e
sus%e'"er ca"a u'o e' u'a 5ila se%ara"a1 es %osi+le 6ue "esea $ostrar el 'o$+re "el
%ro"ucto ) el %recio e' u' <h4> %arti"a1 co' la categorBa ) la i'5or$aci!' "e los
%ro3ee"ores 6ue a%arece' a co'ti'uaci!' el 'o$+re ) el %recio e' u' ta$a=o "e 5ue'te
$.s %e6ue=os. L 'o %ue"e cui"ar %ara $ostrar los 'o$+res "e %ro%ie"a"es 8%ro"ucto1
categorBa1 etc: #u'to a los 3alores.
El co'trol Eor$7ie4 %ro%orcio'a este 'i3el "e %erso'ali0aci!'. E' lugar "e utili0ar ca$%os
8co$o Dri"7ie4 ) Details7ie4 lo hace':1 el Eor$7ie4 utili0a %la'tillas1 6ue %er$ite' u'a
$e0cla "e co'troles *e+1 HTM9 est.tico1 ) la si'tais "e e'lace "e "atos . Si est.
5a$iliari0a"o co' el co'trol Re%eater "e ASP.NET 1.1 se %ue"e %e'sar e' el Eor$7ie4
co$o Re%eater %ara $ostrar u' <'ico registro.
Agregue u' co'trol Eor$7ie4 a la SimpleDisplay.aspx su%er5icie "e "ise=o "e
%.gi'a. &'icial$e'te1 el Eor$7ie4 $uestra co$o u' +lo6ue gris1 'os i'5or$a 6ue te'e$os
6ue o5recer1 co$o $B'i$o1 el co'trol "e ItemTemplate .
Figura 1: 7l For#Vie0 debe incluir un ItemTemplate
Pue"e e'la0ar el Eor$7ie4 "irecta$e'te a u' co'trol "e orige' "e "atos a tra3-s "e la
eti6ueta i'telige'te "el Eor$7ie41 6ue crear. u' "e5ecto ItemTemplate "e 5or$a auto$.tica
8#u'to co' u' EditItemTemplate )InsertItemTemplate 1 si el co'trol "e
G+#ectDatatSource InsertMethod ) UpdateMethod se esta+lece' las %ro%ie"a"es:. Si'
e$+argo1 %ara este e#e$%lo 3a$os a e'la0ar los "atos a los co'troles Eor$7ie4 )
es%eci5icar suItemTemplate $a'ual$e'te. Co$ie'ce %or esta+lecer el
Eor$7ie4 DataSourceID %ro%ie"a" "e la ID "el co'trol
G+#ectDataSource1 ObjectDataSource1 . A co'ti'uaci!'1 cree el ItemTemplate %ara 6ue
$uestre el 'o$+re "el %ro"ucto ) el %recio e' u' <h4> ele$e'to ) los 'o$+res "e
categorBa ) el carga"or %or "e+a#o 6ue e' u' ta$a=o "e 5ue'te $.s %e6ue=os.
<asp:FormView ID="FormView1" runat="server" DataSourceID="ObjectDataSource1"
EnableViewState="False">
<ItemTemplate>
<h4> <% # Eval ("ProductName")%> (<% # Eval ("Precio por unidad", "{0: c}") %>)</
h4>
Categora: <% # Eval ("NombreCategora")%>; Proveedor: <% # Eval ("SupplierName")
%>
</ ItemTemplate>
</ Asp: FormView>
Figura 1; 7l pri#er producto (C"ai) se #uestra en un 'or#ato personali%ado
El <% # Eval (propertyName)%> es la si'tais "e e'lace "e "atos. El Eval $-to"o "e3uel3e el
3alor "e la %ro%ie"a" es%eci5ica"a %ara el o+#eto actual 6ue est. sie'"o e'la0a"o al co'trol
Eor$7ie4. 9ee el artBculo "e Ale "e Ho$ero ha si$%li5ica"o ) a$%lia"o la si'tais "e
e'lace "e "atos e' ASP.NET 2.0 %ara o+te'er $.s i'5or$aci!' so+re las e'tra"as ) sali"as
"e e'lace "e "atos.
Al igual 6ue el Details7ie41 Eor$7ie4 s!lo $uestra el %ri$er registro "e3uelto %or el
G+#ectDataSource. >ste" %ue"e ha+ilitar la %agi'aci!' e' el Eor$7ie4 %ara %er$itir 6ue
los 3isita'tes "e %aso a tra3-s "e los %ro"uctos u'o a la 3e0.
Fesu#en
Acceso a los "atos ) $ostrar "e u'a ca%a "e l!gica e$%resarial se %ue"e lograr si' escri+ir
u'a sola lB'ea "e c!"igo gracias a ASP.NET 2.0 Ms co'trol G+#ectDataSource. El co'trol
G+#ectDataSource lla$a a u' $-to"o es%ecB5ico "e u'a clase ) "e3uel3e los
resulta"os. Estos resulta"os se %ue"e' $ostrar e' u' co'trol 4e+ "e "atos 6ue est.
"esti'a"o a la G+#ectDataSource. E' este tutorial 'os 5i#a$os e' la u'i!' Dri"7ie41
Details7ie4 ) Eor$7ie4 a la G+#ectDataSource.
Hasta ahora s!lo he$os 3isto c!$o usar el G+#ectDataSource %ara i'3ocar u' $-to"o si'
%ar.$etros1 %ero lo 6ue si 6uere$os lla$ar a u' $-to"o 6ue es%era 6ue los %ar.$etros
"e e'tra"a1 tales co$o el ProductBLL claseGetProductsByCategoryID ( IdCategora ) R Co' el
5i' "e lla$ar a u' $-to"o 6ue es%era 6ue u'o o $.s %ar.$etros 6ue "e+e co'5igurar el
G+#ectDataSource %ara es%eci5icar los 3alores "e estos %ar.$etros. 7a$os a 3er c!$o
lograr esto e' 'uestro %r!i$o tutorial.
Progra$aci!' 5eli0C
*eer #=s
Para $.s i'5or$aci!' so+re los te$as trata"os e' este tutorial1 co'sulte los siguie'tes
recursos(
Crear sus %ro%ios co'troles "e orBge'es "e "atos
E#e$%los Dri"7ie4 "e ASP.NET 2.0
Ha si$%li5ica"o ) a$%lia"o el e'lace "e "atos "e si'tais e' ASP.NET 2.0
Te$as e' ASP.NET 2.0
Del la"o "el ser3i"or estilos co' te$as
C!$o( A%licar te$as "e ASP.NET $e"ia'te %rogra$aci!'
Tutorial -: Par=#etros declarati!a

Scott Mitchell
06 2006
Descargue el ASPNET_Data_Tutorial_2_CS.ee c!"igo "e e#e$%lo.
Descargar el cdigo de ejemplo ASPNET_Data_Tutorial__CS.exe.
Contenido del Tutorial - (Visual C #)
&'tro"ucci!'
El uso "e u' 3alor "e %ar.$etro e' el c!"igo
Esta+lecer el 3alor "el %ar.$etro al 3alor "e la %ro%ie"a" "e u' co'trol "e *e+
Resu$e'
Introduccin
E' el tutorial a'terior 3i$os $ostrar los "atos co' los co'troles Dri"7ie41 Details7ie41
Eor$7ie4 ) los co'troles e'la0a"os a u' co'trol G+#ectDataSource 6ue i'3oc!
el GetProducts () el $-to"o "e la ProductsBLL clase. ElGetProducts () $-to"o "e3uel3e u'
esta+leci$ie'to i'5lei+le "e ti%os DataTa+le relle'a co' to"os los registros "e la +ase "e
"atos North4i'" "e los productos "e $esa. El ProductsBLL clase co'tie'e $-to"os
a"icio'ales %ara "e3ol3er s!lo los su+co'#u'tos "e los %ro"uctos I GetProductByProductID
( productID ) 1GetProductsByCategoryID ( IdCategora ) 1 ) GetProductsBySupplierID
( supplierID ) . Estos tres $-to"os "e es%erar u' %ar.$etro "e e'tra"a 6ue i'"ica la
$a'era "e 5iltrar la i'5or$aci!' "el %ro"ucto "e3uelto.
El G+#ectDataSource se %ue"e' utili0ar %ara i'3ocar $-to"os 6ue es%erar los %ar.$etros
"e e'tra"a1 %ero %ara ello "e+e$os es%eci5icar el lugar "o'"e los 3alores "e estos
%ar.$etros 3ie'e'. 9os 3alores "e los %ar.$etros %ue"e ser rBgi"a o %ue"e %ro3e'ir "e
u'a 3arie"a" "e 5ue'tes "i'.$icas1 e'tre ellas( los 3alores "e ca"e'a "e co'sulta1 las
3aria+les "e sesi!'1 el 3alor "e la %ro%ie"a" "e u' co'trol "e *e+ e' la %.gi'a1 o %ara
otros.
Para este tutorial 3a$os a e$%e0ar %or 6ue $uestra' c!$o utili0ar u' %ar.$etro a u'
3alor e' el c!"igo. E' co'creto1 3ere$os la a"ici!' "e u' Details7ie4 a la %.gi'a 6ue
$uestra i'5or$aci!' so+re u' %ro"ucto es%ecB5ico1 es "ecir1 la $e0cla Du$+o "el che5
A'to'1 6ue tie'e u' ProductID "e 2. A co'ti'uaci!'1 3ere$os c!$o co'5igurar el 3alor "el
%ar.$etro so+re la +ase "e u' co'trol 4e+. E' %articular1 3a$os a utili0ar u' cua"ro "e
teto %ara 6ue el usuario escri+a e' u' %aBs1 "es%u-s "e lo cual %ue"e hacer clic e' u'
+ot!' %ara 3er la lista "e %ro3ee"ores 6ue resi"e' e' ese %aBs.
7l uso de un !alor de par=#etro en el cdigo
Para el %ri$er e#e$%lo1 e$%e0ar %or la a"ici!' "e u' co'trol Details7ie4 a
la DeclarativeParams.aspx %.gi'a e' elBasicReporting car%eta. De la eti6ueta i'telige'te "el
Details7ie41 seleccio'e UNue3o orige' "e "atosV e' la lista "es%lega+le ) elegir agregar
u' G+#ectDataSource.
Figura 1 .5adir un 4b6ect2ata(ource a la p=gina
Se i'iciar. auto$.tica$e'te el co'trol G+#ectDataSource es asiste'te Elegir orige' "e
"atos. Seleccio'e la ProductsBLLclase a %artir "e la %ri$era %a'talla "el asiste'te.
Figura + (eleccione la Products,LL clase
Co$o 6uere$os $ostrar i'5or$aci!' so+re u' %ro"ucto e' %articular 6ue "esea utili0ar
el GetProductByProductID (productID ) $-to"o.
Figura 1 7li6a el GetProduct,6ProductID & productID ' #?todo
Da"o 6ue el $-to"o 6ue he$os seleccio'a"o i'clu)e u' %ar.$etro1 ha) u'a %a'talla $.s
%ara 6ue el asiste'te1 "o'"e se 'os %i"e 6ue "e5i'a el 3alor 6ue se utili0ar. %ara el
%ar.$etro. 9a lista "e la i06uier"a $uestra to"os los %ar.$etros %ara el $-to"o
seleccio'a"o. Para GetProductByProductID ( productID ) s!lo ha) u'a I productID . A la
"erecha se %ue"e es%eci5icar el 3alor "el %ar.$etro seleccio'a"o. El orige' "e %ar.$etro
e' la lista "es%lega+le e'u$era las "isti'tas 5ue'tes %osi+les %ara el 3alor "el
%ar.$etro. Da"o 6ue 6uere$os es%eci5icar u' 3alor e' el c!"igo "e 2 %ara
el productID %ar.$etro1 "e#e la 5ue'te "e %ar.$etros1 co$o 'i'gu'o e i'tro"u0ca 2 e' el
cua"ro "e teto De5ault7alue.
Figura 3 $n !alor de par=#etro en el cdigo de - ser= utili%ado para
la productID par=#etros
Des%u-s "e co$%letar el asiste'te Co'5igurar orige' "e "atos1 $arca"o "eclarati3o "el
co'trol G+#ectDataSource i'clu)e u' parmetro "e o+#eto e' el SelectParameters colecci!'
%ara ca"a u'o "e los %ar.$etros "e e'tra"a es%era"a %or el $-to"o "e5i'i"o e'
la SelectMethod %ro%ie"a". Da"o 6ue el $-to"o 6ue esta$os usa'"o e' este e#e$%lo s!lo
es%era u' %ar.$etro "e e'tra"a1 parameterID 1 s!lo ha) u'a e'tra"a
a6uB. El SelectParameterscolecci!' %ue"e co'te'er cual6uier clase 6ue se "eri3a "e la de
parmetros "e clase e' laSystem.Web.UI.WebControls es%acio "e 'o$+res. Para 3alores "e los
%ar.$etros e' el c!"igo "e la +ase de parmetros "e clase se utili0a1 %ero %ara las o%cio'es
"e 5ue'te "e otros %ar.$etros "eri3a"os "e u' parmetroutili0a"o es la clase1 ta$+i-'
%ue"e crear sus %ro%ios ti%os "e %ar.$etros a $e"i"a 1 si es 'ecesario.
<Asp: ObjectDataSource ID = "ObjectDataSource1" runat = "server"
SelectMethod = "GetProductByProductID" TypeName = "ProductsBLL">
<SelectParameters>
<asp:Parameter DefaultValue="5" Name="productID" Type="Int32" />
</ SelectParameters>
</ Asp: ObjectDataSource>
/ota Si 3a a seguir a"ela'te e' su %ro%io or"e'a"or el $arca"o "eclarati3o 6ue uste" 3e
e' este %u'to %ue"e' i'cluir los 3alores "e la InsertMethod 1 UpdateMethod 1
) DeleteMethod %ro%ie"a"es1 asB co$oDeleteParameters . El G+#ectDataSource eli#a Asiste'te
"e orige' "e "atos auto$.tica$e'te es%eci5ica los $-to"os "e la ProductBLL utili0ar %ara
i'sertar1 actuali0ar ) eli$i'ar1 %or lo $e'os 6ue se eli$i'a e%lBcita$e'te esta %restaci!'1
6ue ser.' i'clui"os e' el 5or$ato a'terior.
Al 3isitar esta %.gi'a1 el co'trol 4e+ "e "atos lla$ar. al "e G+#ectDataSource Seleccione el
$-to"o 6ue se lla$e a laProductsBLL clase GetProductByProductID ( productID ) utili0a'"o el
$-to"o "e 3alor e' el c!"igo "e 2 %ara elproductID %ar.$etro "e e'tra"a. El $-to"o
"e3ol3er. u' esta+leci$ie'to i'5lei+le "e ti%os ProductDataTable o+#eto 6ue co'tie'e u'a
sola 5ila co' i'5or$aci!' acerca "e Mi Du$+o "el che5 A'to' 8el %ro"ucto co' ProductID 2:.
Figura - In'or#acin sobre la #e%cla 9u#bo del c"e' .nton es #ostrado
7stablecer el !alor del par=#etro al !alor de la
propiedad de un control de Web
El G+#ectDataSource 3alores "e los %ar.$etros ta$+i-' se %ue"e co'5igurar e' 5u'ci!' "el
3alor "e u' co'trol "e *e+ e' la %.gi'a. Para ilustrar esto1 3a$os a te'er u' Dri"7ie4 6ue
$uestra to"os los %ro3ee"ores 6ue se e'cue'tra' e' u' %aBs "eter$i'a"o %or el
usuario. Para lograr esto co$ie'ce a agregar u' co'trol Tet;o a la %.gi'a e' la 6ue el
usuario %ue"e i'tro"ucir u' 'o$+re "e %aBs. Esta+lecer este co'trol
Tet;o ID %ro%ie"a" CountryName . A"e$.s "e agregar u' co'trol *e+ ;utto'.
Figura 8 .gregar un control TextDox a la p=gina con ID Countr6!ame
A co'ti'uaci!'1 agregue u' Dri"7ie4 a la %.gi'a )1 a %artir "e la eti6ueta i'telige'te1 o%tar
%or a=a"ir u' 'ue3o G+#ectDataSource. Co$o 6uere$os $ostrar la i'5or$aci!' "e
seleccio'ar el %ro3ee"or SuppliersBLL clase a %artir "e la %ri$era %a'talla "el
asiste'te. Des"e la segu'"a %a'talla1 escoger el GetSuppliersByCountry ( pas ) $-to"o.
Figura : 7li6a el GetSuppliers,6Countr6 & pas ' &?todo
Des"e el GetSuppliersByCountry ( pas ) $-to"o tie'e u' %ar.$etro "e e'tra"a1 el
asiste'te u'a 3e0 $.s1 i'clu)e u'a %a'talla 5i'al %ara elegir el 3alor "el %ar.$etro. Esta
3e01 esta+lecer la 5ue'te "e los %ar.$etros "e co'trol. Esto lle'ar. la lista Co'trol&D
"es%lega+le co' los 'o$+res "e los co'troles "e la %.gi'a1 seleccio'ar el CountryName el
co'trol "e la lista. Cua'"o la %.gi'a se 3isit! %or %ri$era 3e0 el CountryName Tet;o
a%arecer. e' +la'co1 %or lo 6ue 'o se "e3uel3e' resulta"os ) 'o se $uestra. Si "esea 3er
algu'os "e los resulta"os %or "e5ecto1 ca$+ie el cua"ro "e teto De5ault7alue e'
co'secue'cia.
Figura ; 7stablecer el !alor del par=#etro a la Countr6!ame de control de !alores
Marca"o "eclarati3o "el G+#ectDataSource "i5iere u' %oco "e 'uestro %ri$er e#e$%lo1
utili0a'"o u' Co'trolPara$etere' lugar "e los parmetros o+#eto. A ControlParameter tie'e
%ro%ie"a"es a"icio'ales %ara es%eci5icar el ID "el co'trol *e+ ) el 3alor "e la %ro%ie"a"
6ue se utili0ar. %ara el %ar.$etro 8 PropertyName :. El asiste'te Co'5igurar orige' "e "atos
5ue lo su5icie'te$e'te i'telige'te co$o %ara "eter$i'ar 6ue1 %or u' cua"ro "e teto1
%ro+a+le$e'te 6uerr. usar el texto "e %ro%ie"a" %ara el 3alor "el %ar.$etro. Si' e$+argo1
si "esea utili0ar u' 3alor "e %ro%ie"a" "isti'ta "e la "e co'trol *e+ se %ue"e ca$+iar
el PropertyName 3alor a6uB o %ulsa'"o el +ot!' HMostrar %ro%ie"a"es a3a'0a"asH 6ue
a%arece e' el asiste'te.
<Asp: ObjectDataSource ID = "ObjectDataSource2" runat = "server"
SelectMethod = "GetSuppliersByCountry" TypeName = "SuppliersBLL">
<SelectParameters>
<Asp: ControlID ControlParameter = "CountryName" name = "pas" PropertyName =
"Texto"
Type = "String" />
</ SelectParameters>
</ Asp: ObjectDataSource>
Al 3isitar la %.gi'a %or %ri$era 3e0 el CountryName Tet;o est. 3acBo. El
G+#ectDataSource Seleccione el $-to"o sigue sie'"o i'3oca"a %or el Dri"7ie41 %ero u'
3alor "e null se %asa a la GetSuppliersByCountry ( pas ) $-to"o.El Ta+leA"a%ter co'3ierte
el nulo e' u'a +ase "e "atos NULL 3alor 8 DBNull.Value :1 %ero la co'sulta utili0a"a %or
elGetSuppliersByCountry ( pas ) $-to"o est. escrito "e tal $a'era 6ue 'o "e3uel3e'
'i'g<' 3alor cua'"o u' NULLse es%eci5ica u' 3alor %ara el @ CategoryID %ar.$etro. E'
resu$e'1 'o se "e3uel3e' los %ro3ee"ores.
>'a 3e0 6ue el 3isita'te e'tra e' u' %aBs1 si' e$+argo1 ) hace clic e' el +ot!' Mostrar
Pro3ee"ores %ara causar u'a "e3oluci!' "e "atos1 el "e
G+#ectDataSource Seleccionar $-to"o es 'ue3a co'sulta1 %asa'"o el co'trol
Tet;o Texto3alor co$o el pas "e los %ar.$etros.
Figura < *os pro!eedores de Canad= para aparecer
&ostrando todos los pro!eedores de 'or#a predeter#inada
E' lugar "e $ostrar 'i'gu'o "e los %ro3ee"ores "e la %ri$era 3e0 6ue 3e la %.gi'a 6ue
6uera$os $ostrar todos los%ro3ee"ores e' u' %ri$er $o$e'to1 lo 6ue %er$ite al usuario
co$%arar la lista i'tro"ucie'"o u' 'o$+re "e %aBs e' el cua"ro "e teto. Cua'"o el cua"ro
"e teto est. 3acBo1 el SuppliersBLL clase GetSuppliersByCountry ( pas )$-to"o se %asa e'
u' nulo 3alor %ara su pas, %ar.$etro "e e'tra"a. Este nulo 3alor se tra's$ite e' el
DA9GetSupplierByCountry ( pas ) $-to"o1 6ue es tra"uci"o a u'a +ase "e "atos NULL 3alor
%ara el pas @ %ar.$etro e' la siguie'te co'sulta(
SELECCIONAR IdProveedor, CompanyName, Direccin, Ciudad, Pas, Telfono
A partir de proveedores
DONDE Pas = @ Pas
9a e%resi!' Pas = NULL "e3uel3e sie$%re Ealse1 i'cluso %ara los registros cu)o pas tie'e
u'a colu$'a NULL 3alor1 %or lo ta'to1 'o se "e3uel3e' registros.
Para 3ol3er todos los %ro3ee"ores1 cua'"o el %aBs Tet;o est. 3acBo1 %o"e$os au$e'tar
la GetSuppliersByCountry (pas ) e' el $-to"o "e %lo$o e' sa'gre %ara i'3ocar
la GetSuppliers () $-to"o cua'"o su %ar.$etro %aBs es nula) lla$ar a la
DA9 GetSuppliersByCountry ( pas ) el $-to"o "e lo co'trario. Esto te'"r. el e5ecto "e
"e3ol3er a to"os los %ro3ee"ores 6ue 'i'g<' %aBs se ha es%eci5ica"o1 ) el su+co'#u'to
a%ro%ia"o "e los %ro3ee"ores cua'"o el %ar.$etro %aBs est. i'clui"o.
Ca$+iar el GetSuppliersByCountry ( pas ) e' el $-to"o SuppliersBLL clase a lo siguie'te(
pblica Northwind.SuppliersDataTable GetSuppliersByCountry (pas de cuerda)
{
if (String.IsNullOrEmpty (pases))
GetSuppliers retorno ();
ms
volver Adapter.GetSuppliersByCountry (pas);
}
Co' este ca$+io la DeclarativeParams.aspx %.gi'a $uestra to"os los %ro3ee"ores1 cua'"o
3isit! %or %ri$era 3e0 8o ca"a 3e0 6ue el CountryName Tet;o est. 3acBo:.
Figura 1, Todos los pro!eedores a"ora se #uestran por de'ecto
Fesu#en
Co' el 5i' "e utili0ar los $-to"os co' %ar.$etros "e e'tra"a1 te'e$os 6ue es%eci5icar los
3alores "e los %ar.$etros e' el G+#ectDataSource SelectParameters colecci!'. Di5ere'tes
ti%os "e %ar.$etros "e %er$itir el 3alor "el %ar.$etro 6ue se o+tie'e "e "i5ere'tes
5ue'tes. El ti%o "e %ar.$etro %or "e5ecto usa u' 3alor e' el c!"igo1 %ero co' la $is$a
5acili"a" 8) si' u'a lB'ea "e c!"igo: 3alores "e los %ar.$etros se %ue"e' o+te'er "e la
ca"e'a "e co'sulta1 las 3aria+les "e sesi!'1 coo?ies1 e i'cluso los 3alores i'tro"uci"os %or
el usuario "e los co'troles *e+ e' la %.gi'a.
9os e#e$%los 6ue he$os 3isto e' este tutorial se $uestra c!$o utili0ar los 3alores "el
%ar.$etro "eclarati3o. Si' e$+argo1 %ue"e ha+er ocasio'es e' 6ue te'e$os 6ue utili0ar
u'a 5ue'te "e %ar.$etro 6ue 'o est. "is%o'i+le1 co$o la 5echa ) hora actuales1 o +ie'1 si
'uestro sitio es $e"ia'te la suscri%ci!'1 el &D "e usuario "el 3isita'te. Para estos
esce'arios se %ue"e' esta+lecer los 3alores "e %ar.$etros $e"ia'te %rogra$aci!' a'tes
"e 6ue el $-to"o G+#ectDataSource i'3ocar su o+#eto su+)ace'te. 7a$os a 3er c!$o
lograr esto e' el siguie'te tutorial.
Progra$aci!' 5eli0C
Tutorial 8: Con'iguracin de la progra#acin
4b6ect2ata(ource !alores de los par=#etros

Scott Mitchell
06 2006
Descargue el ASPNET_Data_Tutorial_6_CS.ee c!"igo "e e#e$%lo.
Descargar el cdigo de ejemplo ASPNET_Data_Tutorial_!_CS.exe.
Contenido del Tutorial 8 (Visual C #)
&'tro"ucci!'
Paso 1( Agregar u' $-to"o a E$%lo)eesTa+leA"a%ter
Paso 2( Agregar la DetE$%lo)ees;)Hire"DateMo'th 8$es: M-to"o "e la Ca%a "e l!gica "e
'egocios
Paso ,( 9os e$%lea"os 7ie'"o *hoseHiri'g a'i3ersario es este $es
Resu$e'
Introduccin
Co$o 3i$os e' el tutorial a'terior1 u' '<$ero "e o%cio'es est.' "is%o'i+les %ara %asar "e
5or$a "eclarati3a los 3alores "e %ar.$etros a los $-to"os "el G+#ectDataSource. Si el
3alor "el %ar.$etro 'o es $o"i5ica+le1 3ie'e "e u' co'trol "e *e+ e' la %.gi'a1 o e'
cual6uier otra 5ue'te 6ue sea legi+le %or u'a 5ue'te "e "atos de parmetros "e o+#eto1 %or
e#e$%lo1 6ue el 3alor %ue"e estar su#eto a los %ar.$etros "e e'tra"a1 si' escri+ir u'a sola
lB'ea "e c!"igo.
Pue"e ha+er ocasio'es1 si' e$+argo1 cua'"o el 3alor "el %ar.$etro %ro3ie'e "e algu'a
5ue'te 'o re%rese'ta+a )a a u'o "e los i'cor%ora"os e' la 5ue'te "e "atos de parmetros "e
o+#etos. Si 'uestro sitio a%o)a"o las cue'tas "e usuario 6ue %ue"e ser 6ue "esee
esta+lecer el %ar.$etro so+re la +ase "e la sesi!' i'icia"a e' el &D "e usuario 3isita'te. G
es %osi+le 6ue 'ecesite$os %erso'ali0ar el 3alor "el %ar.$etro a'tes "e e'3iarlo #u'to co'
el $-to"o "e o+#eto su+)ace'te "el G+#ectDataSource es.
Ca"a 3e0 6ue el G+#ectDataSource Seleccione el $-to"o 6ue se i'3oca la %ri$era
G+#ectDataSource %la'tea su e3e'to Selecti'g . Se +asa el $-to"o "e o+#eto
G+#ectDataSource es i'3oca"a. >'a 3e0 6ue co$%lete la G+#ectDataSourceseleccio'a"a
e3e'to i'ce'"ios 8Eigura 1 ilustra esta secue'cia "e e3e'tos:. 9os 3alores "e %ar.$etro
6ue se %asa e' el $-to"o "el o+#eto su+)ace'te G+#ectDataSource se %ue"e co'5igurar o
%erso'ali0ar e' u' co'trola"or "e e3e'tos %ara la seleccin de e3e'tos.
Figura 1 7l 4b6ect2ata(ource es seleccionada y Selecci:n de 'uego e!entos
anteriores y posteriores a su #?todo ob6eto subyacente se in!oca
E' este tutorial 3ere$os la a"ici!' "e u' $-to"o a 'uestra DA9 ) ;99 6ue ace%ta u' solo
%ar.$etro "e e'tra"a I Mes"e ti%o int I ) "e3uel3e u' EmployeesDataTable o+#eto %o+la"o "e
a6uellos e$%lea"os 6ue tie'e' su a'i3ersario "e co'trataci!' es%eci5ica"os e'
el mes . Nuestro e#e$%lo se esta+lece este %ar.$etro $e"ia'te %rogra$aci!' +asa"o e' el
$es e' curso1 6ue $uestra u'a lista "e los Ha'i3ersarios "e los e$%lea"os "el $esH.
7a$os a e$%e0arC
Paso 1: .gregar un #?todo a Emplo6eesTableAdapter
Para 'uestro %ri$er e#e$%lo1 te'e$os 6ue a=a"ir u' $e"io %ara recu%erar a6uellos
e$%lea"os cu)o HireDate se %ro"u#o e' u' $es "eter$i'a"o. Para %ro%orcio'ar esta
5u'cio'ali"a"1 "e acuer"o co' 'uestra ar6uitectura 6ue te'e$os 6ue crear %ri$ero u'
$-to"o e' el EmployeesTableAdapter 6ue se asig'a a la correcta "eclaraci!' S@9. Para lograr
esto1 e$%e0ar %or a+rir el co'#u'to "e "atos co' ti%o Ne%tu'o. Haga clic "erecho e'
el EmployeesTableAdaptereti6ueta ) eli#a Agregar co'sulta.
Figura + .5adir una nue!a consulta a la Emplo6eesTableAdapter
G%tar %or a=a"ir u'a i'strucci!' S@9 6ue "e3uel3e 5ilas. Al llegar a la Es%eci5i6ue u' SELECT
de la %a'talla %or "e5ecto "e la Declaraci!' SELECCIONAR "eclaraci!' "e
la EmployeesTableAdapter )a estar. carga"o. S!lo tie'es 6ue a=a"ir e'
el DONDE cl.usula( DONDE DATEPART (m, HireDate) = @ mes . DATEPART es u'a 5u'ci!' "e TIS@9
6ue "e3uel3e u'a %arte "e u'a 5echa "eter$i'a"a fecha y hora "e ti%o1 e' este caso
esta$os utili0a'"o DATEPART %ara "e3ol3er el $es "e la Fecha de contratacin "e la colu$'a.
Figura 1 2e!uel!a slo los registros en Bue los 9ireDate colu#na es #enor Bue o
igual a la 9ired,eforeDate ;par=#etro
Por <lti$o1 ca$+iar el FillBy ) GetDataBy 'o$+res "e los $-to"os
"e FillByHiredDateMonth )GetEmployeesByHiredDateMonth 1 res%ecti3a$e'te.
Figura 3 7legir no#bres de los #?todos #=s apropiados Bue <ill,6 y GetData,6
Haga clic e' Ei'ali0ar %ara co$%letar el asiste'te ) 3ol3er a la su%er5icie "e "ise=o "el
DataSet. ElEmployeesTableAdapter ahora "e+e i'cluir u' 'ue3o co'#u'to "e $-to"os %ara
acce"er a los e$%lea"os co'trata"os e' u' $es "eter$i'a"o.
Figura - *os nue!os #?todos aparecen en la super'icie de dise5o del 2ata(et
Paso +: .gregar la GetEmplo6ees,69iredDate)ont* & mes ' &?todo de
la capa de lgica de negocios
Des"e 'uestra ar6uitectura "e la a%licaci!' utili0a u'a ca%a se%ara"a "e la l!gica "e
'egocio ) la l!gica "e acceso a "atos1 te'e$os 6ue a=a"ir u' $-to"o a 'uestra ;991 6ue
lla$a a la DA9 %ara recu%erar los e$%lea"os co'trata"os a'tes "e u'a 5echa
"eter$i'a"a. A+ra el EmployeesBLL.cs ) agregue el siguie'te $-to"o(
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
pblica Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth (int mes)
{
volver Adapter.GetEmployeesByHiredDateMonth (mes);
}
Al igual 6ue co' 'uestros $-to"os "e esta clase1 GetEmployeesByHiredDateMonth
( meses ) si$%le$e'te lla$a a a+a#o e' el DA9 ) "e3uel3e los resulta"os.
Paso 1: Visuali%acin de los e#pleados W"oseAiring
ani!ersario es este #es
El %aso 5i'al "e este e#e$%lo es %ara $ostrar a6uellos e$%lea"os cu)a co'trataci!'
a'i3ersario este $es. Co$ie'ce %or la a"ici!' "e u' Dri"7ie4 a
la ProgrammaticParams.aspx %.gi'a e' el BasicReporting car%eta ) a=a"ir u' 'ue3o
G+#ectDataSource co$o orige' "e "atos. Co'5igurar el G+#ectDataSource %ara utili0ar
el EmployeesBLL clase co' elSelectMethod esta+leci"o e' GetEmployeesByHiredDateMonth
( meses ) .
Figura 8 $tilice el Emplo6ees,LL clase
Figura : (eleccione 2esde el GetEmplo6ees,69iredDate)ont* & meses ' #?todo
9a <lti$a %a'talla 'os %i"e 6ue 'os %ro%orcio'a' los meses el 3alor "el %ar.$etro "e la
5ue'te. Puesto 6ue 3a$os a esta+lecer este 3alor $e"ia'te %rogra$aci!'1 "e#a' la 5ue'te
"e los %ar.$etros esta+leci"os %ara la o%ci!' Ni'gu'o %re"eter$i'a"o ) haga clic e'
Ei'ali0ar.
Figura ; 2e6e el 4rigen de los par=#etros establecido en /inguno
Esto crear. u' parmetro "e o+#eto e' el G+#ectDataSource SelectParameters colecci!' 6ue
'o tie'e u' 3alor es%eci5ica"o.
<Asp: ObjectDataSource ID = "ObjectDataSource1" runat = "server"
OldValuesParameterFormatString = "original_ {0}"
SelectMethod = "GetEmployeesByHiredDateMonth" TypeName = "EmployeesBLL">
<SelectParameters>
<asp:Parameter Name="month" Type="Int32" />
</ SelectParameters>
</ Asp: ObjectDataSource>
Para esta+lecer este 3alor $e"ia'te %rogra$aci!'1 es 'ecesario crear u' co'trola"or "e
e3e'tos %ara el G+#ectDataSource Seleccin de e3e'tos. Para lograr esto1 3a)a a la 3ista
Dise=o ) haga "o+le clic e' el G+#ectDataSource. Ta$+i-' %ue"e seleccio'ar el
G+#ectDataSource1 3a)a a la 3e'ta'a Pro%ie"a"es1 ) haga clic e' el ico'o "e ra)o. A
co'ti'uaci!'1 haga "o+le clic e' el cua"ro "e teto #u'to a la Seleccin de e3e'to o escri+a
el 'o$+re "el co'trola"or "e e3e'tos 6ue "esee utili0ar.
Figura < Aaga clic en el icono de rayo en la !entana Propiedades de la lista de
e!entos de un control 0eb
A$+os e'5o6ues agregar u' 'ue3o co'trola"or "e e3e'tos %ara el
G+#ectDataSource Seleccin "e e3e'tos %ara el c!"igo su+)ace'te "e la %.gi'a "e la
clase. E' este co'trola"or "e e3e'tos 6ue %ue"e' leer ) escri+ir a los 3alores "e los
%ar.$etros utili0a'"o e.InputParameters [ parameterName ] 1 "o'"e parameterName es el 3alor
"el nombre "e atri+uto e' la <asp:Parameter> archi3o 8 InputParameters colecci!' ta$+i-'
%ue"e ser i'"ea"o "e 5or$a or"i'al1 co$o e' e.InputParameters [ ndice ] :. Para
esta+lecer el mes "e %ar.$etros %ara el $es e' curso1 a=a"a lo siguie'te a la Seleccin
de co'trola"or "e e3e'tos(
protected void ObjectDataSource1_Selecting (object sender,
ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters ["mes"] = DateTime.Now.Month;
}
Al 3isitar esta %.gi'a a tra3-s "e u' 'a3ega"or1 %o"e$os 3er 6ue u' solo e$%lea"o 5ue
co'trata"o este $es 8$ar0o: I 9aura Callaha'1 6ue ha esta"o co' la co$%a=Ba "es"e 1KK/.
Figura 1, .Buellos e#pleados cuyos ani!ersarios de este #es aparecen
Fesu#en
Mie'tras 6ue 3alores "e los %ar.$etros "el G+#ectDataSource MtB%ica$e'te %ue"e'
esta+lecerse $e"ia'te "eclaraci!'1 si' 'ecesi"a" "e u'a lB'ea "e c!"igo1 es 5.cil "e
co'5igurar los 3alores "e %ar.$etros $e"ia'te %rogra$aci!'. To"o lo 6ue 'ecesita$os
hacer es crear u' co'trola"or "e e3e'tos %ara el G+#ectDataSource Seleccin "e e3e'tos1
6ue se "is%ara a'tes "e 6ue el $-to"o "el o+#eto su+)ace'te se i'3oca1 ) esta+lecer
$a'ual$e'te los 3alores "e u'o o $.s %ar.$etros a tra3-s "e
la InputParameters colecci!'.
E' este tutorial se co'clu)e la secci!' "e &'5or$aci!' ;.sica. El siguie'te tutorial se i'icia
la secci!' "e 5iltra"o ) MaestroIDetalles "e los esce'arios1 e' el 6ue 3ere$os las t-c'icas
%ara 6ue el 3isita'te %ue"a 5iltrar los "atos ) 3er los "etalles "e u' i'5or$e "e $aestro e'
u' i'5or$e "e los "etalles.
Progra$aci!' 5eli0C

Tutorial :: &aestro I 2etalle de 'iltrado con un
2rop2o0n*ist

Scott Mitchell
06 2006
Descargue el ASPNET_Data_Tutorial_Z_CS.ee c!"igo "e e#e$%lo.
Descargar el cdigo de ejemplo ASPNET_Data_Tutorial_"_CS.exe.
Contenido del Tutorial : (Visual C #)
&'tro"ucci!'
Paso 1( 7isuali0aci!' "e las categorBas e' u' Dro%Do4'9ist
Paso 2( Agregar el Dri"7ie4 Pro"uctos
Resu$e'
Introduccin
>' ti%o co$<' "e i'5or$e es el informe maestro > detalle 1 e' la 6ue el i'5or$e co$ie'0a
%or $ostrar u' co'#u'to "e H$aestroH registros. El usuario %ue"e %ro5u'"i0ar e' u'o "e los
registros $aestros1 co' lo 6ue 3er 6ue registro $aestro "e H"etallesH. Maestro A "etalle los
i'5or$es so' u'a o%ci!' i"eal %ara la 3isuali0aci!' "e las relacio'es u'oIaI$uchos1 co$o
u' i'5or$e 6ue $uestra to"as las categorBas ) 6ue %er$ite al usuario seleccio'ar u'a
categorBa e' %articular ) $ostrar sus %ro"uctos asocia"os. A"e$.s1 el $aestro A "etalle los
i'5or$es so' <tiles %ara $ostrar i'5or$aci!' "etalla"a "e to"o Ha'choH ta+las 8los 6ue
tie'e' u'a gra' ca'ti"a" "e colu$'as:. Por e#e$%lo1 el H$aestroH a 'i3el "e u' i'5or$e
$aestro A "etalle %ue"e $ostrar s!lo el 'o$+re "el %ro"ucto ) el %recio u'itario "e los
%ro"uctos e' la +ase "e "atos1 ) la %er5oraci!' hacia a+a#o e' u' %ro"ucto e' %articular se
$uestra' los ca$%os "e %ro"uctos a"icio'ales 8categorBa1 %ro3ee"or1 la ca'ti"a" %or
u'i"a"1 ) asB sucesi3a$e'te:.
Ha) $uchas $a'eras co' las 6ue %ue"e ser u' i'5or$e $aestro A "etalle
i$%le$e'ta"o. Dura'te este ) los tutoriales siguie'tes tres 3a$os a 3er u'a 3arie"a" "e
i'5or$es "e $aestro A "etalle. E' este tutorial 3a$os a 3er c!$o se $uestra' los registros
$aestros e' u' co'trol Dro%Do4'9ist ) los "etalles "el ele$e'to "e la lista seleccio'a"a
e' u' Dri"7ie4. E' %articular1 este tutorial "e $aestro A "etalle i'5or$e lista "e categorBas
) %ro"uctos.
Paso 1: Visuali%acin de las categorCas en un
2rop2o0n*ist
Nuestro $aestro A "etalle el i'5or$e $ostrar. u'a lista "e las categorBas e' u'
Dro%Do4'9ist1 co' los %ro"uctos "el ele$e'to "e la lista seleccio'a"a se $uestra $.s
a+a#o e' la %.gi'a e' u' Dri"7ie4. 9a %ri$era tarea %or "ela'te "e 'osotros1 e'to'ces1 es
6ue las categorBas $ostra"as e' u'a lista "es%lega+le. A+ra
el FilterByDropDownList.aspx%.gi'a e' el filtrado de car%eta1 arrastre e' u' Dro%Do4'9ist
"es"e el Cua"ro "e herra$ie'tas al "ise=a"or "e la %.gi'a1 ) esta+lecer su identificacin
de la %ro%ie"a" "e las categoras . A co'ti'uaci!'1 haga clic e' el e'lace Elegir orige' "e
"atos "e la eti6ueta i'telige'te "el Dro%Do4'9ist. Esto $ostrar. el orige' "e "atos "el
asiste'te "e co'5iguraci!'.
Figura 1 7speci'icar origen de datos de la 2rop2o0n*ist
G%tar %or a=a"ir u' 'ue3o G+#ectDataSource lla$a"o CategoriesDataSource 6ue i'3oca
el CategoriesBLL claseGetCategories () $-to"o.
Figura + .gregar un nue!o 4b6ect2ata(ource no#bre CategoriesDataSource
Figura 1 4ptar por utili%ar el Categories,LL clase
Figura 3 Con'igurar el 4b6ect2ata(ource $tili%ar el GetCategories &' &?todo
Des%u-s "e co'5igurar el G+#ectDataSource to"a3Ba te'e$os 6ue es%eci5icar 6u- ca$%o "e
"atos "e orige' se "e+e $ostrar e' Dro%Do4'9ist ) 6ue se "e+e asociar el 3alor "el
ele$e'to "e lista. Tie'e' la CategoryName ca$%o co$o la %a'talla ) CategoryID co$o el 3alor
"e ca"a ele$e'to "e la lista.
Figura - Tienen el 2rop2o0n*ist &ostrar el Categor6!ame ca#po y el
uso Categor6ID co#o el !alor
E' este $o$e'to te'e$os u' co'trol Dro%Do4'9ist 6ue se relle'a co' los registros "e
la Categoras "e $esa 8to"o se logr! e' u'os seis segu'"os:. 9a 5igura 6 $uestra 'uestro
%rogreso hasta ahora cua'"o se 3e a tra3-s "e u' 'a3ega"or.
Figura 8 $n listas desplegables las categorCas actuales
Paso +: .gregar el 9ridVie0 Productos
Este <lti$o %aso e' 'uestro $aestro A "etalle "el i'5or$e es hacer u'a lista "e los
%ro"uctos asocia"os co' la categorBa seleccio'a"a. Para lograr esto1 agregar u' Dri"7ie4 a
la %.gi'a ) crear u' 'ue3o lla$a"o G+#ectDataSourceproductsDataSource . Tie'e'
la productsDataSource sacri5icio co'trolar sus "atos "e
la ProductsBLL claseGetProductsByCategoryID ( IdCategora ) $-to"o.
Figura : (eleccione la GetProducts,6Categor6ID & IdCategora ' &?todo
Des%u-s "e elegir este $-to"o1 el asiste'te G+#ectDataSource 'os %i"e el 3alor %ara el
$-to"o "e categoryID%ar.$etro. Para utili0ar el 3alor "e los seleccio'a"os categoras %u'to
Dro%Do4'9ist esta+lecer el orige' "e los %ar.$etros %ara el Co'trol ) la Co'trol&D
"e Categoras .
Figura ; 7stablecer el IdCategora par=#etro en el !alor de
las Categor=as 2rop2o0n*ist
T!$ese u' $o$e'to %ara 3er 'uestro %rogreso e' u' 'a3ega"or. 9a %ri$era 3e0 6ue 3isita
la %.gi'a1 los %ro"uctos %erte'ece' a la categorBa seleccio'a"a 8;e+i"as: se $uestra'
8co$o se $uestra e' la Eigura K:1 %ero ca$+ia'"o el Dro%Do4'9ist 'o actuali0a los
"atos. Esto se "e+e a u'a "e3oluci!' "e "atos "e+e ocurrir %ara 6ue el co'trol Dri"7ie4
%ara actuali0ar. Para lograr esto te'e$os "os o%cio'es 8'i'gu'o "e los cuales es 'ecesario
escri+ir 'i'g<' c!"igo:(
7stablecer el 2rop2o0n*ist categorCas de %ro%ie"a" AutoPost;ac? en
True 8Esto se %ue"e hacer seleccio'a'"o la o%ci!' Ha+ilitar AutoPost;ac? e' la
eti6ueta i'telige'te "el Dro%Do4'9ist.: Esto "ar. lugar a u'a "e3oluci!' "e "atos
cua'"o el ele$e'to seleccio'a"o "el co'trol Dro%Do4'9ist es ca$+ia"o %or el
usuario.Por lo ta'to1 cua'"o el usuario seleccio'a u'a 'ue3a categorBa "e la
Dro%Do4'9ist u'a "e3oluci!' "e "atos se %ro"ucir. ) el Dri"7ie4 se actuali0a co'
los %ro"uctos "e la categorBa 6ue aca+a "e seleccio'ar. 8Este es el $-to"o 6ue he
utili0a"o e' este tutorial.:
.gregue un control Web Dutton al lado de la lista desplegable Esta+le0ca
su texto %ara actuali0ar la %ro%ie"a" o algo si$ilar. Co' este e'5o6ue1 el usuario
te'"r. 6ue seleccio'ar u'a 'ue3a categorBa ) haga clic e' el +ot!'. Al hacer clic e'
el +ot!' har. u'a "e3oluci!' "e "atos ) actuali0ar el Dri"7ie4 a la lista "e los
%ro"uctos "e la categorBa seleccio'a"a.
9as 5iguras K ) 10 ilustra' el i'5or$e $aestro A "etalle e' la acci!'.
Figura < *a pri#era !e% Bue !isita la p=gina> los productos de bebida es
#ostrado
Figura 1, (eleccin de un nue!o producto (Produce) auto#=tica#ente causa un
PostDacJ> .ctuali%acin del 9ridVie0
.dicin de una @K (eleccione una categorCa K@ ele#ento de lista
9a %ri$era 3e0 6ue 3isita la FilterByDropDownList.aspx %.gi'a "el artBculo "e la
Dro%Do4'9ist categorBas "e la %ri$era lista 8"e co'su$o: est. seleccio'a"a %or "e5ecto1
6ue $uestra los %ro"uctos "e +e+i"as e' el Dri"7ie4. E' lugar "e $ostrar los %ro"uctos "e
la %ri$era categorBa1 'os %ue"e 6uerer te'er lugar u' ele$e'to seleccio'a"o "e
Dro%Do4'9ist 6ue "ice algo co$o1 HI Seleccio'e u'a categorBa IH.
Para agregar u' 'ue3o ele$e'to "e lista a la Dro%Do4'9ist1 3a)a a la 3e'ta'a Pro%ie"a"es
) haga clic e' los %u'tos sus%e'si3os e' los elementos de la %ro%ie"a". A=a"ir u' 'ue3o
ele$e'to "e lista co' el texto HI Seleccio'e u'a categorBa IH ) el valor -1 .
Figura 11 .5adir a @K 7legir una categorCa K@ ele#ento de lista
Alter'ati3a$e'te1 uste" %ue"e agregar el ele$e'to "e la lista1 a=a"ie'"o el siguie'te
$arca"o "e la Dro%Do4'9ist(
<Asp: DropDownList ID = "categoras" runat = "server" AutoPostBack = "True" DataSourceID =
"categoriesDataSource"
DataTextField = "CategoryName" DataValueField = "CategoryID" EnableViewState =
"false">
<asp:ListItem Value="-1"> - Elija una Categora - </ asp: ListItem>
</ Asp: DropDownList>
A"e$.s1 'ecesita$os esta+lecer el co'trol Dro%Do4'9ist AppendDataBoundItems e' True1
%or6ue cua'"o las categorBas est.' o+liga"os a la Dro%Do4'9ist "es"e el
G+#ectDataSource 6ue 3a' a so+rescri+ir los ele$e'tos "e la lista $a'ual$e'te a=a"i"o
si AppendDataBoundItems 'o es cierto.
Figura 1+ 7stablecer el AppendData,oundItems propiedad en True
Des%u-s "e estos ca$+ios1 la %ri$era 3e0 6ue 3isita la %.gi'a "el HI Seleccio'e u'a
categorBa IH est. seleccio'a"a ) 'o so' %ro"uctos 6ue se $uestra'.
Figura 11 7n la p=gina inicial de carga de productos se #uestran /o
9a ra0!' 'o se $uestra' cua'"o los %ro"uctos "e+i"o a 6ue el HI Seleccio'e u'a categorBa
IH ele$e'to "e la lista se seleccio'a se "e+e a 6ue su 3alor es -1 ) 'o ha) %ro"uctos e' la
+ase "e "atos co' u' CategoryID "e -1 . Si este es el co$%orta$ie'to 6ue uste" "esea1
luego 6ue ha)a ter$i'a"o e' este $o$e'toC Si' e$+argo1 si "esea $ostrar todos los"e
las categorBas cua'"o el HI Seleccio'e u'a categorBa IH ele$e'to "e la lista est.
seleccio'a"o1 3uel3a a laProductsBLL clase ) %erso'ali0ar el GetProductsByCategoryID
( IdCategora ) el $-to"o %ara 6ue se i'3oca elGetProducts () $-to"o si el %asa"o
e' categoryID %ar.$etro es $e'or 6ue cero(
pblica Northwind.ProductsDataTable GetProductsByCategoryID (int categoryID)
{
if (IdCategora <0)
GetProducts retorno ();
ms
volver Adapter.GetProductsByCategoryID (IdCategora);
}
9a t-c'ica utili0a"a es si$ilar al e'5o6ue 6ue se utili0a %ara $ostrar a to"os los
%ro3ee"ores "e 3uelta e' el tutorial "e %ar.$etros "eclarati3a 1 au'6ue e' este e#e$%lo
esta$os usa'"o u' 3alor "e -1 %ara i'"icar 6ue to"os los registros "e+e' ser recu%era"os
e' lugar "e nulo . Esto se "e+e a la categoryID %ar.$etro "e la GetProductsByCategoryID
(IdCategora ) $-to"o es%era co$o 3alor e'tero 6ue se %asa e'1 $ie'tras 6ue e' el
tutorial "e %ar.$etros "eclarati3a 6ue %asa+a' e' u' %ar.$etro "e la ca"e'a "e e'tra"a.
9a 5igura 1/ $uestra u'a ca%tura "e %a'talla "e FilterByDropDownList.aspx cua'"o el HI
Seleccio'e u'a categorBa IH est. seleccio'a"a. A6uB1 to"os los %ro"uctos se $uestra' %or
"e5ecto ) el usuario %ue"e re"ucir la %a'talla eligie'"o u'a categorBa es%ecB5ica.
Figura 13 Todos los productos est=n a"ora aparece de 'or#a predeter#inada
Fesu#en
Cua'"o se $uestra' los "atos #er.r6uica$e'te relacio'a"os1 a $e'u"o a)u"a a %rese'tar
los "atos co' $aestro A "etalle los i'5or$es1 "e los cuales el usuario %ue"e co$e'0ar "e
leer los "atos "es"e la %arte su%erior "e la #erar6uBa ) %ro5u'"i0ar e' los "etalles. E' este
tutorial 3a$os a ea$i'ar la co'strucci!' "e u'a si$%le relaci!' $aestro A "etalles "el
i'5or$e 6ue $uestra los %ro"uctos "e u'a categorBa seleccio'a"a. Esto se logr! $e"ia'te
el uso "e u' Dro%Do4'9ist %ara la lista "e categorBas ) u' Dri"7ie4 %ara los %ro"uctos 6ue
%erte'ece' a la categorBa seleccio'a"a.
E' el siguie'te tutorial 3a$os a to$ar la i'ter5a0 Dro%Do4'9ist u' %aso $.s all.1 utili0a'"o
"os Dro%Do4'9ists.
Progra$aci!' 5eli0C

Tutorial ;: &aestro I 2etalle de 'iltrado con
dos 2rop2o0n*ists

Scott Mitchell
06 2006
Descargue el ASPNET_Data_Tutorial_P_CS.ee c!"igo "e e#e$%lo.
Descargar el cdigo de ejemplo ASPNET_Data_Tutorial_#_CS.exe.
Contenido del Tutorial ; (Visual C #)
&'tro"ucci!'
Paso 1( Crear ) lle'ar el co'trol Dro%Do4'9ist CategorBas
Paso 2( 7isuali0aci!' "e los %ro"uctos "e la categorBa seleccio'a"a e' u' Dro%Do4'9ist
Segu'"o
Paso ,( El uso "e u' Details7ie4 %ara $ostrar los "etalles %ara el %ro"ucto seleccio'a"o
Resu$e'
Introduccin
E' el tutorial a'terior se a'ali0! c!$o $ostrar u' $aestro se'cillo A "etalles "el i'5or$e
co' u' Dro%Do4'9ist <'ico %o+la"o "e las categorBas ) u' Dri"7ie4 6ue $uestra los
%ro"uctos 6ue %erte'ece' a la categorBa seleccio'a"a. Este $o"elo 5u'cio'a +ie' cua'"o
se i'5or$e $ostra'"o los registros 6ue tie'e' u'a relaci!' u'o a $uchos ) %ue"e
a$%liarse 5.cil$e'te %ara tra+a#ar e' esce'arios 6ue i'clu)e' $<lti%les relacio'es u'oIaI
$uchos. Por e#e$%lo1 u' siste$a "e e'tra"a "e %e"i"os 6ue tie'e ta+las 6ue corres%o'"e'
a clie'tes1 %e"i"os ) lB'eas "e %e"i"o. >' clie'te "eter$i'a"o %ue"e te'er 3arios %e"i"os
co' ca"a %e"i"o 6ue co'sta "e 3arios ele$e'tos. Estos "atos %ue"e' ser %rese'ta"os al
usuario co' "os Dro%Do4'9ists ) u' Dri"7ie4. El Dro%Do4'9ist %ri$ero te'"rBa u'
ele$e'to "e la lista %ara ca"a clie'te e' la +ase "e "atos co' el co'te'i"o "e la segu'"a
es 6ue los %e"i"os "e los clie'tes seleccio'a"os.>' Dri"7ie4 6ue la lista "e artBculos "e
lB'ea "e la or"e' seleccio'a"a.
Au'6ue la +ase "e "atos North4i'" i'clu)e el clie'te ca'!'ica A %e"i"o A i'5or$aci!' "e
"etalles e' su clientes 1pedidos ) detalles del pedido ta+las1 estas ta+las 'o se re5le#a e'
'uestra ar6uitectura. Si' e$+argo1 to"a3Ba %ue"e ilustrar co' "os Dro%Do4'9ists
"e%e'"ie'tes. El Dro%Do4'9ist %ri$era lista "e las categorBas ) el segu'"o "e los
%ro"uctos 6ue %erte'ece' a la categorBa seleccio'a"a. A co'ti'uaci!'1 a%arecer. u'a lista
Details7ie4 los "etalles "el %ro"ucto seleccio'a"o.
Paso 1: Crear y llenar el control 2rop2o0n*ist
CategorCas
Nuestro %ri$er o+#eti3o es agregar el co'trol Dro%Do4'9ist 6ue se e'u$era' las
categorBas. Estas $e"i"as se ea$i'ar.' e' "etalle e' el tutorial a'terior1 %ero se
resu$e' a6uB %ara co$%letar.
A+ra el MasterDetailsDetails.aspx %.gi'a e' el filtrado de car%eta1 agregue u'
Dro%Do4'9ist a la %.gi'a1 co'5igurar su ID "e %ro%ie"a" "e las categoras 1 a co'ti'uaci!'1
haga clic e' el e'lace Co'5igurar "atos "e orige' e' su eti6ueta i'telige'te. Des"e el
Asiste'te %ara co'5iguraci!' "e orBge'es "e "atos o%tar %or a=a"ir u'a 'ue3a 5ue'te "e
"atos.
Figura 1 .5adir un nue!o origen de datos para el 2rop2o0n*ist
9a 'ue3a 5ue'te "e "atos "e+e1 'atural$e'te1 ser u' G+#ectDataSource. El 'o$+re "e este
'ue3o G+#ectDataSourceCategoriesDataSource ) tie'e' 6ue i'3ocar
el CategoriesBLL o+#eto GetCategories () $-to"o.
Figura + 4ptar por utili%ar el Categories,LL clase
Figura 1 Con'igurar el 4b6ect2ata(ource $tili%ar el GetCategories &' &?todo
Des%u-s "e co'5igurar el G+#ectDataSource to"a3Ba te'e$os 6ue es%eci5icar 6u- ca$%o "e
"atos "e orige' se "e+e $ostrar e' la Categoras Dro%Do4'9ist ) 6ue u'o "e+e estar
co'5igura"o co$o el 3alor "el ele$e'to "e la lista.Esta+lecer el CategoryName ca$%o co$o
la %a'talla ) CategoryID co$o el 3alor "e ca"a ele$e'to "e la lista.
Figura 3 Tienen el 2rop2o0n*ist &ostrar el Categor6!ame ca#po y el
uso Categor6ID co#o el !alor
E' este $o$e'to te'e$os u' co'trol Dro%Do4'9ist 8 categoras : 6ue se relle'a co' los
registros "e la Categoras"e $esa. Cua'"o el usuario elige u'a 'ue3a categorBa "e la
Dro%Do4'9ist 3a$os a 6uerer u'a "e3oluci!' "e "atos 6ue se %ro"u0ca' co' el 5i' "e
actuali0ar la Dro%Do4'9ist %ro"ucto 6ue 3a$os a crear e' el %aso 2. Por lo ta'to1 $arcar la
o%ci!' Ha+ilitar AutoPost;ac? "e la categora "e eti6uetas i'telige'tes Dro%Do4'9ist.
Figura - Aabilitar .utoPostDacJ para la Categor=as 2rop2o0n*ist
Paso +: Visuali%acin de los productos de la
categorCa seleccionada en un 2rop2o0n*ist segundo
Co' la Categoras Dro%Do4'9ist co$%leta"o1 el siguie'te %aso es $ostrar u' Dro%Do4'9ist
"e los %ro"uctos 6ue %erte'ece' a la categorBa seleccio'a"a. Para lograr esto1 a=a"ir otro
Dro%Do4'9ist a la %.gi'a "e'o$i'a"aProductsByCategory . Al igual 6ue co'
las Categoras Dro%Do4'9ist1 crear u' 'ue3o G+#ectDataSource %ara
elProductsByCategory Dro%Do4'9ist lla$a"o ProductsByCategoryDataSource .
Figura 8 .5adir un nue!o origen de datos para el Products,6Categor6 2rop2o0n*ist
Figura : Crear un nue!o 4b6ect2ata(ource no#bre Products,6Categor6DataSource
Des"e el ProductsByCategory Dro%Do4'9ist 'ecesita $ostrar s!lo los %ro"uctos 6ue
%erte'ece' a la categorBa seleccio'a"a1 tie'e la G+#ectDataSource i'3ocar
la GetProductsByCategoryID ( IdCategora ) $-to"o "e laProductsBLL o+#eto.
Figura ; 4ptar por utili%ar el Products,LL clase
Figura < Con'igurar el 4b6ect2ata(ource $tili%ar el GetProducts,6Categor6ID
& IdCategora ' &?todo
E' el <lti$o %aso "el asiste'te es 'ecesario es%eci5icar el 3alor "e
la categoryID %ar.$etro. Asig'e a este %ar.$etro %ara el ele$e'to seleccio'a"o "e
la Categoras Dro%Do4'9ist.
Figura 1, Tire de la categoryID !alor del par=#etro de las Categor=as 2rop2o0n*ist
Co' el G+#ectDataSource co'5igura"o1 lo <'ico 6ue 6ue"a es %ara es%eci5icar 6u- ca$%os
"e "atos "e orige' se utili0a' %ara la 3isuali0aci!' ) el 3alor "e los ele$e'tos "el
Dro%Do4'9ist. Mostrar el ProductName ca$%o ) utili0ar elProductID ca$%o co$o 3alor.
Figura 11 7speci'icar los ca#pos de 'uente de datos utili%ada para el
2rop2o0n*ist ListItem s L Te(to y /alor delas propiedades
Co' el G+#ectDataSource ) ProductsByCategory Dro%Do4'9ist co'5igura"o 'uestra %.gi'a
$ostrar. "os Dro%Do4'9ists( la %ri$era lista "e to"as las categorBas1 $ie'tras 6ue la
segu'"a $ostrar. u'a lista "e los %ro"uctos 6ue %erte'ece' a la categorBa
seleccio'a"a. Cua'"o el usuario seleccio'a u'a 'ue3a categorBa "e la Dro%Do4'9ist e'
%ri$er lugar1 u'a "e3oluci!' "e "atos se %ro"ucir. ) el Dro%Do4'9ist segu'"o ser. "e
re+ote1 6ue $uestra los %ro"uctos 6ue %erte'ece' a la categorBa 6ue aca+a "e
seleccio'ar. Eiguras 12 ) 1, $uestra'MasterDetailsDetails.aspx e' acci!' cua'"o se 3e a
tra3-s "e u' 'a3ega"or.
Figura 1+ *a pri#era !e% Bue !isita la p=gina> la categorCa de bebidas se
selecciona
Figura 11 7legir una categorCa di'erente &uestra de Productos de la nue!a
categorCa de
Actual$e'te1 el productsByCategory Dro%Do4'9ist1 si se ca$+ia'1 'o + no causa u'a
"e3oluci!' "e "atos. Si' e$+argo1 6uere$os 6ue se %ro"u0ca u'a "e3oluci!' "e "atos u'a
3e0 6ue a=a"i$os u' Details7ie4 %ara $ostrar los "etalles "el %ro"ucto seleccio'a"o
8%aso ,:. Por lo ta'to1 $arca la casilla Ha+ilitar AutoPost;ac?
"el productsByCategory eti6ueta i'telige'te Dro%Do4'9ist.
Figura 13 .cti!ar la 'uncin de .utoPostDacJ para
el products,6Categor6 2rop2o0n*ist
Paso 1: 7l uso de un 2etailsVie0 para #ostrar los
detalles del producto seleccionado
El <lti$o %aso co'siste e' $ostrar los "etalles %ara el %ro"ucto seleccio'a"o e' u'
Details7ie4. Para lograr esto1 agregue u' Details7ie4 a la %.gi'a1 co'5igurar su ID "e la
%ro%ie"a" Detalles del producto 1 ) crear u' 'ue3o G+#ectDataSource %ara ello. Co'5igurar
este G+#ectDataSource a retirar sus "atos "e la ProductsBLL claseGetProductByProductID
( productID ) $-to"o 6ue utili0a el 3alor seleccio'a"o "e
la ProductsByCategoryDro%Do4'9ist %ara el 3alor "e la productID %ar.$etro.
Figura 1- 4ptar por utili%ar el Products,LL clase
Figura 18 Con'igurar el 4b6ect2ata(ource $tili%ar el GetProduct,6ProductID
& productID ' &?todo
Figura 1: Tire de la productID !alor del par=#etro de
la Products,6Categor6 2rop2o0n*ist
>ste" %ue"e o%tar %or %rese'tar cual6uiera "e los ca$%os "is%o'i+les e' el
Details7ie4. He o%ta"o %or 6uitar elProductID 1 IdProveedor ) CategoryID ca$%os ) reor"e'ar
) "ar 5or$ato a los ca$%os resta'tes. A"e$.s1 $e li$%i! el Details7ie4 "e altura ) ancho
de las %ro%ie"a"es1 %er$itie'"o 6ue el Details7ie4 %ara a$%liar el a'cho 'ecesario %ara
$ostrar sus $e#ores "atos e' lugar "e te'er 6ue li$ita a u' ta$a=o es%eci5ica"o. El
$arca"o co$%leto a%arece a co'ti'uaci!'(
<Asp: DetailsView ID = "Detalles del producto" runat = "server" AutoGenerateRows = "false"
DataKeyNames = "ProductID"
DataSourceID = "ObjectDataSource1" EnableViewState = "false">
<Fields>
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True"
SortExpression="CategoryName" />
<asp:BoundField DataField="SupplierName" HeaderText="Supplier" ReadOnly="True"
SortExpression="SupplierName" />
<asp:BoundField DataField="QuantityPerUnit" HeaderText="Qty/Unit"
SortExpression="QuantityPerUnit" />
<Asp: BoundField DataField = "UnitPrice" DataFormatString = "{0: c}" HeaderText =
"Precio"
HtmlEncode = "false" SortExpression = "UnitPrice" />
<asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock"
SortExpression="Units En Stock" />
<asp:BoundField DataField="UnitsOnOrder" HeaderText="UnitsOnOrder"
SortExpression="Units En Order" />
<asp:BoundField DataField="ReorderLevel" HeaderText="ReorderLevel"
SortExpression="Reorder Level" />
<asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
SortExpression="Discontinued" />
</ Campos>
</ Asp: DetailsView>
T!$ese u' $o$e'to %ara %ro+ar el MasterDetailsDetails.aspx %.gi'a e' u' 'a3ega"or. A
%ri$era 3ista %ue"e %arecer 6ue to"o est. 5u'cio'a'"o co$o se "esee1 %ero ha) u'
%ro+le$a sutil. Cua'"o se elige u'a 'ue3a categorBa "e la ProductsByCategory Dro%Do4'9ist
se actuali0a %ara i'cluir los %ro"uctos "e la categorBa seleccio'a"a1 %ero losDetalles del
producto Details7ie4 sigui! $ostra'"o la i'5or$aci!' "el %ro"ucto a'terior. El Details7ie4
se actuali0a la hora "e elegir u' %ro"ucto "i5ere'te %ara la categorBa
seleccio'a"a. A"e$.s1 si se %rue+a su5icie'te$e'te a 5o'"o1 uste" e'co'trar. 6ue si uste"
elige co'ti'ua$e'te 'ue3as categorBas 8co$o la elecci!' "e las +e+i"as "e
lascategoras Dro%Do4'9ist1 a co'ti'uaci!'1 co'"i$e'tos1 luego Co'5eccio'es: ca"a
selecci!' "e categorBa "e otras causas "e la Detalles del producto Details7ie4 se actualice.
Para a)u"ar a co'cretar este %ro+le$a1 3ea$os u' e#e$%lo co'creto. 9a %ri$era 3e0 6ue
3isita la %.gi'a "e la categorBa "e +e+i"as se ha seleccio'a"o ) los %ro"uctos relacio'a"os
se carga' e' el ProductsByCategory Dro%Do4'9ist. Chai es el %ro"ucto seleccio'a"o ) sus
"etalles se $uestra' e' los Detalles del producto Details7ie41 co$o se $uestra e' la
Eigura 1P.
Figura 1; 2etalles del producto seleccionado se #uestran en un 2etailsVie0
Si ca$+ia la selecci!' "e categorBas "e +e+i"as "e co'"i$e'tos1 se %ro"uce u'a
"e3oluci!' "e "atos ) laProductsByCategory Dro%Do4'9ist se actuali0a e' co'secue'cia1
%ero to"a3Ba Details7ie4 $uestra los "etalles "e Chai.
Figura 1< 2etalles del producto pre!ia#ente seleccionado se sigue #ostrando
Elegir u' 'ue3o %ro"ucto "e 6ue se actualice la lista "e los Details7ie4 co$o se
es%era+a. Si tie'es 6ue elegir u'a 'ue3a categorBa "es%u-s "e ca$+iar el %ro"ucto1 el
Details7ie4 "e 'ue3o1 'o se actuali0ar.. Si' e$+argo1 si e' lugar "e elegir u' 'ue3o
%ro"ucto 6ue ha seleccio'a"o u'a 'ue3a categorBa1 la actuali0aci!' se Details7ie4. 9o 6ue
e' el $u'"o 6ue est. %asa'"o a6uBR
El %ro+le$a es u' %ro+le$a "e si'cro'i0aci!' "el ciclo "e 3i"a "e la %.gi'a. Ca"a 3e0 6ue
se solicita u'a %.gi'a 6ue %roce"e a tra3-s "e u'a serie "e $e"i"as co$o su
re%rese'taci!'. E' u'o "e estos %asos los co'troles G+#ectDataSource co$%ro+ar %ara 3er
si algu'o "e sus SelectParameters 3alores ha' ca$+ia"o. Si es asB1 el co'trol "e ele$e'tos
*e+ e'la0a"o a "atos a los G+#ectDataSource sa+e 6ue 'ecesita %ara actuali0ar su
%a'talla. Por e#e$%lo1 cua'"o u'a 'ue3a categorBa se seleccio'a1
el ProductsByCategoryDataSource G+#ectDataSource "etecta 6ue sus 3alores "e los
%ar.$etros ha' ca$+ia"o ) la ProductsByCategory Dro%Do4'9ist se 3uel3e a e'la0ar1
co'seguir los %ro"uctos "e la categorBa seleccio'a"a.
El %ro+le$a 6ue surge e' esta situaci!' es 6ue el %u'to e' el ciclo "e 3i"a "e la %.gi'a
6ue la G+#ectDataSources co$%ro+ar los %ar.$etros $o"i5ica"os se %ro"uce antes de la
reco'soli"aci!' "e los co'troles 4e+ "e "atos asocia"o.Por lo ta'to1 al seleccio'ar u'a
'ue3a categorBa "e la ProductsByCategoryDataSource G+#ectDataSource "etecta u' ca$+io e'
el 3alor "e su %ar.$etro. El G+#ectDataSource utili0a el Detalles del producto Details7ie41
si' e$+argo1 'o se 'ota cual6uiera "e estos ca$+ios )a 6ue
el ProductsByCategory Dro%Do4'9ist a<' 'o ha si"o "e re+ote. M.s tar"e e' el ciclo "e 3i"a
"e la ProductsByCategory Dro%Do4'9ist 3uel3e a e'la0ar co' su G+#ectDataSource1 to$a'"o
los %ro"uctos "e la categorBa 6ue aca+a "e seleccio'ar. Mie'tras 6ue
el ProductsByCategory 3alor Dro%Do4'9ist ha ca$+ia"o1 el Detalles del producto Details7ie4
"e G+#ectDataSource )a ha hecho su che6ue el 3alor "el %ar.$etro1 %or lo ta'to1 el
Details7ie4 $uestra sus resulta"os a'teriores. Esta i'teracci!' se ilustra e' la Eigura 20.
Figura +, 7l Products,6Categor6 ca#bios 2rop2o0n*ist !alor despu?s de la Detalles
del producto 2etailsVie0 de 4b6ect2ata(ource busca ca#bios
Para solucio'ar este %ro+le$a te'e$os 6ue 3ol3er a 3i'cular e%lBcita$e'te el Detalles del
producto Details7ie4 "es%u-s "e la ProductsByCategory Dro%Do4'9ist se ha
o+liga"o. Po"e$os lograr esto $e"ia'te u'a lla$a"a alDetalles del producto Details7ie4
"e DataBind () cua'"o el $-to"o ProductsByCategory Dro%Do4'9istDataBound acti3a el
e3e'to. Agregue el c!"igo "e co'trola"or "e e3e'tos siguie'te a
la MasterDetailsDetails.aspxclase "e c!"igo su+)ace'te %.gi'a 8co'sulte A#uste "e la
%rogra$aci!' G+#ectDataSource 3alores "e los %ar.$etros%ara u'a "iscusi!' acerca "e
c!$o agregar u' co'trola"or "e e3e'tos:(
protected void ProductsByCategory_DataBound (object sender, EventArgs e)
{
ProductDetails.DataBind ();
}
Des%u-s "e esta lla$a"a e%lBcita a los Detalles del producto Details7ie4 "e DataBind
() $-to"o se ha a=a"i"o1 el tutorial 5u'cio'a co$o se es%era. Eigura 21 %o'e "e relie3e
c!$o esta situaci!' ca$+i! re$e"iar 'uestro %ro+le$a a'tes.
Figura +1 *os Detalles del producto 2etailsVie0 est= explCcita#ente se renue!a
cuando la Products,6Categor62rop2o0n*ist Data,ound e!ento se acti!a
Fesu#en
El Dro%Do4'9ist sir3e co$o u' ele$e'to "e i'ter5a0 "e usuario i"eal %ara los i'5or$es "e
$aestro A "etalle1 "o'"e ha) u'a relaci!' u'oIaI$uchos e'tre el $aestro ) los registros "e
"etalle. E' el tutorial a'terior 3i$os c!$o utili0ar u' solo Dro%Do4'9ist %ara 5iltrar los
%ro"uctos ehi+i"os %or la categorBa seleccio'a"a. E' este tutorial he$os ree$%la0a"o el
Dri"7ie4 "e %ro"uctos co' u' Dro%Do4'9ist1 ) utili0! u' Details7ie4 %ara $ostrar los
"etalles "el %ro"ucto seleccio'a"o. 9os co'ce%tos "iscuti"os e' este tutorial se %ue"e
ete'"er 5.cil$e'te a los $o"elos "e "atos 6ue i$%lica' $<lti%les relacio'es u'oIaI
$uchos1 tales co$o clie'tes1 %e"i"os ) artBculos "e la or"e'. E' ge'eral1 sie$%re se %ue"e
a=a"ir u' Dro%Do4'9ist %ara ca"a u'o "e los Hu'oH e'ti"a"es e' las relacio'es u'oIaI
$uchos.
Progra$aci!' 5eli0C

Tutorial <: &aestro I 2etalle de 'iltrado en dos
p=ginas

Scott Mitchell
06 2006
Descargue el ASPNET_Data_Tutorial_K_CS.ee c!"igo "e e#e$%lo.
Descargar el cdigo de ejemplo ASPNET_Data_Tutorial_$_CS.exe.
Contenido del Tutorial < (Visual C #)
&'tro"ucci!'
Paso 1( Agregar %.gi'as Su%%lier9istMaster.as% ) Pro"uctsEorSu%%lierDetails.as% a la
car%eta "e Eiltros
Paso 2( 7isuali0aci!' "e la lista "e %ro3ee"ores Su%%lier9istMaster.as%
Paso ,( 9ista"o "e los %ro"uctos "el %ro3ee"or e' Pro"uctsEorSu%%lierDetails.as%
Resu$e'
Introduccin
E' los <lti$os "os tutoriales 3i$os c!$o $ostrar $aestro A "etalle los i'5or$es e' u'a
<'ica %.gi'a 4e+ co' Dro%Do4'9ists %ara $ostrar el H$aestroH "e registros ) u' co'trol
Dri"7ie4 o Details7ie4 %ara $ostrar los H"etallesH.Gtro %atr!' co$<' utili0a"o %ara los
i'5or$es "e $aestro A "etalle es 6ue los registros $aestros e' u'a %.gi'a *e+ ) los "atos
6ue a%arece' e' otro. >'a %.gi'a 4e+ "el 5oro1 co$o el Eoro ASP.NET 1 es u' gra' e#e$%lo
"e este %atr!' e' la %r.ctica. E' los 5oros "e ASP.NET se co$%o'e "e u'a 3arie"a" "e
5oros I Pri$eros %asos1 5or$ularios 4e+1 co'troles "e "atos "e %rese'taci!'1 ) asB
sucesi3a$e'te. Ca"a 5oro est. co$%uesto "e $uchos hilos ) ca"a hilo se co$%o'e "e u'
'<$ero "e %uestos. E' la %.gi'a %ri'ci%al ASP.NET Eoru$s1 los 5oros est.' e' la lista. Al
hacer clic e' u' 5oro te lle3a a u' ShowForum.aspx %.gi'a1 6ue $uestra los hilos "e ese
5oro. Del $is$o $o"o1 al hacer clic e' u' hilo te lle3a a ShowPost.aspx 1 6ue $uestra los
$e'sa#es e' el hilo 6ue se hi0o clic.
E' este tutorial 3a$os a %o'er e' %r.ctica este $o"elo $e"ia'te el uso "e u' Dri"7ie4 a
la lista "e los %ro3ee"ores e' la +ase "e "atos. Ca"a 5ila "e %ro3ee"ores e' el Dri"7ie4
co'tie'e u' e'lace 7er los %ro"uctos 6ue1 al hacer clic1 lle3ar. al usuario a otra %.gi'a 6ue
e'u$era los %ro"uctos 6ue el %ro3ee"or seleccio'a"o.
Paso 1:
.gregar SupplierList)aster.asp( yProducts<orSupplierDetails.asp( P=ginas
para el filtrado de la carpeta
Al "e5i'ir el "ise=o "e %.gi'a e' el tercer tutorial he$os a=a"i"o u'a serie "e Harra'6ueH
las %.gi'as "e laBasicReporting 1 filtrado 1 ) CustomFormatting car%etas. Si' e$+argo1 'o
a=a"i$os u'a %.gi'a "e i'icio %ara este tutorial e' ese $o$e'to1 asB 6ue to$e u'
$o$e'to %ara agregar "os 'ue3as %.gi'as la lista "e H$aestroH registros 8los
%ro3ee"ores:1 $ie'tras 6ue ProductsForSupplierDetails.aspx $ostrar. los %ro"uctos %ara el
%ro3ee"or seleccio'a"o.
Al crear estas "os 'ue3as %.gi'as %ara te'er la certe0a "e los asocia' co'
el Site.master %.gi'a %ri'ci%al.
Figura 1 .gregue el SupplierList)aster.asp( y Products<orSupplierDetails.asp( p=ginas
al filtrado de la carpeta
A"e$.s1 al a=a"ir 'ue3as %.gi'as al %ro)ecto1 aseg<rese "e actuali0ar el archi3o "e $a%a
"el sitio1 Web.sitemap 1 e' co'secue'cia. Para este tutorial s!lo tie'e 6ue
a=a"ir SupplierListMaster.aspx %.gi'a %ara el $a%a "el sitio co' el co'te'i"o OM9 siguie'te
co$o u' 'i=o "e los i'5or$es "e 5iltra"o <siteMapNode> ele$e'to(
<SiteMapNode url = "~ / Filtros / SupplierListMaster.aspx" title = "Maestro / Detalle en
dos pginas" description = "Los registros maestros en una pgina, los registros de
detalles en otra." />
/ota >ste" %ue"e a)u"ar a auto$ati0ar el %roceso "e actuali0aci!' "el archi3o "e $a%a
"el sitio al agregar 'ue3as %.gi'as ASP.NET co' \. Scott Alle' Ms gratis 7isual Stu"io Ma%a
"el Sitio Macro .
Paso +: Visuali%acin de la lista de
pro!eedores SupplierList)aster.asp(
Co' la SupplierListMaster.aspx ) ProductsForSupplierDetails.aspx %.gi'as crea"as1 el
siguie'te %aso es crear el Dri"7ie4 "e los %ro3ee"ores e' SupplierListMaster.aspx . A=a"ir
u' Dri"7ie4 a la %.gi'a ) se u'e' a u' 'ue3o G+#ectDataSource. Este G+#ectDataSource
"e+e utili0ar el SuppliersBLL clase GetSuppliers () %ara "e3ol3er a to"os los %ro3ee"ores.
Figura + (eleccione la Suppliers,LL clase
Figura 1 Con'igurar el 4b6ect2ata(ource $tili%ar el GetSuppliers &' &?todo
Te'e$os 6ue i'cluir u' e'lace titula"o Pro"uctos 7er e' ca"a 5ila Dri"7ie4 6ue1 al hacer
clic1 lle3a al usuario aProductsForSupplierDetails.aspx %asar e' la 5ila
seleccio'a"a IdProveedor 3alor a tra3-s "e la ca"e'a "e co'sulta.Por e#e$%lo1 si el usuario
hace clic e' el e'lace 7er Pro"uctos %ara el %ro3ee"or "e To?io co$ercia'tes 86ue tie'e
u'IdProveedor 3alor "e /:1 "e+e' ser e'3ia"os a ProductsForSupplierDetails.aspx?
IdProveedor = 4 .
Para lograr esto1 agregue u'a H)%er9i'?Eiel" al Dri"7ie41 lo 6ue a=a"e u' hi%er3B'culo a
ca"a 5ila "e Dri"7ie4. E$%iece hacie'"o clic e' el e'lace E"itar colu$'as "e la eti6ueta
i'telige'te "el Dri"7ie4. A co'ti'uaci!'1 seleccio'e la H)%er9i'?Eiel" "e la lista e' la %arte
su%erior i06uier"a ) haga clic e' A=a"ir %ara i'cluir la lista "e ca$%os H)%er9i'?Eiel" e' el
Dri"7ie4.
Figura 3 .5adir un Ayper*inJField al 9ridVie0
El H)%er9i'?Eiel" %ue"e ser co'5igura"o %ara utili0ar el $is$o teto o 3alores "e la >R9 "el
e'lace e' ca"a 5ila Dri"7ie41 o %ue"e +asar estos 3alores e' los "atos "e los 3alores lB$ite
%ara ca"a 5ila e' %articular. Para es%eci5icar u' 3alor est.tico e' to"as las 5ilas "e utili0ar el
H)%er9i'?Eiel" "e texto o NavigateUrl %ro%ie"a"es. Co$o 6uere$os 6ue el teto "el e'lace
sea el $is$o %ara to"as las 5ilas1 "e5i'a el H)%er9i'?Eiel" "e texto %ro%ie"a" %ara 3er los
%ro"uctos.
Figura - 7stablecer el Ayper*inJField de te(to Propiedad para !er los productos
Para esta+lecer los 3alores "e teto o >R9 6ue se +asa' e' los "atos su+)ace'tes
3i'cula"os a la 5ila "e Dri"7ie41 es%eci5icar los ca$%os "e "atos1 los 3alores "e teto o
"irecci!' >R9 "e+e ser retira"o "e
la DataTextField oDataNavigateUrlFields %ro%ie"a"es. DataTextField s!lo se %ue"e esta+lecer
a u' <'ico ca$%o "e "atos TDataNavigateUrlFields 1 si' e$+argo1 se %ue"e esta+lecer e'
u'a lista se%ara"a %or co$as "e los ca$%os "e "atos.Co' 5recue'cia 'ecesi"a" "e +asar el
teto o la >R9 "e u'a co$+i'aci!' "el 3alor "e la 5ila actual "e "atos "e ca$%o ) algu'as
$arcas est.ticas. E' este tutorial1 %or e#e$%lo1 6uere$os 6ue las >R9 "e los 3B'culos "el
H)%er9i'?Eiel" a serProductsForSupplierDetails.aspx? IdProveedor = supplierID 1
"o'"e supplierID ca"a 5ila Dri"7ie4 es elIdProveedor 3alor. Te'ga e' cue'ta 6ue
'ecesita$os 3alores est.ticos ) $a'e#o "e "atosIe' este caso(
laProductsForSupplierDetails.aspx IdProveedor =? %arte "e la >R9 "el e'lace es est.tico1
$ie'tras 6ue elsupplierID %arte es +asa"a e' "atos co$o su 3alor es ca"a 5ila "e la
%ro%ia IdProveedor 3alor.
Para i'"icar u'a co$+i'aci!' "e 3alores est.ticos ) co'trola"as %or "atos1 utilice
el DataTextFormatString )DataNavigateUrlFormatString %ro%ie"a"es. E' estas %ro%ie"a"es
e'trar e' el $arca"o est.tico co$o sea 'ecesario ) luego usar el $arca"or {0} 1 "o'"e
"esea 6ue el 3alor "el ca$%o es%eci5ica"o e'
la DataTextField oDataNavigateUrlFields %ro%ie"a"es a%are0ca'. Si
el DataNavigateUrlFields %ro%ie"a" tie'e .reas "e uso $<lti%le es%eci5ica"o {0} "o'"e
"esea 6ue el 3alor "el ca$%o i'tro"uce %or %ri$era 3e01 {1} %ara el 3alor "el ca$%o e'
segu'"o lugar1 ) asB sucesi3a$e'te.
A%lica'"o esto a 'uestro tutorial1 es 'ecesario esta+lecer
el DataNavigateUrlFields %ro%ie"a" IdProveedor 1 )a 6ue es el ca$%o "e "atos cu)o 3alor
te'e$os 6ue %erso'ali0ar e' u'a 5ila %or 5ila1 )
el DataNavigateUrlFormatString%ro%ie"a" ProductsForSupplierDetails.aspx? IdProveedor =
{0} .
Figura 8 Con'igurar el Ayper*inJField para incluir el $F* del enlace adecuada>
bas=ndose en el IdPro5eedor
Des%u-s "e a=a"ir el H)%er9i'?Eiel"1 'o "u"e e' $o"i5icar ) reor"e'ar los ca$%os "el
Dri"7ie4. El $arca"o siguie'te se $uestra el co'trol Dri"7ie4 "es%u-s "e 6ue he hecho
algu'as %e6ue=as a"a%tacio'es a 'i3el "e ca$%o.
<Asp: GridView ID = "GridView1" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "IdProveedor"
DataSourceID = "ObjectDataSource1" EnableViewState = "false">
<columnas>
<Asp: DataNavigateUrlFields HyperLinkField = "IdProveedor"
DataNavigateUrlFormatString = "? ProductsForSupplierDetails.aspx IdProveedor = {0}"
Text = "Ver los productos" />
<asp:BoundField DataField="CompanyName" HeaderText="Company"
SortExpression="CompanyName" />
<asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
<asp:BoundField DataField="Country" HeaderText="Country"
SortExpression="Country" />
</ Columns>
</ Asp: GridView>
To$e u' $o$e'to %ara 3er el SupplierListMaster.aspx %.gi'a a tra3-s "e u'
'a3ega"or. Co$o $uestra la Eigura Z se $uestra1 la %.gi'a cue'ta actual$e'te co' to"os
los %ro3ee"ores1 i'clu)e'"o u' e'lace 7er %ro"uctos. Al hacer clic e' el e'lace 7er los
%ro"uctos le lle3ar. a ProductsForSupplierDetails.aspx 1 %asa'"o %or el
%ro3ee"orIdProveedor e' la ca"e'a "e co'sulta.
Figura : Cada 'ila de pro!eedores contiene un enlace Ver Productos
Paso 1: *istado de los productos del pro!eedor
enProducts<orSupplierDetails.asp(
E' este %u'to el SupplierListMaster.aspx %.gi'a est. e'3ia'"o a los
usuarios ProductsForSupplierDetails.aspx 1 %asa'"o %or el %ro3ee"or
seleccio'a"o IdProveedor e' la ca"e'a "e co'sulta. ]lti$o %aso "el tutorial es $ostrar los
%ro"uctos e' u' Dri"7ie4 e' ProductsForSupplierDetails.aspx cu)a IdProveedor es igual a
la IdProveedor %asa a tra3-s "e la ca"e'a "e co'sulta. Para lograr esto e$%e0ar %or la
a"ici!' "e u' Dri"7ie4 a laProductsForSupplierDetails.aspx %.gi'a1 co' u' 'ue3o co'trol
G+#ectDataSource lla$a"oProductsBySupplierDataSource 6ue i'3oca
el GetProductsBySupplierID ( supplierID ) $-to"o "e laProductsBLL clase.
Figura ; .gregar un nue!o 4b6ect2ata(ource no#bre Products,6SupplierDataSource
Figura < (eleccione la Products,LL clase
Figura 1, Tienen el 4b6ect2ata(ource In!ocar el GetProducts,6SupplierID
& supplierID ' &?todo
El <lti$o %aso "el asiste'te Co'5igurar orige' "e "atos 'os %i"e 6ue %ro%orcio'e el orige'
"e laGetProductsBySupplierID ( supplierID ) $-to"o supplierID %ar.$etro. Para utili0ar el
3alor "e ca"e'a "e co'sulta1 esta+lecer el orige' "e los %ar.$etros "e ca"e'a "e co'sulta
) escri+a el 'o$+re "el 3alor "e ca"e'a "e co'sulta %ara su uso e' el cua"ro "e teto
@uer)Stri'gEiel" 8 IdProveedor :.
Figura 11 *lenar el supplierID !alor del par=#etro de la IdPro5eedor !alor de
cadenas de consulta
Eso es to"o lo 6ue ha) 6ue hacerC 9a 5igura 12 $uestra
el ProductsForSupplierDetails.aspx %.gi'a cua'"o es 3isita"o %or clic e' el e'lace "e To?io
co$ercia'tes "e SupplierListMaster.aspx .
Figura 1+ *os productos su#inistrados por operadores de ToJio para aparecer
Visuali%acin de in'or#acin de pro!eedores en Products<orSupplierDetails.asp(
Co$o $uestra la Eigura 121 el ProductsForSupplierDetails.aspx %.gi'a se li$ita a e'u$erar
los %ro"uctos 6ue so' su$i'istra"os %or el IdProveedor es%eci5ica"o e' la ca"e'a "e
co'sulta. Se ha e'3ia"o "irecta$e'te a esta %.gi'a1 si' e$+argo1 'o sa+e' 6ue la 5igura
12 se $uestra' los %ro"uctos "e los co$ercia'tes "e To?io. Para re$e"iar esta situaci!'
'os %ue"e $ostrar la i'5or$aci!' "el %ro3ee"or e' esta %.gi'a ta$+i-'.
Co$ie'ce %or la a"ici!' "e u' Eor$7ie4 %or e'ci$a "e la Dri"7ie4 %ro"uctos. Crear u'
'ue3o co'trol G+#ectDataSource lla$a"o SuppliersDataSource 6ue i'3oca
el SuppliersBLL clase GetSupplierBySupplierID (supplierID ) $-to"o.
Figura 11 (eleccione la Suppliers,LL clase
Figura 13 Tienen el 4b6ect2ata(ource In!ocar el GetSupplier,6SupplierID
& supplierID ' &?todo
Al igual 6ue co' el ProductsBySupplierDataSource 1 tie'e' la supplierID %ar.$etro asig'a"o
el 3alor "e laIdProveedor 3alor "e ca"e'a "e co'sulta.
Figura 1- *lenar el supplierID !alor del par=#etro de la IdPro5eedor !alor de
cadenas de consulta
Cua'"o se u'e el Eor$7ie4 al G+#ectDataSource e' la 3ista Dise=o1 7isual Stu"io crea
auto$.tica$e'te la Eor$7ie4ItemTemplate 1 InsertItemTemplate ) EditItemTemplate co'
co'troles 9a+el ) Tet;o *e+ %ara ca"a u'o "e los ca$%os "e "atos 6ue "e3uel3e el
G+#ectDataSource. La 6ue s!lo "esea $ostrar la i'5or$aci!' "el %ro3ee"or 'o "u"e e'
eli$i'ar la InsertItemTemplate ) EditItemTemplate . A co'ti'uaci!'1 e"itar el &te$Te$%late
%ara 6ue $uestre el 'o$+re "el %ro3ee"or "e la co$%a=Ba e' u' <h3> ele$e'to ) la
"irecci!'1 ciu"a"1 %aBs ) '<$ero "e tel-5o'o +a#o el 'o$+re "e la e$%resa. Si lo %re5iere1
%ue"e co'5igurar $a'ual$e'te el Eor$7ie4 DataSourceID ) crear elItemTemplate $arca"o1
co$o lo hici$os e' la 7isuali0aci!' "e "atos co' el G+#ectDataSource tutorial.
Des%u-s "e estas e"icio'es $arca"o "eclarati3o "el Eor$7ie4 "e+e ser si$ilar a lo
siguie'te(
<asp:FormView ID="FormView1" runat="server" DataKeyNames="SupplierID"
DataSourceID="suppliersDataSource" EnableViewState="False">
<ItemTemplate>
<h3> <% # Eval ("CompanyName")%> </ h3>
<p>
<Asp: Label = ID "DireccinEtiqueta" runat = "server" Text ='<%# Bind
("Direccin") %>'></ asp: Label> <br />
<Asp: Label = ID "CityLabel" runat = "server" Text ='<%# Bind ("Ciudad")
%>'></ asp: Label>,
<Asp: Label = ID "CountryLabel" runat = "server" Text ='<%# Bind ("Pas")
%>'></ asp: Label> <br />
Telfono:
<Asp: Label = ID "PhoneLabel" runat = "server" Text ='<%# Bind ("Telfono")
%>'></ asp: Label>
</ P>
</ ItemTemplate>
</ Asp: FormView>
9a 5igura 16 $uestra u'a ca%tura "e %a'talla "e la ProductsForSupplierDetails.aspx %.gi'a
"es%u-s "e 6ue el %ro3ee"or "e i'5or$aci!' "etalla"a a'terior$e'te se ha i'clui"o.
Figura 18 *a lista de productos incluye un resu#en sobre los pro!eedores
.plicar los toBues 'inales para la Products<orSupplierDetails.asp( inter'a% de
usuario
Para $e#orar la e%erie'cia "el usuario "e este i'5or$e1 ha) u' %ar "e a"icio'es 6ue
"e+e$os hacer a laProductsForSupplierDetails.aspx %.gi'a. Actual$e'te1 la <'ica $a'era
6ue u' usuario %ue"e %asar "e laProductsForSupplierDetails.aspx %.gi'a 3ol3er a la lista "e
%ro3ee"ores es hacer clic e' el +ot!' "e su 'a3ega"or "e 3uelta. 7a$os a agregar u'
co'trol H)%er9i'? a la ProductsForSupplierDetails.aspx %.gi'a 6ue e'la0a
co'SupplierListMaster.aspx 1 e' otra $a'era %ara 6ue el usuario 3uel3a a la lista $aestra.
Figura 1: .gregar un control Ayper*inJ para per#itir al usuario !ol!er
a SupplierList)aster.asp(
Si el usuario hace clic e' el e'lace 7er los %ro"uctos a u' %ro3ee"or 6ue 'o tie'e 'i'g<'
ti%o "e %ro"uctos1 laProductsBySupplierDataSource G+#ectDataSource
e' ProductsForSupplierDetails.aspx 'o "e3ol3er. 'i'g<' resulta"o. El Dri"7ie4 3i'cula"o a
G+#ectDataSource 'o hacer cual6uier ti%o "e c!"igo 6ue resulta e' u'a regi!' e' +la'co e'
la %.gi'a e' el 'a3ega"or "el usuario. Para co$u'icarse co' $a)or clari"a" %ara el
usuario 6ue 'o ha) %ro"uctos asocia"os co' el %ro3ee"or seleccio'a"o1 %o"e$os
esta+lecer el Dri"7ie4 EmptyDataText %ro%ie"a" al $e'sa#e 6ue "esee 6ue a%are0ca cua'"o
surge u'a situaci!' asB. He crea"o esta %ro%ie"a" a HNo ha) %ro"uctos 6ue o5rece este
%ro3ee"or ...H
Por "e5ecto1 to"os los %ro3ee"ores e' la +ase "e "atos Ne%tu'o %ro%orcio'ar al $e'os u'
%ro"ucto. Si' e$+argo1 %ara este tutorial he $o"i5ica"o $a'ual$e'te los productos de la
ta+la %ara 6ue el %ro3ee"or Caracoles Nou3eau )a 'o est. asocia"o co' 'i'g<'
%ro"ucto. 9a 5igura 1P $uestra la %.gi'a "e "etalles "e caracoles Nou3eau "es%u-s "e
este ca$+io se ha hecho.
Figura 1; 7l usuario Bueda in'or#ado de Bue el pro!eedor no proporciona los
productos
Fesu#en
Mie'tras $aestro A "etalle los i'5or$es %ue"e' $ostrar ta'to el $aestro ) los registros "e
"etalles e' u'a sola %.gi'a1 e' $uchos sitios 4e+ 6ue se se%ara' e' "os %.gi'as 4e+. E'
este tutorial 'os 5i#a$os e' c!$o i$%le$e'tar u' i'5or$e $aestro A "etalle co' los
%ro3ee"ores 6ue 5igura' e' u' Dri"7ie4 e' la %.gi'a "e H$aestroH 4e+ ) los %ro"uctos
asocia"os 6ue 5igura' e' los H"etallesH "e la %.gi'a. Ca"a 5ila "e %ro3ee"ores e' la %.gi'a
4e+ $aster co'te'Ba u' e'lace a la %.gi'a "e "etalles 6ue %asa' a lo largo "e la
5ila IdProveedor 3alor. Es%ecB5ico "e este ti%o "e 5ila e'laces se %ue"e' agregar 5.cil$e'te
usa'"o H)%er9i'?Eiel" el Dri"7ie4.
E' la %.gi'a "e "etalles la o+te'ci!' "e "ichos %ro"uctos %ara el %ro3ee"or es%eci5ica"o se
lle3! a ca+o $e"ia'te la i'3ocaci!' "e la ProductsBLL clase GetProductsBySupplierID
( supplierID ) $-to"o. El supplierID 3alor "el %ar.$etro se es%eci5ica $e"ia'te
"eclaraci!' utili0a'"o la ca"e'a "e co'sulta co$o el orige' "e %ar.$etro. Ta$+i-' 'os
5i#a$os e' c!$o se $uestra' los "etalles "el %ro3ee"or e' la %.gi'a "e "etalles co' u'
Eor$7ie4.
Nuestro siguie'te tutorial es el <lti$o "e los i'5or$es "e $aestro A "etalle. 7a$os a 3er
c!$o $ostrar u'a lista "e %ro"uctos e' u' Dri"7ie4 "o'"e ca"a 5ila tie'e u' +ot!' "e
selecci!'. Al hacer clic e' el +ot!' "e selecci!' se $ostrar.' los "etalles "e ese %ro"ucto
e' u' co'trol Details7ie4 e' la $is$a %.gi'a.
Progra$aci!' 5eli0C
Tutorial 1,: &aestro I detalle utili%ando un
9ridVie0 #aestro seleccionable con un
2etailVie0 2etalles

Scott Mitchell
06 2006
Descargue el ASPNET_Data_Tutorial_10_CS.ee c!"igo "e e#e$%lo.
Descargar el cdigo de ejemplo ASPNET_Data_Tutorial_1%_CS.exe.
Contenido del Tutorial 1, (Visual C #)
&'tro"ucci!'
Paso 1( Creaci!' "e u' Dri"7ie4 seleccio'a+le
Paso 2( Mostrar la i'5or$aci!' "el %ro"ucto seleccio'a"o e' u' Details7ie4
Resu$e'
Introduccin
E' el tutorial a'terior 3i$os c!$o crear u' i'5or$e $aestro A "etalle utili0a'"o "os %.gi'as
4e+( u' H$aestroH "e la %.gi'a 4e+1 "e la 6ue 'os $uestra la lista "e %ro3ee"ores1 ) u'
H"etallesH "e la %.gi'a 4e+ 6ue lista los %ro"uctos o5reci"os %or los seleccio'a"os
%ro3ee"or. Este 5or$ato "e "os %.gi'as el i'5or$e se %ue"e' resu$ir e' u'a sola
%.gi'a. Este tutorial tie'e u' Dri"7ie4 cu)as 5ilas i'clu)e' el 'o$+re ) el %recio "e ca"a
%ro"ucto1 #u'to co' u' +ot!' "e selecci!'. Al hacer clic e' el +ot!' "e selecci!' "e u'
"eter$i'a"o %ro"ucto har. 6ue sus "etalles se $uestra' e' u' co'trol Details7ie4 e' la
$is$a %.gi'a.
Figura 1 .l "acer clic en el botn de seleccin #uestra los detalles del Producto
Paso 1: Creacin de un 9ridVie0 seleccionable
Recor"e$os 6ue e' las "os %.gi'as $aestro A "etalle el i'5or$e 6ue ca"a registro $aestro
i'clu)e u' hi%er3B'culo 6ue1 cua'"o se hace clic1 e'3Ba al usuario a la %.gi'a "e "etalles "e
%asar la 5ila %ulsa"a la IdProveedor 3alor e' la ca"e'a "e co'sulta. >' e'lace "e hi%erteto
se a=a"i! a ca"a 5ila "e Dri"7ie4 utili0a'"o u' H)%er9i'?Eiel". Para la %.gi'a "e u' solo
$aestro A "etalles "el i'5or$e1 6ue te'"r. u' +ot!' %ara ca"a 5ila "e Dri"7ie4 6ue1 cua'"o
se hace clic1 $uestra los "etalles. El co'trol Dri"7ie4 se %ue"e co'5igurar %ara i'cluir u'
+ot!' Seleccio'ar %ara ca"a 5ila 6ue %ro3oca u'a "e3oluci!' "e "atos ) $arca la 5ila co$o
el Dri"7ie4 Selecte"Ro4 .
Co$ie'ce %or agregar u' co'trol Dri"7ie4 a la DetailsBySelecting.aspx %.gi'a e'
el filtrado de car%eta1 esta+lecie'"o su ID "e %ro%ie"a" "e ProductsGrid . A co'ti'uaci!'1
agregue u' 'ue3o G+#ectDataSource lla$a"oAllProductsDataSource 6ue i'3oca
el ProductsBLL clase GetProducts () $-to"o.
Figura + Crear un 4b6ect2ata(ource no#bre AllProductsDataSource
Figura 1 $tilice el Products,LL clase
Figura 3 Con'igurar el 4b6ect2ata(ource para in!ocar la GetProducts &' &?todo
Mo"i5icar los ca$%os "el Dri"7ie4 la eli$i'aci!' "e to"os1 %ero
el ProductName ) PrecioUnidad ;ou'"Eiel"s. A"e$.s1 'o "u"e e' $o"i5icar estos ;ou'"Eiel"s
seg<' sea 'ecesario1 co$o el 5or$ato "e la PrecioUnidad ;ou'"Eiel" co$o $o'e"a "e
ca$+io ) la HeaderText %ro%ie"a"es "e la ;ou'"Eiel"s. Estos %asos %ue"e' lle3arse a ca+o
gr.5ica$e'te1 hacie'"o clic e' el e'lace E"itar colu$'as "e la eti6ueta i'telige'te "el
co'trol Dri"7ie41 o %or la co'5iguraci!' $a'ual "e la si'tais "eclarati3a.
Figura - )uitar todas las Pero el Product!ame y Precionidad DoundFields
El $arge' "e +e'e5icio 5i'al %ara el Dri"7ie4 es el siguie'te(
<Asp: GridView ID = "ProductsGrid" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "ProductID"
DataSourceID = "AllProductsDataSource" EnableViewState = "false">
<columnas>
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
<Asp: BoundField DataField = "UnitPrice" DataFormatString = "{0: c}" HeaderText =
"Precio unitario"
HtmlEncode = "false" SortExpression = "UnitPrice" />
</ Columns>
</ Asp: GridView>
A co'ti'uaci!'1 te'e$os 6ue $arcar el Dri"7ie4 co$o seleccio'a+le1 lo 6ue a=a"ir. u'
+ot!' Seleccio'ar %ara ca"a 5ila. Para lograr esto1 si$%le$e'te $ar6ue la casilla "e
3eri5icaci!' Ha+ilitar la selecci!' e' la eti6ueta i'telige'te "el Dri"7ie4.
Figura 8 Aacer 'ilas del 9ridVie0 seleccionable
Marcar la o%ci!' Ha+ilitar Selecci!' a=a"e u' Co$$a'"Eiel" a la ProductsGrid Dri"7ie4
co' su ShowSelectButtonesta+lecer la %ro%ie"a" e' True. Esto se tra"uce e' u' +ot!'
Seleccio'ar %ara ca"a 5ila "e la Dri"7ie41 co$o ilustra la Eigura 6. De $a'era
%re"eter$i'a"a1 los +oto'es "e selecci!' se re%rese'ta' co$o 9i'?;utto's1 %ero %ue"e
utili0ar los +oto'es o &$age;utto's lugar a tra3-s "e la Co$$a'"Eiel"
"e ButtonType %ro%ie"a".
<Asp: GridView ID = "ProductsGrid" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "ProductID"
DataSourceID = "AllProductsDataSource" EnableViewState = "false">
<columnas>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
<Asp: BoundField DataField = "UnitPrice" DataFormatString = "{0: c}" HeaderText =
"Precio unitario"
HtmlEncode = "false" SortExpression = "UnitPrice" />
</ Columns>
</ Asp: GridView>
Cua'"o +ot!' Seleccio'ar "e u'a 5ila Dri"7ie4 se hace clic e' u'a "e3oluci!' "e "atos )
so+re3ie'e el Dri"7ie4SelectedRow %ro%ie"a" se actuali0a. A"e$.s "e
los SelectedRow %ro%ie"a"1 el co'trol Dri"7ie4 %ro%orcio'a
laSelecte"&'"e 1 Selecte"7alue ) Selecte"Data\e) %ro%ie"a"es. El SelectedIndex %ro%ie"a
" "e3uel3e el B'"ice "e la 5ila seleccio'a"a1 $ie'tras 6ue
el SelectedValue ) SelectedDataKey %ro%ie"a"es 3alores "e retor'o +asa"a e' el
Dri"7ie4 %ro%ie"a" Data\e)Na$es .
El DataKeyNames %ro%ie"a" se utili0a %ara asociar u'o o $.s 3alores "e los ca$%os "e "atos
co' ca"a 5ila ) se utili0a co$<'$e'te %ara la i"e'ti5icaci!' eclusi3a "e la i'5or$aci!' "e
atri+utos "e los "atos su+)ace'tes e' ca"a 5ila Dri"7ie4. El SelectedValue %ro%ie"a"
"e3uel3e el 3alor "e la %ri$era DataKeyNames ca$%o "e "atos %ara la 5ila seleccio'a"a e'
el SelectedDataKey %ro%ie"a" "e3uel3e la 5ila seleccio'a"a "e DataKey o+#eto1 6ue co'tie'e
to"os los 3alores "e los ca$%os "e "atos "e cla3e es%eci5ica"os %ara esa 5ila.
El DataKeyNames %ro%ie"a" se esta+lece auto$.tica$e'te e' el ca$%o "e i"e'ti5icaci!'
<'ica "e "atos 8s: al e'la0ar u' orige' "e "atos a u' Dri"7ie41 Details7ie41 Eor$7ie4 o
$e"ia'te el Dise=a"or. Mie'tras 6ue esta %ro%ie"a" se ha esta+leci"o %ara 'osotros "e
5or$a auto$.tica e' los tutoriales a'teriores1 los e#e$%los 6ue ha' 5u'cio'a"o si'
elDataKeyNames %ro%ie"a" es%eci5ica"a. Si' e$+argo1 %ara el Dri"7ie4 seleccio'a+le e' este
tutorial1 asB co$o tutoriales %ara el 5uturo e' el 6ue 3a$os a ea$i'ar la i'serci!'1
actuali0aci!' ) eli$i'aci!'1 el DataKeyNames %ro%ie"a" se "e+e esta+lecer
correcta$e'te. T!$ese u' $o$e'to %ara asegurarse "e 6ue su
Dri"7ie4 DataKeyNames %ro%ie"a" se esta+lece e' ProductID .
7a$os a 3er 'uestro %rogreso hasta el $o$e'to a tra3-s "e u' 'a3ega"or. Te'ga e'
cue'ta 6ue el co'trol Dri"7ie4 $uestra el 'o$+re ) el %recio "e to"os los %ro"uctos #u'to
co' u' 9i'?;utto' Select. Al hacer clic e' el +ot!' Seleccio'ar %ro3oca u'a "e3oluci!' "e
"atos. E' el %aso 2 3ere$os c!$o te'er u' Details7ie4 res%o'"er a esta "e3oluci!'1
$ostra'"o los "etalles "el %ro"ucto seleccio'a"o.
Figura : Cada producto contiene una 'ila (eleccione *inJDutton
2estacando la 'ila seleccionada
El ProductsGrid Dri"7ie4 tie'e u'a SelectedRowStyle %ro%ie"a" 6ue se %ue"e utili0ar %ara
"ictar el estilo 3isual "e la 5ila seleccio'a"a. Se utili0a correcta$e'te1 esto %ue"e $e#orar
la e%erie'cia "el usuario "e 5or$a $.s clara 6ue $uestra la 5ila "e Dri"7ie4 est.
seleccio'a"o actual$e'te. Para este tutorial1 3a$os a te'er la 5ila seleccio'a"a se
resaltar. co' u' 5o'"o a$arillo.
Al igual 6ue co' 'uestros tutoriales a'teriores1 3a$os a tratar "e $a'te'er los 3alores
est-ticos relacio'a"os "e5i'e co$o las clases CSS. Por lo ta'to1 crear u'a 'ue3a clase CSS
e' styles.css lla$a"o SelectedRowStyle .
. SelectedRowStyle
{
background-color: Amarillo;
}
Para a%licar esta clase CSS a la SelectedRowStyle %ro%ie"a" "e todos los Dri"7ie4s e'
'uestra serie "e tutoriales1 e"itar el GridView.skin la %iel e' el DataWebControls Te$.tico
%ara i'cluir a la SelectedRowStyle co'5iguraci!' co$o se $uestra a co'ti'uaci!'(
<asp:GridView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
<SelectedRowStyle CssClass="SelectedRowStyle" />
</ Asp: GridView>
Co' esta a"ici!'1 la 5ila "e Dri"7ie4 seleccio'a"o se resalta co' u' color "e 5o'"o a$arillo.
Figura ; Personali%ar la apariencia de la 'ila seleccionada de 9ridVie0 Con
el Selected"o+St6le Propiedad
Paso +: &ostrar la in'or#acin del producto
seleccionado en un 2etailsVie0
Co' la ProductsGrid Dri"7ie4 co$%leto1 to"o lo 6ue 6ue"a es a=a"ir u' Details7ie4 6ue
$uestra i'5or$aci!' so+re el %ro"ucto 6ue se seleccio'e. Agregue u' co'trol Details7ie4
%or e'ci$a "e la Dri"7ie4 ) G+#ectDataSource crea u'a 'ue3a
lla$a"a ProductDetailsDataSource . Co$o 6uere$os 6ue esta Details7ie4 %ara $ostrar la
i'5or$aci!' e' %articular so+re el %ro"ucto seleccio'a"o1 co'5igurar
el ProductDetailsDataSource utili0ar el ProductsBLL claseGetProductByProductID
( productID ) $-to"o.
Figura < In!ocar la Products,LL Clase GetProduct,6ProductID & productID ' &?todo
Tie'e' la productID 3alor "el %ar.$etro1 o+te'i"os a %artir "el co'trol
Dri"7ie4 SelectedValue %ro%ie"a". Co$o he$os co$e'ta"o a'terior$e'te1 el
Dri"7ie4 SelectedValue %ro%ie"a" "e3uel3e el %ri$er 3alor "e "atos cla3e %ara la 5ila
seleccio'a"a. Por lo ta'to1 es i$%erati3o 6ue el Dri"7ie4 DataKeyNames %ro%ie"a" se
esta+lece e' ProductID 1 "e $o"o 6ue la 5ila seleccio'a"a "e ProductID 3alor es "e3uelto
%or SelectedValue .
Figura 1, 7stablecer el productID par=#etros a la 9ridVie0 Selected/alue Propiedad
>'a 3e0 6ue el productDetailsDataSource G+#ectDataSource se ha co'5igura"o
correcta$e'te ) co' "esti'o a la Details7ie41 este tutorial es co$%letoC Cua'"o la %.gi'a
se 3isit! %or %ri$era 3e0 se ha seleccio'a"o 'i'gu'a 5ila1 %or lo 6ue el
Dri"7ie4 SelectedValue %ro%ie"a" "e3uel3e null . Da"o 6ue 'o eiste' %ro"uctos co'
u' NULL ProductID3alor1 'o ha) registros "e3ueltos %or la GetProductByProductID
( productID ) $-to"o1 lo 6ue sig'i5ica 6ue el Details7ie4 'o se $uestra 83er Eigura 11:. Al
hacer clic e' el +ot!' Seleccio'ar "e u'a 5ila Dri"7ie41 so+re3ie'e u'a "e3oluci!' "e "atos
) el Details7ie4 actualice. Esta 3e01 el Dri"7ie4 SelectedValue %ro%ie"a" "e3uel3e
el ProductID"e la 5ila seleccio'a"a1 el GetProductByProductID ( productID ) $-to"o "e3uel3e
u' ProductsDataTable co' i'5or$aci!' acerca "e ese %ro"ucto e' %articular1 ) el Details7ie4
$uestra los "etalles 83er 5igura 12:.
Figura 11 Cuando !isit por pri#era !e%> slo el 9ridVie0 se #uestra
Figura 1+ .l seleccionar una 'ila> 2etalles del Producto es #ostrado
Fesu#en
E' este ) e' los tutoriales a'teriores tres 6ue he$os 3isto u'a serie "e t-c'icas %ara la
3isuali0aci!' "e $aestro A "etalle los i'5or$es. E' este tutorial 3a$os a ea$i'ar co' u'
Dri"7ie4 seleccio'a+le a la casa "e los registros $aestros ) u' Details7ie4 %ara 3er
"etalles so+re el registro $aestro "e seleccio'a"os e' la $is$a %.gi'a. E' los tutoriales
a'teriores 3i$os c!$o $ostrar $aestro A "etalles re%ortes usa'"o Dro%Do4'9ists ) la
3isuali0aci!' "e los registros $aestros e' u'a %.gi'a *e+ ) los registros "e "etalles e'
otra.
E' este tutorial se co'clu)e el ea$e' "e los i'5or$es "e $aestro A "etalle. Co$e'0a'"o
co' el siguie'te tutorial 3a$os a co$e'0ar 'uestra e%loraci!' "el 5or$ato %erso'ali0a"o
co' el Dri"7ie41 Details7ie4 ) Eor$7ie4. 7a$os a 3er c!$o %erso'ali0ar el as%ecto "e
estos co'troles +asa"os e' los "atos e'la0a"os a ellos1 c!$o resu$ir los "atos "e %ie "e
%.gi'a "el co'trol Dri"7ie41 ) c!$o utili0ar las %la'tillas %ara o+te'er u' $a)or gra"o "e
co'trol so+re el "ise=o.
Progra$aci!' 5eli0C

Tutorial 11: For#ato personali%ado basado en
los datos

Scott Mitchell
02 200Z
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial 11 (Visual C #)
&'tro"ucci!'
Paso 1( 7isuali0aci!' "e la i'5or$aci!' "el %ro"ucto e' u' Details7ie4
Paso 2( %rogra$aci!' Deter$i'aci!' "el 3alor "e los "atos e' el co'trola"or "e e3e'tos
Data;ou'"
Paso ,( Dar 5or$ato al 3alor >'itPrice e' la Details7ie4
Paso /( 7isuali0aci!' "e la i'5or$aci!' "el %ro"ucto e' u' Eor$7ie4
Paso 2( %rogra$aci!' 9a "eter$i'aci!' "el 3alor "e los "atos e' el co'trola"or "e e3e'tos
Data;ou'"
Paso 6( Dar 5or$ato al co'trol "e eti6uetas >'its&'Stoc?9a+el e' el Eor$7ie4
&te$Te$%late
Paso Z( 7isuali0aci!' "e i'5or$aci!' "el %ro"ucto e' u' Dri"7ie4
Paso P( "eter$i'ar $e"ia'te %rogra$aci!' el 3alor "e los "atos e' el co'trola"or "e
e3e'tos Ro4Data;ou'"
Paso K( "estaca'"o el a$arillo Eila Cua'"o el 3alor >'itPrice es $e'os "e ^ 10
Co'clusi!'
So+re el autor
Agra"eci$ie'tos
Introduccin
9a a%arici!' "e la 9ridVie0 1 2etailsVie0 ) For#Vie0 co'troles se %ue"e' %erso'ali0ar
a tra3-s "e $iles "e %ro%ie"a"es relacio'a"as co' el estilo. Pro%ie"a"es
co$o CssClass 1 'uente 1 DorderWidt" 1 Dorder(tyle 1DorderColor 1 anc"o ) altura 1
e'tre otros1 "eter$i'a' la a%arie'cia ge'eral "el co'trol %resta"os. Pro%ie"a"es1
i'clu)e'"o Aeader(tyle 1 Fo0(tyle 1 .lternatingFo0(tyle 1 ) otros %er$ite' la
co'5iguraci!' $is$o estilo 6ue se a%licar.' a las seccio'es e' %articular. Del $is$o $o"o1
estos a#ustes "e estilo se %ue"e' a%licar so+re el terre'o.
E' $uchos esce'arios1 si' e$+argo1 los re6uisitos "e 5or$ato "e%e'"er. "el 3alor "e los
"atos $ostra"os. Por e#e$%lo1 %ara lla$ar la ate'ci!' so+re agota"as1 u' i'5or$e acerca
"e los %ro"uctos "e i'5or$aci!' %o"rBa %o'er el color "e 5o'"o a$arillo %ara a6uellos
%ro"uctos cu)o $nitsIn(tocJ ) $nits4n4rder ca$%os so' iguales a 0. Para resaltar los
%ro"uctos $.s caros1 es %osi+le 6ue "esee $ostrar los %recios "e los %ro"uctos 6ue
cuesta' $.s "e ^ Z2 e' 'egrita.
A#uste el 5or$ato "el 9ridVie0 1 2etailsVie0 o For#Vie0 +asa"o e' los "atos e'la0a"os
a 6ue se %ue"e lograr "e 3arias $a'eras. E' este tutorial1 3a$os a 3er c!$o lle3ar a ca+o
el 5or$ato "e los "atos e'la0a"os a tra3-s "el uso "e
la 2ataDound ) Fo02ataDound co'trola"ores "e e3e'tos. E' el siguie'te tutorial 3a$os
a e%lorar u' e'5o6ue alter'ati3o.
$tili%ando controlador de e!entos 2ataDound el control 2etailsVie0 de
Cua'"o los "atos se e'la0a a u' 2etailsVie0 1 )a sea "e u' co'trol "e orige' "e "atos
$e"ia'te %rogra$aci!' oa tra3-s "e la asig'aci!' "e "atos %ara el co'trol "e origen de
datos "e %ro%ie"a" ) lla$a'"o a su 2ataDind () 1 la secue'cia "e %asos ocurre'(
1. El co'trol "e "atos *e+ 2ataDinding acti3a el e3e'to.
2. 9os "atos se e'la0a al co'trol "e "atos "e *e+.
,. El co'trol "e "atos *e+ 2ataDound acti3a el e3e'to.
9!gica %erso'ali0a"a %ue"e ser i')ecta"a i'$e"iata$e'te "es%u-s "e los %asos 1 ) , a
tra3-s "e u' co'trola"or "e e3e'tos. Me"ia'te la creaci!' "e u' co'trola"or "e e3e'tos
%ara el 2ataDound caso "e 6ue se %ue"e "eter$i'ar $e"ia'te %rogra$aci!' los "atos
6ue se ha e'la0a"o al co'trol 4e+ "e "atos ) a#ustar el 5or$ato1 seg<' sea 'ecesario.Para
ilustrar esto 3a$os a crear u' 2etailsVie0 6ue $ostrar. i'5or$aci!' ge'eral acerca "e
u' %ro"ucto1 si'o 6ue $ostrar. el Precio por unidad "e 3alor e' u' tipo de letra
negrita, cursiva si es su%erior a ^ Z2.
Paso 1: Visuali%acin de la in'or#acin del producto
en un 2etailsVie0
A+ra la %.gi'a Custo$Colors.as% e' la car%eta Custo$Eor$atti'g1 arrastre
u' 2etailsVie0 "e co'trol "es"e el Cua"ro "e herra$ie'tas hasta el Dise=a"or1
esta+le0ca su identi'icacin 3alor "e la
%ro%ie"a"7xpensi!eProductsPriceInDoldItalic 1 ) asociarla a u'
'ue3o 4b6ect2ata(ource co'trol 6ue i'3oca el ProductsD**clase 9etProducts
() $-to"o. 9os %asos "etalla"os %ara lograr esto se o$ite' a6uB %or +re3e"a" )a 6ue los
ea$i'! e' "etalle e' tutoriales a'teriores.
Des%u-s "e ha+er ata"o el 4b6ect2ata(ource al 2etailsVie0 1 to$e u' $o$e'to %ara
$o"i5icar la lista "e ca$%os. He o%ta"o %or 6uitar el DoundField lla$a
s ProductI2 1 IdPro!eedor 1 CategoryI2 1 $nitsIn(tocJ 1 $nits4n4rder 1Feorder*e!e
l ) descatalogados 1 ) ca$+i! el 'o$+re ) 5or$atear el resto DoundField s. Ta$+i-'
li$%i! el anc"o ) la altura "e co'5iguraci!'. De+i"o a 6ue el 2etailsVie0 $uestra u'
solo registro1 ha) 6ue ha+ilitar la %agi'aci!' co' el 5i' "e %er$itir al usuario 5i'al %ara 3er
to"os los %ro"uctos. Hacerlo $e"ia'te la co$%ro+aci!' "e la paginacin .cti!arcasilla
"e 3eri5icaci!' e' el 2etailsVie0 tag Ms i'telige'te.
Figura 1 &arBue la casilla de !eri'icacin Aabilitar paginacin en la etiBueta
inteligente del 2etailsVie0 es (Clic en la 'oto para una i#agen #=s grande)
Des%u-s "e estos ca$+ios1 el 2etailsVie0 $arca"o ser. el siguie'te(
<Asp: DetailsView ID = "DetailsView1" runat = "server" AllowPaging = "True"
AutoGenerateRows = "false" DataKeyNames = "ProductID"
DataSourceID = "ObjectDataSource1" EnableViewState = "false">
<Fields>
<Asp: BoundField DataField = "ProductName" HeaderText = "Producto"
SortExpression = "ProductName" />
<Asp: BoundField DataField = "CategoryName" HeaderText = "Categora"
ReadOnly = "True" SortExpression = "CategoryName" />
<Asp: BoundField DataField = "SupplierName" HeaderText = "Proveedor"
ReadOnly = "True" SortExpression = "SupplierName" />
<Asp: BoundField DataField = "CantidadPorUnidad"
HeaderText = "Cantidad / Unidad" SortExpression = "CantidadPorUnidad" />
<Asp: BoundField DataField = "UnitPrice" DataFormatString = "{0: c}"
HeaderText = "Precio"
HtmlEncode = "false" SortExpression = "UnitPrice" />
</ Campos>
28 Asp3 Details/ie+7
To$e u' $o$e'to %ara %o'er a %rue+a esta %.gi'a e' su 'a3ega"or.
Figura + 7l control 2etailsVie0 #uestra un producto a la !e% (Clic en la 'oto
para una i#agen #=s grande)
Paso +: progra#acin 2eter#inacin del !alor de los
datos en el controlador de e!entos 2ataDound
Co' el 5i' "e $ostrar el %recio e' 'egrita1 cursi3a %ara a6uellos %ro"uctos
cu)o Precio$nidad 3alor su%era los ^ Z21 %ri$ero te'e$os 6ue ser ca%aces "e "eter$i'ar
$e"ia'te %rogra$aci!' el Precio$nidad 3alor. Para el 2etailsVie0 1 esto se %ue"e
lograr e' el 2ataDound co'trola"or "e e3e'tos. Para crear el co'trola"or "e e3e'tos1
haga clic e' el2etailsVie0 e' el "ise=a"or 3a)a a la 3e'ta'a Pro%ie"a"es. Presio'e E/
%ara 6ue a%are0ca1 si 'o es 3isi+le1 o 3a)a a laVista ) seleccio'e la !entana
Propiedades "el $e'<. E' la 3e'ta'a Pro%ie"a"es1 haga clic e' el ico'o "e ra)o a la lista
"e los 2etailsVie0 e3e'tos Ms. A co'ti'uaci!'1 haga "o+le clic e' el 2ataDound e3e'to o
escri+a el 'o$+re "el co'trola"or "e e3e'tos 6ue "esea crear.
Figura 1 Crear un controlador de e!entos para el e!ento de enlace de datos
Si lo hace1 crear. auto$.tica$e'te el co'trola"or "e e3e'tos ) le lle3ar. a la %arte "e
c!"igo e' el 6ue se ha a=a"i"o.E' este %u'to1 3er. lo siguie'te(
protected void ExpensiveProductsPriceInBoldItalic_DataBound (object sender,
E EventArgs)
{
}
9os "atos e'la0a"os a la 2etailsVie0 se %ue"e acce"er a tra3-s "e
la 2ataIte# %ro%ie"a". Recor"e$os 6ue so' 3i'cula'tes %ara los co'troles a u'
esta+leci$ie'to i'5lei+le "e ti%os 2ataTable 1 6ue se co$%o'e "e u'a colecci!' co'
esta+leci$ie'to i'5lei+le "e 2ataFo0 casos. Cua'"o el 2ataTable se u'e a
la 2etailsVie0 1 el %ri$er 2ataFo0 e' el2ataTable est. asig'a"a a
la 2etailsVie0 Ms 2ataIte# %ro%ie"a". E' co'creto1 el 2ataIte# %ro%ie"a" se le asig'a
u'2ataFo0Vie0 o+#eto. Po"e$os utili0ar la 'ila "e %ro%ie"a" "e 2ataFo0Vie0 %ara
acce"er a la +ase 2ataFo0 o+#eto1 6ue es e' reali"a" u' ProductsFo0 e#e$%lo. Cua'"o
te'e$os esta ProductsFo0 e#e$%lo1 %o"e$os to$ar u'a "ecisi!' co' s!lo i's%eccio'ar
los 3alores "e la %ro%ie"a" "el o+#eto.
El siguie'te c!"igo $uestra c!$o "eter$i'ar si el Precio por unidad "e 3alor 3i'cula"o a
la 2etailsVie0 co'trol es $a)or "e ^ Z2(
protected void ExpensiveProductsPriceInBoldItalic_DataBound (object sender,
E EventArgs)
{
/ / Obtener el objeto ProductsRow de la propiedad DataItem ...
Northwind.ProductsRow producto =
(Northwind.ProductsRow) ((System.Data.DataRowView)
. ExpensiveProductsPriceInBoldItalic.DataItem) la fila;
if (! product.IsUnitPriceNull () & & product.UnitPrice> 75m)
{
/ / TODO: Hacer que el texto PrecioUnidad en negrita y cursiva
}
}
Tenga en cuenta De+i"o a Precio$nidad %ue"e te'er u' nulo 3alor e' la +ase "e
"atos1 %ri$ero aseg<rese "e 6ue 'o esta$os trata'"o co' u' /$** el 3alor a'tes "e
acce"er al ProductsFo0 MsPrecio$nidad %ro%ie"a". Esta 3eri5icaci!' es i$%orta'te1
%or6ue si i'te'ta$os acce"er a la Precio$nidad%ro%ie"a" cua'"o tie'e u' /$** el 3alor1
la ProductsFo0 o+#eto la'0ar u'a ece%ci!' Stro'gT)%i'gEce%tio' .
Paso 1: 2ar 'or#ato al !alor $nitPrice en la
2etailsVie0
E' este %u'to1 %o"e$os "eter$i'ar si el Precio por unidad "e 3alor 3i'cula"o a
la 2etailsVie0 tie'e u' 3alor 6ue su%era los ^ Z21 %ero to"a3Ba te'e$os 6ue 3er c!$o
a#ustar la %rogra$aci!' 2etailsVie0 5or$ato Ms e' co'secue'cia.Para $o"i5icar el 5or$ato
"e u'a 5ila co$%leta e' el 2etailsVie0 1 acceso $e"ia'te %rogra$aci!' a la 5ila
co'2etailsVie0I2Fo0s MiN 1 %ara $o"i5icar u'a cel"a e' %articular1 el acceso
uso 2etailsVie0I2Fo0s MiN *as c?lulas MindiceN . Des%u-s te'e$os u'a re5ere'cia a la
5ila o cel"a1 %o"e$os a#ustar su a%arie'cia $e"ia'te el esta+leci$ie'to "e u' estilo
relacio'a"o co' las %ro%ie"a"es.
Acceso a u'a 5ila "e %rogra$aci!' re6uiere 6ue se co'o0ca el B'"ice "e 5ila1 6ue co$ie'0a
e' 0. El Precio por unidad"e 5ila es la 6ui'ta 5ila e' el 2etailsVie0 1 ".'"ole u' B'"ice
"e /1 ) %or lo 6ue es accesi+le a tra3-s "e
%rogra$aci!'7xpensi!eProductsPriceInDoldItalicFo0s M3N . E' este %u'to1 %o"rBa$os
te'er el co'te'i"o "e la 5ila e'tera se $uestra e' 'egrita1 cursi3a utili0a'"o el siguie'te
c!"igo(
ExpensiveProductsPriceInBoldItalic.Rows [4] Font.Bold = true.;
ExpensiveProductsPriceInBoldItalic.Rows [4] Font.Italic = true.;
Si' e$+argo1 esto har. 6ue tanto la eti6ueta 8%recio: ) el 3alor e' 'egrita ) cursi3a. Si
6uere$os hacer s!lo el 3alor e' 'egrita ) cursi3a se "e+e a%licar este 5or$ato a la
segu'"a cel"a "e la 5ila1 6ue se %ue"e lograr $e"ia'te(
ExpensiveProductsPriceInBoldItalic.Rows [4] Las clulas [1] = true Font.Bold..;
ExpensiveProductsPriceInBoldItalic.Rows [4] Las clulas [1] = true Font.Italic..;
De+i"o a 6ue 'uestros tutoriales hasta ahora ha' utili0a"o las ho#as "e estilo %ara
$a'te'er u'a clara se%araci!' e'tre el $arca"o 6ue se re%rese'ta e i'5or$aci!'
relacio'a"as co' el estilo1 e' lugar "e esta+lecer las %ro%ie"a"es "e estilo tal co$o se
i'"ica a'terior$e'te1 3a$os a utili0ar e' su lugar u'a clase CSS. A+ra la ho#a "e estilo
st)les.css ) a=a"ir u'a 'ue3a clase "e CSS lla$a"o 7xpensi!ePrice7#p"asis co' la
siguie'te "e5i'ici!'(
. ExpensivePriceEmphasis
{
font-weight: bold;
font-style: italic;
}
9uego1 e' la 2ataDound co'trola"or "e e3e'tos1 esta+le0ca la
c-lula CssClass %ro%ie"a" 7xpensi!ePrice7#p"asis . El siguie'te c!"igo $uestra
la 2ataDound co'trola"or "e e3e'tos e' su totali"a"(
protected void ExpensiveProductsPriceInBoldItalic_DataBound (object sender,
E EventArgs)
{
/ / Obtener el objeto ProductsRow de la propiedad DataItem ...
Northwind.ProductsRow producto =
(Northwind.ProductsRow) ((System.Data.DataRowView)
. ExpensiveProductsPriceInBoldItalic.DataItem) la fila;
if (! product.IsUnitPriceNull () & & product.UnitPrice> 75m)
{
ExpensiveProductsPriceInBoldItalic.Rows [4]. Clulas [1]. CssClass =
"ExpensivePriceEmphasis";
}
}
Al 3isuali0ar Chai1 6ue cuesta $e'os "e ^ Z21 el %recio se $uestra e' u'a 5ue'te 'or$al
83er Eigura /:. Si' e$+argo1 al 3er Mishi \o+e Ni?u1 6ue tie'e u' %recio "e KZ "!lares1 el
%recio se $uestra e' 'egrita1 cursi3a 83er Eigura 2:.
Figura 3 Precios por deba6o de O :- se #uestran en una 'uente nor#al (Clic en
la 'oto para una i#agen #=s grande)
Figura - *os precios de los productos caros @se #uestran en negrita> en
cursi!a (Clic en la 'oto para una i#agen #=s grande)
$tili%ando controlador de e!entos 2ataDound el control For#Vie0
9os %asos %ara "eter$i'ar los "atos "e +ase u'i"o a u' For#Vie0 so' i"-'ticas a las "e
u' 2etailsVie0 ( Crear u'2ataDound co'trola"or "e e3e'tos1 el
ele'co 2ataIte# %ro%ie"a" %ara el ti%o "e o+#eto a%ro%ia"o e'la0a"o al co'trol1 )
"eter$i'ar c!$o %roce"er. El For#Vie0 ) 2etailsVie0 "i5iere'1 si' e$+argo1 e' la 5or$a
e' la a%arie'cia "e su i'ter5a0 "e usuario se actuali0a.
El For#Vie0 'o co'tie'e 'i'g<' DoundField s ) %or lo ta'to carece "e la 'ilas "e
colecci!'. E' ca$+io1 u' For#Vie0se co$%o'e "e las %la'tillas1 6ue %ue"e co'te'er u'a
$e0cla "e HTM9 est.tico1 co'troles *e+1 ) la si'tais "e e'lace "e "atos. A#uste "el estilo
"e u' For#Vie0 'or$al$e'te i$%lica el a#uste al estilo "e u'o o 3arios "e los co'troles
*e+ e' el For#Vie0 %la'tillas Ms.
Para ilustrar esto1 3a$os a usar u' For#Vie0 a la lista "e %ro"uctos co$o e' el e#e$%lo
a'terior1 %ero esta 3e0 3a$os a $ostrar s!lo el 'o$+re "el %ro"ucto ) las u'i"a"es e'
stoc? co' las u'i"a"es e' stoc? $uestra' e' u'a 5ue'te "e color ro#o si es $e'or o igual a
10.
Paso 3: Visuali%acin de la in'or#acin del producto
en un For#Vie0
A=a"ir u' For#Vie0 a la %.gi'a "e Custo$Colors.as% "e+a#o "e la 2etailsVie0 1 )
esta+lecer su identi'icacin "e %ro%ie"a" "e *o0(tocJedProductsInFed . G+ligar a
la For#Vie0 al 4b6ect2ata(ource "e co'trol crea"o e' el %aso a'terior. Esto crear.
u' Ite#Te#plate 1 7ditIte#Te#plate ) InsertIte#Te#plate %ara
el For#Vie0 . Retire el7ditIte#Te#plate ) InsertIte#Te#plate 1 ) si$%li5icar
el Ite#Te#plate %ara i'cluir s!lo los Product/a#e )$nitsIn(tocJ 3alores1 ca"a u'o e'
su %ro%io 'o$+re a%ro%ia"o de etiBuetas "e co'trol. Al igual 6ue el 2etailsVie0e' el
e#e$%lo a'terior1 ta$+i-' la paginacin .cti!ar casilla "e 3eri5icaci!' e'
el For#Vie0 tag Ms i'telige'te.
Des%u-s "e estas e"icio'es "e su For#Vie0 $arca"o Ms "e+e ser si$ilar a lo siguie'te(
<Asp: FormView ID = "LowStockedProductsInRed" runat = "server"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1"
AllowPaging = "True" EnableViewState = "false">
<ItemTemplate>
<b> del producto: </ b>
<Asp: Label = ID "ProductNameLabel" runat = "server"
Texto ='<%# Bind ("ProductName")%> '>
</ Asp: Label> <br />
Unidades <b> En Stock: </ b>
<Asp: Label = ID "UnitsInStockLabel" runat = "server"
Texto ='<%# Bind ("UnitsInStock")%> '>
</ Asp: Label>
</ ItemTemplate>
</ Asp: FormView>
Te'ga e' cue'ta 6ue el Ite#Te#plate co'tie'e(
AT&* est=tico IEl teto HPro"uctoH ) H>'i"a"es e' Stoc?(H #u'to co'
el Pbr IQ ) PbQ ele$e'tos
*os controles Web I9as
"os etiBuetas co'troles1 Product/a#e*abel ) $nitsIn(tocJ*abel
2e enlace de datos de sintaxis IEl <% # Bind ("ProductName")%> ) <% # Bind
("UnitsInStock")%> si'tais1 6ue asig'a los 3alores "e estos ca$%os %ara el texto las
%ro%ie"a"es "e la 7tiBueta de los co'troles
Paso -: 2eter#inacin de la progra#acin !alor de
los datos en el controlador de e!entos 2ataDound
Co' el For#Vie0 Ms $arca"o co$%leta1 el siguie'te %aso es "eter$i'ar $e"ia'te
%rogra$aci!' si el $nitsIn(tocJ 3alor es $e'or o igual a 10. Esto se logra "e la $a'era
eacta$e'te el $is$o co' el For#Vie0 co$o lo 5ue co' el2etailsVie0 . Co$ie'ce %or
crear u' co'trola"or "e e3e'tos %ara el For#Vie0 Ms 2ataDound e3e'to.
Figura 8 Crear el controlador de e!entos 2ataDound
E' el e3e'to1 el ele'co 2ataIte# %ro%ie"a" "el For#Vie0 a u' ProductsFo0 e#e$%lo1 )
"eter$i'ar si el $nitsInPrice3alor es tal 6ue te'e$os 6ue $ostrar e' u'a 5ue'te ro#a.
protected void LowStockedProductsInRed_DataBound (object sender, EventArgs e)
{
/ / Obtener el objeto ProductsRow de la propiedad DataItem ...
Northwind.ProductsRow producto =
(Northwind.ProductsRow) ((System.Data.DataRowView)
. LowStockedProductsInRed.DataItem) la fila;
if (! product.IsUnitsInStockNull () & & product.UnitsInStock <= 10)
{
/ / TODO: Hacer que el texto UnitsInStockLabel rojo
}
}
Paso 8: 2ar 'or#ato al control de etiBuetas
$nitsIn(tocJ*abel en Ite#Te#plate del For#Vie0
El <lti$o %aso es "ar 5or$ato a la $uestra $nitsIn(tocJ 3alor e' u'a 5ue'te "e color ro#o
si el 3alor es "e 10 o $e'os.Para lograr esto1 se "e+e acce"er a la
%rogra$aci!' $nitsIn(tocJ*abel "e co'trol e' el Ite#Te#plate ) esta+le0ca sus
%ro%ie"a"es "e estilo %ara 6ue su teto se $uestra e' ro#o. Para acce"er a u' co'trol "e
*e+ e' u'a %la'tilla1 utilice el FindControl (@controlI2@) $-to"o1 co$o se $uestra a6uB(
WebControlType someName =
(WebControlType) FormViewID.FindControl ("controlID");
Para 'uestro e#e$%lo1 6uere$os acce"er a u'a etiBueta "e co'trol1 cu)o I2 es el
3alor $nitsIn(tocJ*abel 1 %or lo 6ue te'"rBa 6ue utili0ar los siguie'tes(
Etiqueta UnitsInStock =
(Label) LowStockedProductsInRed.FindControl ("UnitsInStockLabel");
Des%u-s te'e$os u'a re5ere'cia %rogra$.tica e' el co'trol *e+1 %o"e$os $o"i5icar su
estilo "e %ro%ie"a"es relacio'a"as1 seg<' sea 'ecesario. Al igual 6ue co' el e#e$%lo
a'terior1 he crea"o u'a clase CSS e' st)les.css lla$a"o*o0$nitsIn(tocJ7#p"asis . Para
a%licar este estilo a la etiBueta "e co'trol *e+1 esta+le0ca su CssClass %ro%ie"a" e'
co'secue'cia.
protected void LowStockedProductsInRed_DataBound (object sender, EventArgs e)
{
/ / Obtener el objeto ProductsRow de la propiedad DataItem ...
Northwind.ProductsRow producto =
(Northwind.ProductsRow) ((System.Data.DataRowView)
. LowStockedProductsInRed.DataItem) la fila;
if (! product.IsUnitsInStockNull () & & product.UnitsInStock <= 10)
{
Etiqueta UnitsInStock =
(Label) LowStockedProductsInRed.FindControl ("UnitsInStockLabel");
if (UnitsInStock! = null)
{
unitsInStock.CssClass = "LowUnitsInStockEmphasis";
}
}
}
/ota 9a si'tais "e 5or$ato "e u'a %la'tilla "e %rogra$aci!'1 acce"er a la *e+ usa'"o
el co'trolFindControl (@controlI2@) 1 ) luego %o'er su estilo "e %ro%ie"a"es relacio'a"as1
ta$+i-' %ue"e utili0arse cua'"o se utili0a Te$%lateEiel"s e'
el 2etailsVie0 o 9ridVie0 co'troles. 7a$os a ea$i'arTe#plateField s e' 'uestro
%r!i$o tutorial.
9a 5igura Z $uestra el For#Vie0 cua'"o se 3e u' %ro"ucto cu)a $nitsIn(tocJ 3alor es
su%erior a 101 $ie'tras 6ue el %ro"ucto e' la 5igura P tie'e u' 3alor i'5erior a 10.
Figura : Para los productos con un $nitsIn(tocJ su'iciente#ente grande> no se
aplica un 'or#ato personali%ado(Clic en la 'oto para una i#agen #=s grande)
Figura ; 7l nH#ero $nitsIn(tocJ se #uestra en ro6o para aBuellos productos con
!alores de 1, o #enos (Clic en la 'oto para una i#agen #=s grande)
Con 'or#ato de e!ento Fo02ataDound el 9ridVie0
A'terior$e'te1 se a'ali0! la secue'cia "e %asos 6ue el 2etailsVie0 ) For#Vie0 el
%rogreso a tra3-s "e los co'troles "ura'te el e'lace "e "atos. 7a$os a 3er $.s "e estos
%asos u'a 3e0 $.s1 co$o u' recor"atorio.
1. El co'trol "e "atos *e+ 2ataDinding acti3a el e3e'to.
2. 9os "atos se e'la0a al co'trol "e "atos "e *e+.
,. El co'trol "e "atos *e+ 2ataDound acti3a el e3e'to.
Estos tres %asos so' su5icie'tes %ara el 2etailsVie0 ) For#Vie0 1 )a 6ue $uestra' s!lo
u' <'ico registro. Para el9ridVie0 1 6ue $uestra todos los registros 3i'cula"os a ella 8'o
s!lo el %ri$ero:1 el %aso 2 es u' %oco $.s co$%lica"o.
E' el %aso 21 el 9ridVie0 e'u$era la 5ue'te "e "atos )1 %ara ca"a registro1 crea
u' 9ridVie0Fo0 i'sta'cia ) se u'e el registro actual a la $is$a. Para
ca"a 9ridVie0Fo0 a=a"i"o a la 9ridVie0 1 "os e3e'tos se %ro"uce'(
Fo0Created Ii'ce'"ios "es%u-s "e la 9ridVie0Fo0 se ha crea"o
Fo02ataDound el 5uego "es%u-s "e 6ue el registro actual se ha u'i"o a
la 9ridVie0Fo0
Para el 9ridVie0 )1 a co'ti'uaci!'1 e'lace "e "atos se "escri+e co' $a)or %recisi!' %or la
siguie'te secue'cia "e %asos(
1. El 2ataDinding caso "e 6ue el 9ridVie0 i'ce'"ios.
2. 9os "atos se e'la0a a la 9ridVie0 .
Para ca"a registro "el orige' "e "atos(
a. Crear u' 9ridVie0Fo0 o+#eto.
+. El 5uego Fo0Created e3e'to.
c. 7i'cular el registro a la 9ridVie0Fo0 .
". El 5uego Fo02ataDound e3e'to.
e. Agregue el 9ridVie0Fo0 a la 'ilas "e colecci!'.
,. El 9ridVie0 Ms 2ataDound acti3a el e3e'to.
Para %erso'ali0ar el 5or$ato "e la 9ridVie0 registros Ms i'"i3i"uales1 e'to'ces1 te'e$os
6ue crear u' co'trola"or "e e3e'tos %ara el Fo02ataDound e3e'to. Para ilustrar esto1
3a$os a agregar u' 9ridVie0 a la %.gi'a "e Custo$Colors.as% 6ue $uestra el 'o$+re1
categorBa ) %recio "e ca"a %ro"ucto1 "estaca'"o a6uellos %ro"uctos cu)o %recio es i'5erior
a ^ 101 co' u' color "e 5o'"o a$arillo.
Paso :: Visuali%acin de in'or#acin del producto en
un 9ridVie0
A=a"ir u' 9ridVie0 %or "e+a#o "e la For#Vie0 "el e#e$%lo a'terior ) esta+lecer
su identi'icacin "e %ro%ie"a" "eAig"lig"tC"eapProducts . Por6ue )a te'e$os
u' 4b6ect2ata(ource 6ue "e3uel3e to"os los %ro"uctos e' la %.gi'a1 e'la0ar
el 9ridVie0 a eso. Ei'al$e'te1 e"ite el DoundField s "el 9ridVie0 %ara i'cluir s!lo los
'o$+res "e los %ro"uctos1 categorBas ) %recios. Des%u-s "e estas $o"i5icacio'es1
el 9ridVie0 $arca"o Ms "e+e' te'er el siguie'te as%ecto(
<Asp: GridView ID = "HighlightCheapProducts" runat = "server"
AutoGenerateColumns = "False" DataKeyNames = "ProductID"
DataSourceID = "ObjectDataSource1" EnableViewState = "false">
<columnas>
<Asp: BoundField DataField = "ProductName" HeaderText = "Producto"
SortExpression = "ProductName" />
<Asp: BoundField DataField = "CategoryName" HeaderText = "Categora"
ReadOnly = "True" SortExpression = "CategoryName" />
<Asp: BoundField DataField = "UnitPrice" DataFormatString = "{0: c}"
HeaderText = "Precio"
HtmlEncode = "false" SortExpression = "UnitPrice" />
</ Columns>
</ Asp: GridView>
9a Eigura K $uestra 'uestro %rogreso a este %u'to1 cua'"o se 3e a tra3-s "e u'
'a3ega"or.
Figura < 7l 9ridVie0 #uestra el no#bre> categorCa> y el precio de cada
producto (Clic en la 'oto para una i#agen #=s grande)
Paso ;: progra#acin 2eter#inacin del !alor de los
datos en el controlador de e!entos Fo02ataDound
Cua'"o el Products2ataTable se u'e a la 9ridVie0 1 su ProductsFo0 casos se
e'u$era' )1 %ara ca"a ProductsFo0 1 u' 9ridVie0Fo0 se crea. El 2ataIte# %ro%ie"a"
"e la 9ridVie0Fo0 se le asig'a a lo %articular ProductFo0 1 "es%u-s "e 6ue
el Fo02ataDound co'trola"or "e e3e'tos "el 9ridVie0 se ele3a. Para "eter$i'ar
el Precio por unidad "e 3alor %ara ca"a %ro"ucto 3i'cula"o a la 9ridVie0 )1 a
co'ti'uaci!'1 "e+e$os crear u' co'trola"or "e e3e'tos %ara elFo02ataDound caso "e
6ue el 9ridVie0 . E' este co'trola"or "e e3e'tos1 %o"e$os i's%eccio'ar
el Precio$nidad3alor "e la corrie'te 9ridVie0Fo0 ) to$ar u'a "ecisi!' el 5or$ato "e la
5ila.
Este co'trola"or "e e3e'tos se %ue"e' crear $e"ia'te el uso "e la $is$a serie "e %asos
co' el For#Vie0 )2etailsVie0 .
Figura 1, Cree un controlador de e!entos para el e!ento Fo02ataDound el
9ridVie0
Crear el co'trola"or "e e3e'tos "e esta 5or$a har. 6ue el siguie'te c!"igo 6ue se a=a"e
auto$.tica$e'te a la %arte "e c!"igo "e la %.gi'a ASP.NET(
protected void HighlightCheapProducts_RowDataBound (object sender,
GridViewRowEventArgs e)
{
}
Cua'"o el Fo02ataDound acti3a el e3e'to1 el co'trola"or "e e3e'tos se %asa co$o
segu'"o %ar.$etro1 u' o+#eto "e ti%o 9ridVie0Fo07!ent.rgs 1 6ue tie'e u'a %ro%ie"a"
"e'o$i'a"a 'ila . Esta %ro%ie"a" "e3uel3e u'a re5ere'cia a la9ridVie0Fo0 6ue esta+a
e'la0a"o a "atos. Para acce"er a la ProductsFo0 i'sta'cia e'la0a"a a la 9ridVie0Fo0 1
se utili0a el 2ataIte# %ro%ie"a"1 co$o se $uestra a6uB(
protected void HighlightCheapProducts_RowDataBound (object sender,
GridViewRowEventArgs e)
{
/ / Obtener el objeto ProductsRow de la propiedad DataItem ...
Northwind.ProductsRow producto =
(Northwind.ProductsRow) ((System.Data.DataRowView) e.Row.DataItem) Fila.;
if (! product.IsUnitPriceNull () & & product.UnitPrice <10m)
{
/ / TODO: Resalte la fila amarilla ...
}
}
Cua'"o tra+a#a$os co' la Fo02ataDound co'trola"or "e e3e'tos1 es i$%orta'te te'er e'
cue'ta 6ue el 9ridVie0 se co$%o'e "e "i5ere'tes ti%os "e 5ilas ) 6ue este e3e'to se
"is%ara %ara to"os los ti%os "e 5ila. El ti%o "e u'a9ridVie0Fo0 se %ue"e "eter$i'ar %or
su ro0Type %ro%ie"a"1 ) %ue"e te'er u'o "e los %osi+les 3alores(
2ataFo0 I>'a 5ila 6ue est. e'la0a"o a u' registro "el origen de
datos "el 9ridVie0
7#pty2ataFo0 I9a 5ila se $uestra si el 9ridVie0 Ms 2ata(ource est. 3acBa
Pie de p=gina 1 la 5ila "e %ie1 $uestra si el ("o0Footer %ro%ie"a" "el 9ridVie0 se
a#usta a la !erdad
Cabecera IEl tBtulo "e la 5ila1 se $uestra si la ("o0Aeader %ro%ie"a"
"el 9ridVie0 est. esta+leci"o e'!erdadero 8%or "e5ecto:
*ocali%ador IPara u' 9ridVie0 6ue i$%le$e'ta la %agi'aci!'1 la 5ila 6ue $uestra la
i'ter5a0 "e %agi'aci!'
(eparador 'o utili0a"os %ara el 9ridVie0 1 %ero utili0a"o %or
el ro0Type %ro%ie"a"es %ara el 2ata*ist ) elrepetidor de los co'troles 8"os
co'troles 4e+ "e "atos 6ue 3a$os a "iscutir e' 5uturos tutoriales:
De+i"o a 6ue el 7#pty2ataFo0 1 encabe%ado 1 pie de p=gina 1 ) Pager 5ilas 'o est.'
asocia"os co' u' origen de datos "e registro1 6ue sie$%re te'"r. u' nulo 3alor %ara
sus 2ataIte# %ro%ie"a". Por esta ra0!'1 a'tes "e i'te'tar tra+a#ar co'
el 2ataIte# %ro%ie"a" "e la actual 9ridVie0Fo0 1 %ri$ero te'e$os 6ue asegurar'os "e
6ue esta$os trata'"o co' u' 2ataFo0 . Esto se %ue"e lograr $e"ia'te el co'trol "e
la ro0Type %ro%ie"a" "e la 9ridVie0Fo0 1 "e la siguie'te $a'era(
protected void HighlightCheapProducts_RowDataBound (object sender,
GridViewRowEventArgs e)
{
/ / Asegrese de que estamos trabajando con una fila de datos
si (== e.Row.RowType DataControlRowType.DataRow)
{
/ / Obtener el objeto ProductsRow de la propiedad DataItem ...
Northwind.ProductsRow producto =
(Northwind.ProductsRow) ((System.Data.DataRowView) e.Row.DataItem) Fila.;
if (! product.IsUnitPriceNull () & & product.UnitPrice <10m)
{
/ / TODO: fila resaltado en amarillo ...
}
}
}
Paso <: .l destacar la a#arilla 'ila cuando el !alor
$nitPrice es #enos de O 1,
El <lti$o %aso es %o'er "e relie3e to"a la %rogra$aci!' 9ridVie0Fo0 si el Precio por
unidad "e 3alor %ara ese registro es $e'os "e ^ 10. 9a si'tais %ara acce"er a
u' 9ridVie0 5ilas Ms o "e las c-lulas es el $is$o 6ue co'
el2etailsVie0 ( ?rid@ie%A(.Ro%s BiC %ara acce"er a to"a la 5ila1 ) ?rid@ie%A(.Ro%s BiC 4as
cDlulas BindiceC. %ara acce"er a u'a cel"a e' %articular. Si' e$+argo1 cua'"o
el Fo02ataDound i'ce'"ios "e co'trola"or "e e3e'tos1 el e'lace "e
"atos9ridVie0Fo0 a<' 'o se ha a=a"i"o a la 'ilas "e la colecci!' "e 9ridVie0 . Por lo
ta'to1 'o se %ue"e acce"er a la actual 9ridVie0Fo0 e#e$%lo "e
la Fo02ataDound co'trola"or "e e3e'tos utili0a'"o el Filas colecci!'.
E' lugar "e 9ridVie0I2Fo0s MiN 1 se %ue"e hacer re5ere'cia a la
actual 9ridVie0Fo0 e#e$%lo1 e' el Fo02ataDoundco'trola"or "e e3e'tos
utili0a'"o eFo0 . Es "ecir1 co' el 5i' "e %o'er "e relie3e la actual 9ridVie0Fo0 e#e$%lo
"e laFo02ataDound co'trola"or "e e3e'tos1 %o"e$os utili0ar los siguie'tes(
e.Row.BackColor = System.Drawing.Color.Yellow;
E' lugar "e esta+lecer la propiedad DacJColor "e la
%ro%ie"a" 9ridVie0Fo0 "irecta$e'te1 3a$os a seguir co' el uso "e clases CSS. He
crea"o u'a clase CSS lla$a"a .''ordablePrice7#p"asis 6ue esta+lece el color "e 5o'"o
a$arillo. El co$%leta"o Fo02ataDound co'trola"or "e e3e'tos siguie'te(
protected void HighlightCheapProducts_RowDataBound (object sender,
GridViewRowEventArgs e)
{
/ / Asegrese de que estamos trabajando con una fila de datos
si (== e.Row.RowType DataControlRowType.DataRow)
{
/ / Obtener el objeto ProductsRow de la propiedad DataItem ...
Northwind.ProductsRow producto =
(Northwind.ProductsRow) ((System.Data.DataRowView) e.Row.DataItem) Fila.;
if (! product.IsUnitPriceNull () & & product.UnitPrice <10m)
{
e.Row.CssClass = "AffordablePriceEmphasis";
}
}
}
Figura 11 *os productos #=s aseBuibles est=n resaltadas en a#arillo (Clic en la
'oto para una i#agen #=s grande)
Conclusin
E' este tutorial1 he$os 3isto c!$o "ar 5or$ato
al 9ridVie0 1 2etailsVie0 ) For#Vie0 +asa"o e' los "atos e'la0a"os al co'trol. Para
lle3ar a ca+o1 esto 6ue he$os crea"o u' co'trola"or "e e3e'tos %ara
el 2ataDound o Fo02ataDounde3e'to1 "o'"e los "atos su+)ace'tes se ea$i'! #u'to
co' u' ca$+io "e 5or$ato1 si es 'ecesario. Para acce"er a los "atos e'la0a"os a
u' 2etailsVie0 o For#Vie0 1 se utili0a el 2ataIte# %ro%ie"a" e'
el 2ataDound co'trola"or "e e3e'tos1 %ara u' 9ridVie0 1 el 2ataIte# %ro%ie"a" "e
ca"a 9ridVie0Fo0 i'sta'cia co'tie'e los "atos e'la0a"os a la 5ila1 6ue est. "is%o'i+le e'
el Fo02ataDound co'trola"or "e e3e'tos.
9a si'tais "e %rogra$aci!' a#ustar el 5or$ato e' el co'trol *e+ "e "atos "e%e'"e "el
co'trol "e &'ter'et ) c!$o los "atos %ara ser 5or$atea"o se
$uestra. Para 2etailsVie0 ) 9ridVie0 co'troles1 las 5ilas ) las c-lulas se %ue"e acce"er
$e"ia'te u' B'"ice or"i'al. Para el For#Vie0 1 6ue utili0a las %la'tillas1 el FindControl
(@controlI2@) se utili0a 'or$al$e'te %ara locali0ar a u' co'trol "e *e+ "es"e "e'tro "e la
%la'tilla.
E' el siguie'te tutorial1 3ere$os c!$o utili0ar las %la'tillas co'
el 9ridVie0 ) 2etailsVie0 . A"e$.s1 3a$os a 3er otra t-c'ica %ara %erso'ali0ar el
5or$ato +asa"o e' los "atos su+)ace'tes.
Tutorial 1+: $so de Te#plateFields en el
control 9ridVie0

Scott Mitchell
02 200Z
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial 1+ (Visual C #)
&'tro"ucci!'
Paso 1( u'i!' "e los "atos %ara el Dri"7ie4
Paso 2( 7isuali0aci!' "e los 'o$+res ) a%elli"os e' u'a sola colu$'a
Paso ,( Co' el co'trol Cale'"ar %ara $ostrar el ca$%o HireDate
Paso /( Muestra el '<$ero "e "Bas 6ue el e$%lea"o ha)a tra+a#a"o %ara la e$%resa
Co'clusi!'
So+re el autor
Agra"eci$ie'tos
Introduccin
El 9ridVie0 se co$%o'e "e u' co'#u'to "e ca$%os 6ue i'"ica' lo 6ue las %ro%ie"a"es
"el origen de datos se i'cluir.' e' el resulta"o re%rese'ta"o #u'to co' la 5or$a "e los
"atos e' la %a'talla. El ti%o $.s si$%le es el ca$%oDoundField 1 6ue $uestra u' 3alor "e
"atos co$o teto. Gtros ti%os "e ca$%o "e 3isuali0aci!' "e los "atos usa'"o ele$e'tos
HTM9 alter'ati3o. El C"ecJDoxField 1 %or e#e$%lo1 se $uestra co$o u'a casilla "e
3eri5icaci!' 6ue co$%rue+a el esta"o "e%e'"e "el 3alor "e u' ca$%o "e "atos
es%eci5ica"o1 el I#ageField tras$ite u'a i$age' cu)a i$age' "e orige' se +asa e' u'
ca$%o "e "atos es%eci5ica"o. 9os hi%er3B'culos ) los +oto'es "e cu)o esta"o "e%e'"e "e
u'a +ase "e "atos "e ca$%o 3alor %ue"e re%rese'tarse $e"ia'te
la Ayper*inJField ) DuttonField ti%os "e ca$%o1 res%ecti3a$e'te.
Mie'tras 6ue el C"ecJDoxField 1 I#ageField 1 Ayper*inJField ) DuttonField ti%os "e
ca$%o %ara %er$itir u'a 3ista alter'ati3a "e los "atos1 to"a3Ba so' +asta'te li$ita"os co'
res%ecto al 5or$ato. A C"ecJDoxField s!lo %ue"e $ostrar u'a casilla "e 3eri5icaci!'1
$ie'tras 6ue u' I#ageField s!lo %ue"e $ostrar u'a sola i$age'. J@u- %asa si u' ca$%o
e' %articular "e+e $ostrar u' teto1 u'a casilla "e 3eri5icaci!'1 ! u'a i$age'1 to"o se +asa
e' "i5ere'tes ca$%os "e "atos los 3aloresR G J6u- %asa si 6uere$os $ostrar los "atos
utili0a'"o u' co'trol *e+ 6ue 'o sea el C"ecJDox 1 de i#agen1 Ayper*inJ 1 o el
botn R A"e$.s1 el DoundField li$ita su %a'talla a u' <'ico ca$%o "e "atos. J@u- %asa
si he$os 6ueri"o $ostrar "os o $.s ca$%os "e "atos los 3alores e' u'
solo 9ridVie0 colu$'aR
Para a"a%tarse a este 'i3el "e 5lei+ili"a"1 el 9ridVie0 o5rece la Te#plateField 1 6ue
hace uso "e u'a lantilla . >'a %la'tilla %ue"e i'cluir u'a co$+i'aci!' "e HTM9 est.tico1
co'troles *e+1 ) la si'tais "e e'lace "e "atos. A"e$.s1 elTe#plateField tie'e u'a
3arie"a" "e %la'tillas 6ue se %ue"e' utili0ar %ara %erso'ali0ar la re%rese'taci!' "e las
"i5ere'tes situacio'es. Por e#e$%lo1 el Ite#Te#plate se utili0a %or "e5ecto %ara hacer 6ue
el celular %ara ca"a 5ila1 %ero el 7ditIte#Te#plate %la'tilla se %ue"e utili0ar %ara
%erso'ali0ar la i'ter5a0 %ara e"itar los "atos.
E' este tutorial1 3a$os a ea$i'ar c!$o utili0ar el Te#plateField %ara lograr u' $a)or
gra"o "e %erso'ali0aci!' co' el 9ridVie0 co'trol. E' el tutorial a'terior 1 3i$os c!$o
%erso'ali0ar el 5or$ato +asa"o e' los "atos su+)ace'tes utili0a'"o
el 2ataDound ) Fo02ataDound co'trola"ores "e e3e'tos. Gtra $a'era "e %erso'ali0ar
el 5or$ato +asa"o e' los "atos su+)ace'tes lla$a'"o a los $-to"os "e 5or$ato "e'tro "e
u'a %la'tilla. Pro'to 'os ocu%are$os "e esta t-c'ica e' este tutorial1 ta$+i-'.
Para este tutorial1 3a$os a utili0ar Te#plateField s %ara %erso'ali0ar el as%ecto "e u'a
lista "e e$%lea"os. E' co'creto1 3a$os a u'a lista "e to"os los e$%lea"os1 %ero se
$ostrar.' los 'o$+res ) a%elli"os "e los e$%lea"os e' u'a colu$'a1 sus 5echas "e
co'trataci!' e' u' calendario "e co'trol1 ) u'a colu$'a "e esta"o 6ue i'"ica cu.'tos
"Bas ha' si"o e$%lea"os e' la e$%resa.
Figura 1 Tres Te#plateFields se utili%an para personali%ar la pantalla (Clic en la
'oto para una i#agen #=s grande)
Paso 1: unin de los datos para el 9ridVie0
E' esce'arios "e i'5or$es e' los 6ue se "e+e utili0ar Te#plateField s %ara %erso'ali0ar el
as%ecto1 $e resulta $.s 5.cil e$%e0ar %or la creaci!' "e u' 9ridVie0 co'trol 6ue
co'tie'e s!lo DoundField s %ri$ero1 ) luego a=a"ir 'ue3asTe#plateField s o co'3ertir la
actual DoundField s %ara Te#plateField s1 co$o sea 'ecesario. Por lo ta'to1 3a$os a
e$%e0ar este tutorial $e"ia'te la a"ici!' "e u' 9ridVie0 a la %.gi'a a tra3-s "el "ise=o )
e'la0arlo a u'4b6ect2ata(ource 6ue "e3uel3e la lista "e e$%lea"os. Estas $e"i"as
co'tri+uir.' a crear u' 9ridVie0 co' u'DoundField %ara ca"a u'o "e los ca$%os "e los
e$%lea"os.
A+ra la %.gi'a Dri"7ie4Te$%lateEiel".as% ) arrastre u' 9ridVie0 "el cua"ro "e
herra$ie'tas hasta el "ise=a"or.Des"e el 9ridVie0 tag Ms i'telige'te1 o%tar %or a=a"ir u'
'ue3o 4b6ect2ata(ource co'trol 6ue i'3oca el 9et7#ployees () el $-to"o "e
la 7#ployeesD** clase.
Figura + .5adir un nue!o control 4b6ect2ata(ource Bue in!oca el #?todo
9et7#ployees () (Clic en la 'oto para una i#agen #=s grande)
E'la0ar el 9ridVie0 "e esta $a'era se a=a"e auto$.tica$e'te u'a DoundField %ara
ca"a u'a "e las %ro%ie"a"es "e los e$%lea"os( de
e#pleado 1 .pellido 1 /o#bre 1 TCtulo 1 Fec"a de contratacin 1 FeportsTo 1
) PaCs . Para este i'5or$e1 'o ha) 6ue %reocu%arse %or $ostrar
el 7#ployeeI2 1 FeportsTo 1 o PaCs "e %ro%ie"a". Para eli$i'ar estosDoundField s1
uste" %ue"e(
>tilice el Ca#pos cua"ro "e "i.logo. Haga clic e' el 7ditar colu#nas e'lace "es"e
el 9ridVie0 tag Ms i'telige'te %ara a+rir este cua"ro "e "i.logo. A co'ti'uaci!'1
seleccio'e la DoundFields "e la lista i'5erior i06uier"a1 ) haga clic e' el ro#o E +ot!'
%ara eli$i'ar el DoundField .
E"ite el 9ridVie0 si'tais Ms "eclarati3a co' la $a'o. Des"e el %u'to "e 3ista "e
orige'1 eli$i'ar la<asp:BoundField> ele$e'to %ara la DoundField 6ue "esea eli$i'ar.
Des%u-s "e ha+er 6uita"o la DoundFields 'o$+re de e#pleado 1 FeportsTo ) PaCs 1
el 9ridVie0 Ms $arca"o "e+e te'er el siguie'te as%ecto(
<Asp: GridView ID = "GridView1" runat = "server"
AutoGenerateColumns = "False" DataKeyNames = "EmployeeID"
DataSourceID = "ObjectDataSource1">
<columnas>
<Asp: BoundField DataField = "Apellido" HeaderText = "Apellido"
SortExpression = "Apellido" />
<Asp: BoundField DataField = "Nombre" HeaderText = "Nombre"
SortExpression = "Nombre" />
<Asp: BoundField DataField = "Ttulo" HeaderText = "Ttulo"
SortExpression = "Ttulo" />
<Asp: BoundField DataField = "HireDate" HeaderText = "Fecha de contratacin"
SortExpression = "Fecha de contratacin" />
</ Columns>
</ Asp: GridView>
To$e u' $o$e'to %ara 3er 'uestro %rogreso e' u' 'a3ega"or. E' este %u'to1 uste" "e+e
3er u'a ta+la co' u' registro "e ca"a e$%lea"o ) cuatro colu$'as( u'a %or el a%elli"o "el
e$%lea"o1 'o$+re1 tBtulo ) 5echa "e co'trataci!'.
Figura 1 7l .pellido> /o#bre> TCtulo> Fec"a de contratacin y los ca#pos se
#uestran para cada e#pleado (Clic en la 'oto para una i#agen #=s grande)
Paso +: Visuali%acin de los no#bres y apellidos en
una sola colu#na
E' la actuali"a"1 el 'o$+re ) a%elli"o "e ca"a e$%lea"o se $uestra' e' u'a colu$'a
se%ara"a. SerBa +ue'o %ara co$+i'arlos e' u'a sola colu$'a1 e' su lugar. Para lograr esto1
"e+e$os utili0ar u' Te#plateField . Po"e$os a=a"ir u'a 'ue3a Te#plateField 1
a=a"irle el $arge' 'ecesario ) la si'tais "e e'lace "e "atos1 ) luego eli$i'ar
elDoundFields lla$a"o /o#bre ) .pellido 1 o +ie' %o"e$os co'3ertir
la DoundFields 'o$+re /o#bre e' u'Te#plateField 1 e"itar el Te#plateField %ara
i'cluir el *ast/a#e 3alor 1 ) luego retire la DoundField lla$a"o*ast/a#e .
A$+as a%roi$acio'es a la re" el $is$o resulta"o1 %ero %erso'al$e'te $e gusta
co'3ertir DoundFields aTe#plateFields 1 cua'"o sea %osi+le1 %or6ue la co'3ersi!'
agrega auto$.tica$e'te u' Ite#Te#plate )7ditIte#Te#plate co' co'troles 4e+ ) la
si'tais "e e'lace "e "atos %ara i$itar la a%arie'cia ) 5u'cio'ali"a" "e laDoundField . 9a
3e'ta#a es 6ue te'"re$os 6ue hacer $e'os tra+a#o co' el Te#plateField 1 co$o el
%roceso "e co'3ersi!' se ha' reali0a"o algu'os tra+a#os %ara 'osotros.
Para co'3ertir u' DoundField e' u' Te#plateField 1 haga clic e' el 7ditar
colu#nas e'lace "es"e el 9ridVie0 tag Ms i'telige'te1 6ue 'os lle3a a la Ca#pos cua"ro
"e "i.logo. Seleccio'e la DoundField %ara co'3ertir la lista e' la es6ui'a i'5erior
i06uier"a1 a co'ti'uaci!'1 haga clic e' el Con!ertir este ca#po en un
Te#plateField e' la es6ui'a i'5erior "erecha.
Figura 3 Con!ertir un DoundField en un Te#plateField en el cuadro de di=logo
Ca#pos (Clic en la 'oto para una i#agen #=s grande)
Seguir a"ela'te ) co'3ertir el DoundField 'o$+re /o#bre e'
u' Te#plateField . Des%u-s "e este ca$+io1 'o ha) "i5ere'cia %erce%ti3a e' el
Dise=a"or. Esto se "e+e a la co'3ersi!' "e la DoundField e' u' Te#plateField crea
u'Te#plateField 6ue $a'tie'e la a%arie'cia "e la DoundField . A %esar "e 6ue ha)a
'i'gu'a "i5ere'cia 3isual e' este $o$e'to e' el "ise=a"or1 este %roceso "e co'3ersi!' ha
sustitui"o a la DoundField Ms Si'tais "eclarati3aI<asp:BoundField DataField="FirstName"
HeaderText="FirstName" SortExpression="FirstName" /> co' las
siguie'tes Te#plateField si'tais(
<asp:TemplateField HeaderText="FirstName" SortExpression="FirstName">
<EditItemTemplate>
<Asp: TextBox ID = "TextBox1" runat = "server"
Texto ='<%# Bind ("Nombre") %>'></ asp: TextBox>
</ EditItemTemplate>
<ItemTemplate>
<Asp: ID Label = "Label1" runat = "server"
Texto ='<%# Bind ("Nombre") %>'></ asp: Label>
</ ItemTemplate>
</ Asp: TemplateField>
Co$o %ue"e 3er1 el Te#plateField se co$%o'e "e "os $o"elos( u' Ite#Te#plate 6ue
tie'e u'a etiBueta cu)o texto%ro%ie"a" se esta+lece e' el 3alor "el /o#bre "e ca$%o
"e "atos1 ) u'a 7ditIte#Te#plate 6ue tie'e u' TextDoxco'trol cu)o texto la %ro%ie"a"
ta$+i-' se esta+lece e' el /o#bre "e "atos so+re el terre'o. El e'lace "e "atos "e la
si'tais <% # Bind ("nombre de campo")%> 1 i'"ica 6ue el 'ield/a#e ca$%o "e "atos se
e'la0a a la %ro%ie"a" "e co'trol *e+ es%eci5ica"o.
Para agregar el .pellido "e "atos "e ca$%o 3alor a esta Te#plateField 1 ha) 6ue a=a"ir
otra etiBueta "e co'trol *e+ e' el Ite#Te#plate ) u'irse a su texto a la
%ro%ie"a" *ast/a#e . Esto se %ue"e lograr )a sea a $a'o o $e"ia'te el Dise=a"or. Para
hacerlo a $a'o1 s!lo tie'e 6ue a=a"ir la si'tais "eclarati3a a"ecua"a a
la Ite#Te#plate (
<asp:TemplateField HeaderText="FirstName" SortExpression="FirstName">
<EditItemTemplate>
<Asp: TextBox ID = "TextBox1" runat = "server"
Texto ='<%# Bind ("Nombre") %>'></ asp: TextBox>
</ EditItemTemplate>
<ItemTemplate>
<Asp: ID Label = "Label1" runat = "server"
Texto ='<%# Bind ("Nombre") %>'></ asp: Label>
<Asp: ID Label = "Label2" runat = "server"
Texto ='<%# Bind ("LastName") %>'></ asp: Label>
</ ItemTemplate>
</ Asp: TemplateField>
Para agregar a tra3-s "el "ise=o1 haga clic e' el 7ditar plantillas de e'lace "es"e
el 9ridVie0 tag Ms i'telige'te. Esto $ostrar. el 9ridVie0 Ms "e e"ici!' "e %la'tillas "e
i'ter5a0. E' la eti6ueta i'telige'te "e esta i'ter5a0 es u'a lista "e las %la'tillas e'
el 9ridVie0 . De+i"o a 6ue s!lo te'e$os u' Te#plateField e' este %u'to1 las %la'tillas
s!lo a%arece e' la lista "es%lega+le so' las %la'tillas %ara el /o#bre Te#plateField 1
#u'to co' el 7#pty2ataTe#plate ) PagerTe#plate. El 7#pty2ataTe#plate %la'tilla1
si se es%eci5ica1 se utili0a %ara re%rese'tar el control 9ridVie0 "e sali"a Ms si 'o ha)
resulta"os e' los "atos e'la0a"os a la 9ridVie0 1 el PagerTe#plate 1 si se es%eci5ica1 se
utili0a %ara re%rese'tar la i'ter5a0 "e %agi'aci!' %ara u' 9ridVie0 6ue a"$ite la
%agi'aci!'.
Figura - Plantillas de la 9ridVie0 se puede editar a tra!?s del dise5o (Clic en la
'oto para una i#agen #=s grande)
Para 3er ta$+i-' la *ast/a#e e' el /o#bre Te#plateField 1 arrastre la etiBueta "e
co'trol "e la ca#a "e herra$ie'tas e' el Ite#Te#plate "el /o#bre Te#plateField e'
el 9ridVie0 Ms "e e"ici!' "e %la'tillas "e i'ter5a0.
Figura 8 .gregue un control Web *abel a la Ite#Te#plate Te#plateField
/o#bre es (Clic en la 'oto para una i#agen #=s grande)
E' este %u'to1 la etiBueta "e co'trol "e *e+ agrega a la Te#plateField tie'e
su texto co'#u'to "e %ro%ie"a"es "eetiBuetas . Te'e$os 6ue ca$+iar esto1 asB 6ue esta
%ro%ie"a" est. liga"a al 3alor "e la *ast/a#e ca$%o "e "atos1 e' su lugar. Para lograr
esto1 haga clic e' la etiBueta "e eti6uetas i'telige'tes "e co'trol ) elegir
el 2ataDindings 7ditaro%ci!'.
Figura : 7li6a la opcin 7ditar 2ataDindings de etiBuetas inteligentes de la
etiBueta (Clic en la 'oto para una i#agen #=s grande)
Co' ello se a+re la 2ataDindings cua"ro "e "i.logo. Des"e a6uB1 uste" %ue"e seleccio'ar
la %ro%ie"a" a %artici%ar e' el e'lace "e "atos "e la lista "e la i06uier"a1 )1 e' la lista
"es%lega+le a la "erecha1 seleccio'e el ca$%o al 6ue e'la0ar los "atos. Eli#a
el texto %ro%ie"a" "e la i06uier"a ) el .pellido "e ca$%o "e la "erecha1 ) haga clic
e' .ceptar .
Figura ; 4bligar a la propiedad Text en el ca#po de datos *ast/a#e (Clic en la
'oto para una i#agen #=s grande)
/ota El 2ataDindings cua"ro "e "i.logo le %er$ite i'"icar si se "e+e reali0ar "e "os
3Bas "e e'lace "e "atos. Si "e#a si' $arcar1 la si'tais "e e'lace "e "atos <% # Eval
("LastName")%> se utili0ar.1 e' lugar "e <% # Bind ("LastName")%> . Cual6uiera "e estos
e'5o6ues est. $u) +ie' %ara este tutorial. E'lace +i"ireccio'al "e "atos es i$%orta'te
cua'"o la i'serci!' ) e"ici!' "e "atos. Para $ostrar s!lo los "atos1 si' e$+argo1 a$+os
e'5o6ues 5u'cio'a' igual "e +ie'. Ha+lare$os "e "os 3Bas "e e'lace "e "atos e' "etalle1
e' 5uturos tutoriales.
To$e u' $o$e'to %ara 3er esta %.gi'a e' u' 'a3ega"or. Co$o %ue"e 3er1
el 9ridVie0 to"a3Ba i'clu)e cuatro colu$'as1 si' e$+argo1 el /o#bre "e colu$'a )a las
listas "e ambos el /o#bre ) .pellido 3alores "e los "atos "e ca$%o.
Figura < Tanto el /o#bre y .pellido !alores se #uestran en una sola
colu#na (Clic en la 'oto para una i#agen #=s grande)
Para co$%letar este %ri$er %aso1 6uitar el *ast/a#e DoundField 1 ) ca$+iar el 'o$+re
"el AeaderText %ro%ie"a" "el/o#bre Te#plateField a HNo$+reH. Des%u-s "e estos
ca$+ios1 el 9ridVie0 $arca"o Ms "eclarati3o "e+e te'er el siguie'te as%ecto(
<Asp: GridView ID = "GridView1" runat = "server"
AutoGenerateColumns = "False" DataKeyNames = "EmployeeID"
DataSourceID = "ObjectDataSource1">
<columnas>
<Asp: TemplateField HeaderText = "Nombre"
SortExpression = "Nombre">
<EditItemTemplate>
<Asp: TextBox ID = "TextBox1" runat = "server"
Texto ='<%# Bind ("Nombre") %>'></ asp: TextBox>
</ EditItemTemplate>
<ItemTemplate>
<Asp: ID Label = "Label1" runat = "server"
Texto ='<%# Bind ("Nombre") %>'></ asp: Label>
<Asp: ID Label = "Label2" runat = "server"
Texto ='<%# Eval ("LastName") %>'></ asp: Label>
</ ItemTemplate>
</ Asp: TemplateField>
<Asp: BoundField DataField = "Ttulo" HeaderText = "Ttulo"
SortExpression = "Ttulo" />
<Asp: BoundField DataField = "HireDate" HeaderText = "Fecha de contratacin"
SortExpression = "Fecha de contratacin" />
</ Columns>
</ Asp: GridView>
Figura 1, /o#bre y apellido de cada e#pleado se #uestran en una
colu#na (Clic en la 'oto para una i#agen #=s grande)
Paso 1: Con el control Calendar para #ostrar el
ca#po Aire2ate
7ie'"o u' 3alor "e "atos "e ca$%o co$o teto e' u' 9ridVie0 es ta' 5.cil co$o usar
u' DoundField . E' ciertos casos1 si' e$+argo1 los "atos se e%resa $e#or $e"ia'te u'
co'trol "e *e+ e' %articular e' lugar "e s!lo teto. Esta a"a%taci!' "e la 3isuali0aci!' "e
"atos es %osi+le co' u' Te#plateField . Por e#e$%lo1 e' lugar "e $ostrar la 5echa "el
e$%lea"o "e al6uiler e' 5or$a "e teto1 6ue %o"rBa $ostrar u' cale'"ario 8co' el co'trol
"e cale'"ario :1 co' 5echa "el e$%lea"o "e al6uiler resalta"o.
Para lograr esto1 co$e'0ar %or la co'3ersi!' "e la DoundField lla$a"o Aire2ate e'
u' Te#plateField . S!lo tie'es 6ue ir a la 9ridVie0 tag Ms i'telige'te ) haga clic e'
el 7ditar colu#nas e'lace1 6ue 'os lle3a a la Ca#pos cua"ro "e "i.logo. Seleccio'e
la DoundField lla$a"o Aire2ate 1 ) haga clic e' Con!ertir este ca#po en un
Te#plateField .
Figura 11 Con!ertir el Aire2ate DoundField en un Te#plateField (Clic en la 'oto
para una i#agen #=s grande)
Co$o 3i$os e' el %aso 21 este ree$%la0ar. al DoundField co' u' Te#plateField 6ue
co'tie'e u' Ite#Te#plate )7ditIte#Te#plate co' u'a etiBueta ) cuadro de
texto cu)o texto %ro%ie"a"es est.' o+liga"os a la Aire2ate 3alor utili0a'"o la si'tais "e
e'lace "e "atos <% # Bind ("Fecha de contratacin") %> .
Para ree$%la0ar el teto co' u' calendario "e co'trol1 $o"i5icar la %la'tilla $e"ia'te la
eli$i'aci!' "e la etiBueta ) la a"ici!' "e u' calendario "e co'trol. Des"e el "ise=o1
seleccio'e 7ditar plantillas "e la 9ridVie0 tag Ms i'telige'te )1 a %artir "e la lista
"es%lega+le1 eli#a el Ite#Te#plate "el Aire2ate Te#plateField . A co'ti'uaci!'1
eli$i'e la etiBueta "e co'trol ) arrastre u' calendario "e co'trol "e la ca#a "e
herra$ie'tas e' la i'ter5a0 "e e"ici!' "e %la'tillas.
Figura 1+ .gregue un control de calendario para el Ite#Te#plate Te#plateField
Aire2ate es (Clic en la 'oto para una i#agen #=s grande)
E' este %u'to1 ca"a 5ila "e la 9ridVie0 co'te'"r. u' calendario "e co'trol e'
su Aire2ate Te#plateField . Si' e$+argo1 el e$%lea"o actual Aire2ate 3alor 'o est.
esta+leci"o e' cual6uier %arte "el calendario "e co'trol1 lo 6ue hace 6ue
ca"a calendario "e co'trol %or "e5ecto %ara $ostrar el $es e' curso ) la 5echa. Para
re$e"iar esto1 te'e$os 6ue asig'ar a ca"a
e$%lea"o Aire2ate al Calendario co'trol Selecte"Date ) 7isi+leDate %ro%ie"a"es.
Des"e el Calendario "e eti6uetas i'telige'tes "e co'trol1 seleccio'e 7ditar
2ataDinding . Se u'e' al la"o1 ta'to el(elected2ate ) Visible2ate %ro%ie"a"es a
la Aire2ate ca$%o "e "atos.
Figura 11 7nla%ar las propiedades (elected2ate y Visible2ate al ca#po de datos
Aire2ate (Clic en la 'oto para una i#agen #=s grande)
/ota El calendario "e 5echas seleccio'a"o co'trol 'o 'ecesaria$e'te tie'e 6ue ser
3isi+le. Por e#e$%lo1 u' cale'"ario %o"rBa te'er 01 "e agosto 1KKK1 co$o la 5echa
seleccio'a"a1 %ero se $uestra el $es ) a=o actuales. 9a 5echa seleccio'a"a ) la 5echa
3isi+le so' es%eci5ica"os %or el calendario "e co'trol
"e(elected2ate ) Visible2ate %ro%ie"a"es. Por6ue 6uere$os ta'to a seleccio'ar el
e$%lea"o Aire2ate ) aseg<rese "e 6ue est. "e$ostra"o1 ha) 6ue u'ir a$+as
%ro%ie"a"es a la Aire2ate ca$%o "e "atos.
Al co'sultar la %.gi'a e' u' 'a3ega"or1 el cale'"ario $uestra ahora el $es "e la 5echa "e
co'trataci!' "el tra+a#a"or ) elige esa 5echa e' %articular.
Figura 13 Fec"a de contratacin del e#pleado se #uestra en el control
Calendar (Clic en la 'oto para una i#agen #=s grande)
/ota A "i5ere'cia "e to"os los e#e$%los 6ue he$os 3isto hasta ahora1 %ara este tutorial
6ue hici$os noesta+lecer el 7nableVie0(tate %ro%ie"a" a 'also %ara este 9ridVie0 . 9a
ra0!' "e esta "ecisi!' es 6ue hacie'"o clic e' las 5echas "el calendario "e co'trol
%ro3oca u'a %ostI+ac?1 a#uste "e la 5echa seleccio'a"a "el cale'"ario a la 5echa aca+a "e
hacer clic. Si el 9ridVie0 Mesta"o s "e 3ista est- "esha+ilita"o1 'o o+sta'te1 e' ca"a %ostI
+ac?1 el 9ridVie0 "e "atos "e s es "e re+ote a su orige' "e "atos su+)ace'te1 lo 6ue hace
6ue la 5echa seleccio'a"a "el cale'"ario %ara esta+lecer de nuevo a los
e$%lea"os Aire2ate 1 so+rescri+ie'"o la 5echa elegi"a %or el usuario.
Para este tutorial1 esta es u'a "iscusi!' irrele3a'te1 %or6ue el usuario 'o es ca%a0 "e
actuali0ar el e$%lea"o Fec"a de contratacin . Pro+a+le$e'te serBa $e#or %ara
co'5igurar el calendario "e co'trol1 %or lo 6ue sus 5echas 'o so' seleccio'a+les. De
cual6uier $a'era1 este tutorial $uestra 6ue e' algu'as circu'sta'cias1 el esta"o "e 3ista
"e+e' estar ha+ilita"as e' el 5i' "e %ro%orcio'ar u'a cierta 5u'cio'ali"a".
Paso 3: &uestra el nH#ero de dCas Bue el e#pleado
"aya traba6ado para la e#presa
Hasta ahora1 he$os 3isto "os a%licacio'es "e Te#plateField s(
9a co$+i'aci!' "e "os o $.s ca$%os "e "atos los 3alores e' u'a colu$'a
E%resar u' 3alor "e "atos "e ca$%o $e"ia'te u' co'trol "e *e+ e' lugar "e teto
>' tercer uso "e Te#plateField s est. e' la 3isuali0aci!' "e los $eta"atos so+re
el 9ridVie0 "e "atos Ms su+)ace'te.A"e$.s "e $ostrar las 5echas "e los e$%lea"os "e
al6uiler1 %or e#e$%lo1 ta$+i-' %ue"e ser 6ue "esee te'er u'a colu$'a 6ue $uestra el
'<$ero total "e "Bas 6ue ha' esta"o e' el tra+a#o.
Si' e$+argo1 otro uso "e Te#plateField s se %rese'ta e' esce'arios e' los 6ue los "atos
su+)ace'tes "e+e' $ostrarse "e 5or$a "i5ere'te e' el i'5or$e "e la %.gi'a *e+ "e la
5or$a e' 6ue se al$ace'a e' la +ase "e "atos.&$agi'a 6ue e' la ta+la e$%lea"os tie'e u'
ca$%o "e D-'ero1 6ue al$ace'a el car.cter M o E1 %ara i'"icar el seo "el
e$%lea"o. Cua'"o se $uestra esta i'5or$aci!' e' u'a %.gi'a *e+1 6ue %ue"e ser 6ue
"esee %ara $ostrar el seo co$o H$asculi'oH o HMu#eresH1 e' lugar "e s!lo HMH o HEH.
E' estos "os casos %ue"e' ser $a'e#a"os %or la creaci!' "e u' mDtodo de formato e' la
clase "e c!"igo su+)ace'te "e la %.gi'a ASP.NET 8o e' u'a +i+lioteca "e clases se%ara"as1
i$%le$e'ta"o co$o u'a est=tica $-to"o: 6ue se i'3oca "es"e la %la'tilla. Co$o u'
$-to"o "e 5or$ato se i'3oca "es"e la %la'tilla utili0a'"o la $is$a si'tais "e e'lace "e
"atos 3isto a'tes. El $-to"o "e 5or$ato %ue"e to$ar e' cual6uier '<$ero "e %ar.$etros1
si'o 6ue "e+e "e3ol3er u'a ca"e'a. Esta ca"e'a se "e3uel3e el c!"igo HTM9 6ue se
i')ecta e' la %la'tilla.
Para ilustrar este co'ce%to1 3a$os a au$e'tar 'uestro tutorial %ara $ostrar u'a colu$'a
6ue $uestra el '<$ero total "e "Bas 6ue u' e$%lea"o ha esta"o e' el tra+a#o. Este
$-to"o "e 5or$ato se lle3ar. e' u' /ort"0ind7#ployeesFo0o+#eto ) "e3ol3erlo co$o
u'a ca"e'a el '<$ero "e "Bas 6ue el e$%lea"o ha tra+a#a"o. Este $-to"o se %ue"e
agregar al c!"igo su+)ace'te "e la %.gi'a ASP.NET "e clase1 %ero deben ser $arca"os
co$o protegidos o pHblicos co' el 5i' "e ser accesi+le "es"e la %la'tilla.
protegidos cadena DisplayDaysOnJob (empleado Northwind.EmployeesRow)
{
/ / Hacer HireDate que no es nulo ... si es as, volver "Desconocido"
if (employee.IsHireDateNull ())
return "Desconocido";
ms
{
/ / Devuelve el nmero de das entre la corriente
/ / Fecha / hora y HireDate
TimeSpan = ts DateTime.Now.Subtract (employee.HireDate);
volver ts.Days.ToString ("#,## 0 ");
}
}
De+i"o a 6ue el Aire2ate ca$%o %ue"e co'te'er /$** los 3alores "e +ase "e "atos1
%ri$ero "e+e asegurarse "e 6ue el 3alor 'o es /$** a'tes "e %roce"er co' el c.lculo. Si
el Aire2ate 3alor es /$** 1 s!lo "e3uel3e la ca"e'a H"esco'oci"oH1 ) si 'o es /$** 1 se
calcula la "i5ere'cia e'tre la hora ) la Fec"a de contratacin "e 3alores1 ) "e3ol3er el
'<$ero "e "Bas.
Para utili0ar este $-to"o1 "e+e$os i'3ocarlo "es"e u' Te#plateField e'
el 9ridVie0 utili0a'"o la si'tais "e e'lace "e "atos. E$%e0ar %or agregar u'a
'ue3a Te#plateField a la 9ridVie0 hacie'"o clic e' el 7ditar colu#nas e'lace e'
el9ridVie0 tag Ms i'telige'te ) a=a"ie'"o u'a 'ue3a Te#plateField .
Figura 1- .5adir un Te#plateField /ue!o en el 9ridVie0 (Clic en la 'oto para
una i#agen #=s grande)
Esta+lecer el AeaderText %ro%ie"a" "e este 'ue3o Te#plateField "e dCas en el
traba6o ) la Aori%ontal.lign%ro%ie"a" "e sus Ite#(tyle al Centro . Para lla$ar a
la 2isplay2ays4nGob $-to"o "e la %la'tilla1 agregar u'Ite#Te#plate ) utili0ar el
siguie'te e'lace "e "atos "e la si'tais(
<% # DisplayDaysOnJob ((Northwind.EmployeesRow)
(System.Data.DataRowView) Container.DataItem). Row)%>
Container2ataIte# "e3uel3e u' 2ataFo0Vie0 o+#eto 6ue se corres%o'"e co'
el 2ata(ource registro e'la0a"o a la9ridVie0Fo0 . Su 'ila %ro%ie"a" "e3uel3e el
esta+leci$ie'to i'5lei+le "e ti%os /ort"0ind7#ployeesFo0 1 6ue se %asa a
la 2isplay2ays4nGob $-to"o. Esta si'tais "e e'lace "e "atos %ue"e a%arecer
"irecta$e'te e' elIte#Te#plate 8co$o se $uestra e' la si'tais "eclarati3a 6ue sigue: o
%ue"e ser asig'a"o al texto "e %ro%ie"a" "e u'a etiBueta "e co'trol *e+.
/ota Co$o alter'ati3a1 e' lugar "e %asar "e u' 7#ployeesFo0 e#e$%lo1 6ue s!lo
%o"rBa %asar e' elAire2ate 3alor $e"ia'te <% # DisplayDaysOnJob (Eval ("Fecha de
contratacin"))%> . Si' e$+argo1 la 7!al $-to"o "e3uel3e u' ob6eto 1 %or lo 6ue
te'"rBa$os 6ue ca$+iar 'uestra2isplay2ays4nGob 5ir$a "el $-to"o %ara ace%tar u'
%ar.$etro "e e'tra"a "el ti%o "e ob6eto 1 e' su lugar. No a ciegas %ue"e la'0ar la 7!al
(@Fec"a de contratacin@) lla$a"a a u'a 'ec"a y "ora 1 %or6ue elAire2ate colu$'a e'
la ta+la E$%lea"os %ue"e co'te'er /$** 3alores. Por lo ta'to1 te'"rBa 6ue ace%tar
u' ob6eto co$o el %ar.$etro "e e'tra"a %ara el 2isplay2ays4nGob $-to"o1 co$%ro+ar
%ara 3er si ha+Ba u'a +ase "e "atos /$** 3alor 86ue se %ue"e lograr $e"ia'te el uso
"e Con!ertIs2D/ull (objectToCheck ) :1 ) luego actuar e' co'secue'cia.
De+i"o a estas sutile0as1 he o%ta"o %or %asar to"a la 7#ployeesFo0 e#e$%lo. E' el
siguie'te tutorial 3a$os a 3er u' e#e$%lo $.s a%ro%ia"o %ara el uso "e la Eval
(" column0ame ") si'tais %ara %asar u' %ar.$etro "e e'tra"a e' u' $-to"o "e 5or$ato.
A co'ti'uaci!' se $uestra la si'tais "eclarati3a %ara 'uestro 9ridVie0 "es%u-s "e 6ue
el Te#plateField se ha agrega"o ) la 2isplay2ays4nGob $-to"o lla$a"o "e
la Ite#Te#plate (
<Asp: GridView ID = "GridView1" runat = "server"
AutoGenerateColumns = "False" DataKeyNames = "EmployeeID"
DataSourceID = "ObjectDataSource1">
<columnas>
<Asp: TemplateField HeaderText = "Nombre"
SortExpression = "Nombre">
<EditItemTemplate>
<Asp: TextBox ID = "TextBox1" runat = "server"
Texto ='<%# Bind ("Nombre") %>'></ asp: TextBox>
</ EditItemTemplate>
<ItemTemplate>
<Asp: ID Label = "Label1" runat = "server"
Texto ='<%# Bind ("Nombre") %>'></ asp: Label>
<Asp: ID Label = "Label2" runat = "server"
Texto ='<%# Eval ("LastName") %>'></ asp: Label>
</ ItemTemplate>
</ Asp: TemplateField>
<Asp: BoundField DataField = "Ttulo" HeaderText = "Ttulo"
SortExpression = "Ttulo" />
<Asp: TemplateField HeaderText = "Fecha de contratacin"
SortExpression = "HireDate">
<EditItemTemplate>
<Asp: TextBox ID = "TextBox2" runat = "server"
Texto ='<%# Bind ("Fecha de contratacin") %>'></ asp: TextBox>
</ EditItemTemplate>
<ItemTemplate>
<Asp: Calendar ID = "Calendar1" runat = "server"
SelectedDate ='<%# Bind ("Fecha de contratacin")%> '
VisibleDate ='<%# Eval ("Fecha de contratacin")%> '>
</ Asp: Calendar>
</ ItemTemplate>
</ Asp: TemplateField>
<asp:TemplateField HeaderText="Days En El Job">
<ItemTemplate>
<% #
DisplayDaysOnJob ((Northwind.EmployeesRow) ((System.Data.DataRowView)
Container.DataItem). Row)%>
</ ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</ Asp: TemplateField>
</ Columns>
</ Asp: GridView>
9a 5igura 16 $uestra el tutorial co$%leto1 cua'"o se 3e a tra3-s "e u' 'a3ega"or.
Figura 18 /H#ero de dCas "a sido e#pleado en el traba6o (Clic en la 'oto para
una i#agen #=s grande)
Conclusin
El Te#plateField e' el 9ridVie0 "e co'trol %er$ite u' $a)or gra"o "e 5lei+ili"a" e' la
3isuali0aci!' "e los "atos 6ue est. "is%o'i+le co' los co'troles "e otro
ti%o. >' Te#plateField es i"eal %ara situacio'es e' las 6ue(
Ca$%os "e "atos "e+e' ser ehi+i"os e' u' 9ridVie0 colu$'a.
9os "atos se e%resa' $e#or $e"ia'te u' co'trol "e *e+1 e' lugar "e teto %la'o.
9a sali"a "e%e'"e "e los "atos su+)ace'tes1 co$o la 3isuali0aci!' "e los $eta"atos
o e' 5or$ato a los "atos.
A"e$.s "e %erso'ali0ar la 3isuali0aci!' "e "atos1 u' Te#plateField se utili0a ta$+i-'
%ara la %erso'ali0aci!' "e las i'ter5aces "e usuario utili0a"o %ara la e"ici!' ) la i'serci!'
"e "atos1 co$o 3ere$os e' 5uturos tutoriales.
9os siguie'tes "os tutoriales co'ti'uar e%lora'"o las %la'tillas1 a %artir "e u'a $ira"a e'
el uso "e Te#plateField s e' u' 2etailsVie0 . A co'ti'uaci!'1 %asare$os a
la For#Vie0 1 6ue utili0a las %la'tillas e' lugar "e ca$%os %ara %ro%orcio'ar u'a $a)or
5lei+ili"a" e' el "ise=o ) la estructura "e los "atos.
Tutorial 11: $so de Te#plateFields en
2etailsVie0

Scott Mitchell
02 200Z
Fesu#en: El Te#plateField e' el 2etailsVie0 "e co'trol %er$ite u' $a)or gra"o "e
5lei+ili"a" e' la 3isuali0aci!' "e "atos 6ue est. "is%o'i+le co' los co'troles "e ca$%o1 )
es i"eal %ara $<lti%les situacio'es1 $uchas "e las cuales se "iscute' e' este tutorial. 81/
%.gi'as i$%resas:
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial 11 (Visual C #)
&'tro"ucci!'
Paso 1( u'i!' "e los "atos %ara el Details7ie4
Paso 2( 9a co$+i'aci!' "e los %recios1 las u'i"a"es e' stoc?1 ) las >'i"a"es "e Gr"e' e'
u'a 5ila
"e 5or$ato el %recio "e u'a $o'e"a
agregar los ca$%os "e "atos 6ue %er$a'ece' a la Te$%lateEiel"
Paso ,( Perso'ali0aci!' "e la i'5or$aci!' "e ca$%o i'terru$%i"as
co'clusi!'
Introduccin
El Te#plateField o5rece u' $a)or gra"o "e 5lei+ili"a" e' la re%rese'taci!' "e "atos "e
la DoundField 1C"ecJDoxField 1 Ayper*inJField 1 ) otros co'troles "e "atos "e
ca$%o. E' el tutorial a'terior 3i$os co' elTe#plateField e' u' 9ridVie0 a(
7arias %a'tallas "e "atos "e ca$%o1 los 3alores e' u'a colu$'a. E' co'creto1 ta'to
el /o#bre ) .pellidoca$%os se co$+i'aro' e' u' 9ridVie0 colu$'a.
>tili0ar u' co'trol *e+ alter'ati3o %ara e%resar u' 3alor "e "atos "e ca$%o. He$os
3isto c!$o %ara $ostrar elAired2ate 3alor co' u' calendario "e co'trol.
Mostrar la i'5or$aci!' "e esta"o so+re la +ase "e los "atos su+)ace'tes. Mie'tras
6ue la ta+la E$%lea"os 'o co'tie'e u'a colu$'a 6ue "e3uel3e el '<$ero "e "Bas
6ue u' e$%lea"o ha esta"o e' el tra+a#o1 he$os si"o ca%aces "e $ostrar esa
i'5or$aci!' e' el 9ridVie0 e#e$%lo e' el tutorial a'terior1 co' el uso "e
u'Te#plateField $-to"o ) el 5or$ato.
9o $is$o Te#plateFields ca%aci"a"es "is%o'i+les co' el 9ridVie0 ta$+i-' est.'
"is%o'i+les co' el 2etailsVie0co'trol. E' este tutorial 3a$os a $ostrar u' %ro"ucto a la
3e0 usa'"o u' 2etailsVie0 6ue co'tie'e "os Te#plateFields. 9a
%ri$era Te#plateField co$+i'ar.
la Precio$nidad 1 $nitsIn(tocJ ) $nits4n4rder ca$%os "e "atos e'
u'2etailsVie0 5ila. El segu'"o Te#plateField $ostrar. el 3alor "e
las interru#pidas ca$%o1 si'o 6ue utili0a' u' $-to"o "e 5or$ato %ara
$ostrar (R si interru#pidas es cierto 1 ) /4 lo co'trario.
Figura 1 2os Te#plateFields se utili%an para personali%ar la pantalla (Clic en la
'oto para una i#agen #=s grande)
7a$os a e$%e0arC
Paso 1: unin de los datos para el 2etailsVie0
Co$o se "iscuti! e' el tutorial a'terior1 cua'"o se tra+a#a co' Te#plateField s es a
$e'u"o $.s 5.cil e$%e0ar %or crear el 2etailsVie0 co'trol 6ue co'tie'e
s!lo DoundField s ) luego a=a"ir 'ue3as Te#plateField s o co'3ertir la
actual DoundField s %ara Te#plateField s1 seg<' sea 'ecesario. Por lo ta'to1 co$e'0ar
este tutorial1 a=a"ie'"o u'2etailsVie0 a la %.gi'a a tra3-s "el "ise=o ) e'la0arlo a
u' 4b6ect2ata(ource 6ue "e3uel3e la lista "e %ro"uctos.Estas $e"i"as co'tri+uir.' a
crear u' 2etailsVie0 co' DoundField s %ara ca"a u'o "e los ca$%os "e los %ro"uctos "e
3alor 'oI+oolea'o ) u' C"ecJDoxField %ara el ca$%o "e 3alor "e u' +oolea'o
8"escataloga"os:.
A+ra la %.gi'a Details7ie4Te$%lateEiel".as% ) arrastre u' 2etailsVie0 "el cua"ro "e
herra$ie'tas hasta el "ise=a"or.Des"e el 2etailsVie0 tag Ms i'telige'te o%tar %or a=a"ir
u' 'ue3o 4b6ect2ata(ource co'trol 6ue i'3oca el ProductsD**clase 9etProducts
() $-to"o.
Figura + .5adir un nue!o control 4b6ect2ata(ource Bue lla#a a la 9etProducts
() #?todo (Clic en la 'oto para una i#agen #=s grande)
Para este i'5or$e1 retirar el ProductI2 1 IdPro!eedor 1 CategoryI2 1
) Feorder*e!el DoundField s. A co'ti'uaci!'1 ca$+iar el or"e' "e DoundField s %ara
6ue el Category/a#e ) (upplier/a#e DoundField s a%arece' i'$e"iata$e'te
"es%u-s "e la Product/a#e DoundField . Si-'tase li+re %ara a#ustar
el AeaderText %ro%ie"a"es ) las %ro%ie"a"es "e 5or$ato %ara la DoundField s co$o
$e#or le %are0ca. Al igual 6ue co' el 9ridVie0 1 estos DoundField'i3el e"icio'es se
%ue"e' reali0ar a tra3-s "e los ca#pos de cua"ro "e "i.logo 8se acce"e hacie'"o clic e'
el 7ditar ca#pos e'lace e' el 2etailsVie0 tag Ms i'telige'te: o %or $e"io "e la si'tais
"eclarati3a. Por <lti$o1 li$%iar el2etailsVie0 Ms .ltura ) .nc"o los 3alores "e la
%ro%ie"a" co' el 5i' "e %er$itir 6ue el 2etailsVie0 %ara a$%liar el co'trol so+re la +ase
"e los "atos $ostra"os ) co$%ro+ar la paginacin .cti!ar casilla "e 3eri5icaci!' "e la
eti6ueta i'telige'te.
Des%u-s "e reali0ar estos ca$+ios1 el 2etailsVie0 $arca"o "eclarati3o "el co'trol "e+e
ser si$ilar a lo siguie'te(
<Asp: DetailsView ID = "DetailsView1" runat = "server"
AutoGenerateRows = "false"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1"
AllowPaging = "True"
EnableViewState = "false">
<Fields>
<Asp: BoundField DataField = "ProductName" HeaderText = "Producto"
SortExpression = "ProductName" />
<Asp: BoundField DataField = "CategoryName" HeaderText = "Categora"
ReadOnly = "True" SortExpression = "CategoryName" />
<Asp: BoundField DataField = "SupplierName" HeaderText = "Proveedor"
ReadOnly = "True" SortExpression = "SupplierName" />
<Asp: BoundField DataField = "CantidadPorUnidad"
HeaderText = "Cantidad / Unidad" SortExpression = "CantidadPorUnidad" />
<Asp: BoundField DataField = "UnitPrice" HeaderText = "Precio"
SortExpression = "UnitPrice" />
<Asp: BoundField DataField = "UnitsInStock"
HeaderText = "Unidades en Stock" SortExpression = "UnitsInStock" />
<Asp: BoundField DataField = "UnitsOnOrder"
HeaderText = "unidades en pedido" SortExpression = "UnitsOnOrder" />
<Asp: CheckBoxField DataField = "interrumpidas"
HeaderText = "interrumpidas" SortExpression = "interrumpidas" />
</ Campos>
</ Asp: DetailsView>
To$e u' $o$e'to %ara 3er la %.gi'a a tra3-s "e u' 'a3ega"or. E' este %u'to uste" "e+e
3er a u' solo %ro"ucto la lista 8Chai:1 co' 5ilas 6ue $uestra el 'o$+re "el %ro"ucto1
categorBa1 %ro3ee"ores1 %recios1 u'i"a"es e' stoc?1 u'i"a"es %e"i"as1 ) su esta"o
sus%e'"i"o.
Figura 1 2etalles del producto se #uestran usando una serie de
DoundFields (Clic en la 'oto para una i#agen #=s grande)
Paso +: *a co#binacin de los precios> las unidades
en stocJ> y las $nidades de 4rden en una 'ila
El 2etailsVie0 tie'e u'a 5ila %ara
el Precio$nidad 1 $nitsIn(tocJ ) $nits4n4rder ca$%os. Po"e$os co$+i'ar estos
ca$%os "e "atos e' u'a sola 5ila co' u' Te#plateField )a sea $e"ia'te la a"ici!' "e u'
'ue3o Te#plateField o $e"ia'te la co'3ersi!' "e u'o "e los
eiste'tes Precio$nidad 1 $nitsIn(tocJ ) $nits4n4rder DoundField s e'
u'Te#plateField . Au'6ue )o %erso'al$e'te %re5iero co'3ertir eiste'tes DoundField s1
3a$os a la %r.ctica $e"ia'te la a"ici!' "e u' 'ue3o Te#plateField .
Co$ie'ce %or hacer clic e' el 7ditar ca#pos e'lace e' el 2etailsVie0 tag Ms i'telige'te
%ara a+rir el Ca#pos cua"ro "e "i.logo. A co'ti'uaci!'1 agregue u'
'ue3o Te#plateField ) esta+lecer su AeaderText %ro%ie"a" a precios e in!entario )
$o3er el 'ue3o Te#plateField %ara 6ue se sit<e %or e'ci$a "e
la Precio$nidad DoundField .
Figura 3 .5adir un nue!o Te#plateField al control 2etailsVie0 (Clic en la 'oto
para una i#agen #=s grande)
De+i"o a 6ue este 'ue3o Te#plateField co'te'"r. los 3alores 6ue se $uestra
actual$e'te e' el Precio$nidad 1$nitsIn(tocJ ) $nits4n4rder DoundField s1 3a$os a
eli$i'arlos.
9a <lti$a tarea %ara este %aso es "e5i'ir el Ite#Te#plate $arca"o %or el precio y el
In!entario de Te#plateField 1 6ue se %ue"e lograr a tra3-s "el 2etailsVie0 i'ter5a0 Ms
e"ici!' "e %la'tillas e' el Dise=a"or1 o co' la $a'o a tra3-s "e u'a si'tais "eclarati3a "el
co'trol. Al igual 6ue co' el 9ridVie0 1 el 2etailsVie0 %la'tilla Ms i'ter5a0 "e e"ici!' se
%ue"e acce"er hacie'"o clic e' el 7ditar plantillas de e'lace e' la eti6ueta
i'telige'te. Des"e a6uB se %ue"e seleccio'ar la %la'tilla 6ue "esea e"itar e' la lista
"es%lega+le ) luego a=a"ir los co'troles *e+ "e la ca#a "e herra$ie'tas.
Para este tutorial1 e$%e0ar %or agregar u'a etiBueta "e co'trol %ara el precio y el
In!entario de Te#plateField MsIte#Te#plate . A co'ti'uaci!'1 haga clic e' el 7ditar
2ataDinding e'lace "e la Web *abel "e eti6uetas i'telige'tes "e co'trol ) o+ligar a
la del texto "e la %ro%ie"a" Precio por unidad "e ca$%o.
Figura - 7nla%ar la propiedad Text de la etiBueta para el ca#po de datos Precio
por unidad (Clic en la 'oto para una i#agen #=s grande)
For#ato el precio de una #oneda
Co' esta i'cor%oraci!'1 la 0eb de etiBuetas "e co'trol de precios e
in!entario Te#plateField $ostrar. ahora s!lo el %recio %ara el %ro"ucto
seleccio'a"o. 9a 5igura 6 $uestra u'a ca%tura "e %a'talla "e 'uestro %rogreso hasta ahora
cua'"o se 3e a tra3-s "e u' 'a3ega"or.
Figura 8 7l precio y el In!entario de Te#plateField #uestra el precio (Clic en la
'oto para una i#agen #=s grande)
Te'ga e' cue'ta 6ue el %recio "el %ro"ucto 'o est. 5or$atea"o co$o $o'e"a. Co'
u' DoundField 1 el 5or$ato es %osi+le $e"ia'te el esta+leci$ie'to "e
la At#l7ncode %ro%ie"a" 'alsos ) la 2ataFor#at(tring %ro%ie"a" { , :
formatSpecifier} . Para u' Te#plateField 1 si' e$+argo1 to"as las i'struccio'es "e
5or$ato "e+e ser es%eci5ica"o e' la si'tais "e e'lace "e "atos1 o $e"ia'te el uso "e u'
$-to"o "e 5or$ato "e5i'i"o e' algu'a %arte "el c!"igo "e la a%licaci!' 8co$o e' el c!"igo
su+)ace'te "e la %.gi'a ASP.NET "e clase:.
Para es%eci5icar el 5or$ato "e la si'tais "e e'lace "e "atos utili0a"os e' la Web de
etiBuetas "e co'trol1 3uel3a a la2ataDindings cua"ro "e "i.logo hacie'"o clic e'
el 7ditar 2ataDinding e'lace "e la etiBueta tag Ms i'telige'te. Pue"e escri+ir las
i'struccio'es "e 5or$ato "irecta$e'te e' el 'or#ato de la lista "es%lega+le1 o seleccio'ar
u'a "e las ca"e'as "e 5or$ato "e5i'i"as. Al igual 6ue co'
la DoundField Ms 2ataFor#at(tring %ro%ie"a"1 el 5or$ato se es%eci5ica $e"ia'te { , :
formatSpecifier} .
Para el Precio$nidad ca$%o1 utilice el 5or$ato "e $o'e"a es%eci5ica"o seleccio'a'"o el
"es%lega+le corres%o'"ie'te 3alor "e la lista o escri+ie'"o S,: CT co' la $a'o.
Figura : For#ato del precio de una #oneda (Clic en la 'oto para una i#agen
#=s grande)
Declaraci!'1 la es%eci5icaci!' "e 5or$ato se i'"ica co$o u' segu'"o %ar.$etro a
la !inculacin o 7!al $-to"o. 9os a#ustes 6ue aca+a "e hacer a tra3-s "e los resulta"os
"e "ise=o e' el siguie'te e'lace "e "atos "e e%resi!' e' el $arca"o "eclarati3o(
<Asp: ID Label = "Label1" runat = "server" Text ='<%# Eval ("Precio por unidad",
"{0: C}") %>'/>
.dicin de los ca#pos de datos restante a la
Te#plateField
E' este %u'to he$os $ostra"o ) el 5or$ato "e la Precio$nidad ca$%o "e "atos e'
el precio y el In!entario deTe#plateField 1 %ero a<' "e+e $ostrar
la $nitsIn(tocJ ) $nits4n4rder ca$%os. 7a$os a $ostrar estos e' u'a lB'ea %or "e+a#o
"el %recio ) e'tre %ar-'tesis. Des"e la i'ter5a0 "e e"ici!' "e %la'tillas e' el Dise=a"or1
$arca"o co$o se %ue"e agregar coloca'"o el cursor "e'tro "e la %la'tilla ) si$%le$e'te
escri+ie'"o el teto 6ue se $ostrar.. Por otra %arte1 este $arca"o se %ue"e' i'tro"ucir
"irecta$e'te e' la si'tais "eclarati3a.
Agregue el $arca"o est.tico1 etiBuetas Web co'troles1 ) la si'tais "e e'lace "e "atos1
%or lo 6ue el precio e in!entario Te#plateField $uestra el %recio ) la i'5or$aci!' "el
i'3e'tario "e la siguie'te $a'era(
'recio or unidad
(7n arc"i!o I Pedido: =nitsAn-tocE I =nitsFnFrder )
Des%u-s "e reali0ar esta tarea1 el 2etailsVie0 $arca"o Ms "eclarati3o "e+e ser si$ilar a lo
siguie'te(
<Asp: DetailsView ID = "DetailsView1" runat = "server"
AutoGenerateRows = "false"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1"
AllowPaging = "True"
EnableViewState = "false">
<Fields>
<Asp: BoundField DataField = "ProductName"
HeaderText = "Producto" SortExpression = "ProductName" />
<Asp: BoundField DataField = "CategoryName" HeaderText = "Categora"
ReadOnly = "True" SortExpression = "CategoryName" />
<Asp: BoundField DataField = "SupplierName"
HeaderText = "Proveedor" ReadOnly = "True"
SortExpression = "SupplierName" />
<Asp: BoundField DataField = "CantidadPorUnidad"
HeaderText = "Cantidad / Unidad" SortExpression = "CantidadPorUnidad" />
<asp:TemplateField HeaderText="Price y Inventory">
<ItemTemplate>
<Asp: ID Label = "Label1" runat = "server"
Texto ='<%# Eval ("Precio por unidad", "{0: C}") %>'></ asp: Label>
<br />
<strong>
(En archivo / Pedido: </ strong>
<Asp: ID Label = "Label2" runat = "server"
Texto ='<%# Eval ("UnitsInStock") %>'></ asp: Label>
<strong> / </ strong>
<Asp: Label = ID "Label3" runat = "server"
Texto ='<%# Eval ("UnitsOnOrder")%> '>
</ Asp: Label> <strong>) </ strong>
</ ItemTemplate>
</ Asp: TemplateField>
<Asp: CheckBoxField DataField = "interrumpidas"
HeaderText = "interrumpidas" SortExpression = "interrumpidas" />
</ Campos>
</ Asp: DetailsView>
Co' estos ca$+ios1 he$os co'soli"a"o la i'5or$aci!' "e %recios ) el i'3e'tario e' u'
solo 2etailsVie0 5ila.
Figura ; *a in'or#acin sobre los precios y el in!entario se #uestra en una sola
'ila (Clic en la 'oto para una i#agen #=s grande)
Paso 1: Personali%acin de la in'or#acin de ca#po
interru#pidas
9os productos de $esa interru#pidas colu$'a es u' 3alor +it 6ue i'"ica si el %ro"ucto
ha si"o "esco'ti'ua"o. Al e'la0ar u' 2etailsVie0 8o 9ridVie0 : %ara u' co'trol "e orige'
"e "atos1 el 3alor +oolea'o ca$%osIco$ointerru#pidas 1 se i$%le$e'ta'
co$o C"ecJDoxField s1 $ie'tras 6ue los 'oI+oolea'o ca$%osIco$o el 3alor
"eProductI2 1 Product/a#e 1 ) asB sucesi3a$e'te1 se i$%le$e'ta'
co$o DoundField s. El C"ecJDoxField se $uestra co$o u'a casilla "e 3eri5icaci!' co'
"isca%aci"a" 6ue se co$%rue+a si el 3alor "el ca$%o "e "atos es cierto 1 ) si' co'trol "e
otra $a'era.
E' lugar "e $ostrar la C"ecJDoxField 1 6ue %ue"e ser 6ue "esee $ostrar e' lugar "e
teto 6ue i'"ica si el %ro"ucto est. "escataloga"o. Para lograr esto1 se %o"rBa eli$i'ar
el C"ecJDoxField "e la 2etailsVie0 ) luego a=a"ir
u'DoundField cu)a 2ataField %ro%ie"a" se esta+leci! e' descatalogados . T!$ese u'
$o$e'to %ara hacer esto.Des%u-s "e este ca$+io1 el 2etailsVie0 $uestra el
teto !erdadero "e %ro"uctos "isco'ti'ua"os ) 'alsas "e los %ro"uctos 6ue to"a3Ba est.'
acti3os.
Figura < *as cadenas de !erdadero y 'also se utili%an para #ostrar el estado
suspendido (Clic en la 'oto para una i#agen #=s grande)
&$agi'a 6ue 'o 6uerBa$os las cuer"as !erdadero o 'also %ara ser utili0a"o1
%ero (R ) /4 e' su lugar. Esta a"a%taci!' se %ue"e reali0ar co' la a)u"a "e
u' Te#plateField ) u' $-to"o "e 5or$ato. >' $-to"o "e 5or$ato %ue"e to$ar e'
cual6uier '<$ero "e %ar.$etros "e e'tra"a1 %ero "e+e "e3ol3er el HTM9 8co$o u'a
ca"e'a: %ara i')ectar e' la %la'tilla.
Agregar u' $-to"o "e 5or$ato %ara clase "e c!"igo su+)ace'te "e la %.gi'a
Details7ie4Te$%lateEiel".as% lla$a"o2isplay2iscontinued.sU7(or/4 6ue ace%ta
u' /ort"0indProductsFo0 o+#eto co$o u' %ar.$etro "e e'tra"a ) "e3uel3e u'a
ca"e'a. Co$o se "iscuti! e' el tutorial a'terior1 este $-to"o debe ser $arca"o
co$o protegido opHblico co' el 5i' "e ser accesi+le "es"e la %la'tilla.
Protegidos funcin DisplayDiscontinuedAsYESorNO (suspendido como
Boolean) As String
Si descontinuado
Retorno "SI"
Ms
Retorno "NO"
End If
End Function
Este $-to"o co$%rue+a el %ar.$etro "e e'tra"a 8 suspendido : ) "e3uel3e (C si
es cierto 1 ) /4 lo co'trario.
/ota E' el $-to"o "e 5or$ato ea$i'ar e' el tutorial a'terior1 recuer"o 6ue est.+a$os
%asa'"o e' u' ca$%o "e "atos 6ue %ue"e co'te'er /$** s1 ) %or lo ta'to1 es 'ecesario
co$%ro+ar si el e$%lea"oAired2ate 3alor "e la %ro%ie"a" ha+Ba u'a +ase "e
"atos /$** 3alor a'tes "e acce"er al7#ployeesFo0 Ms Aired2ate la %ro%ie"a". Esta
co$%ro+aci!' 'o es 'ecesaria a6uB1 )a 6ue elinterru#pidas colu$'a 'o %ue"e te'er la
+ase "e "atos /$** los 3alores asig'a"os. Por otra %arte1 es %or eso 6ue el $-to"o %ue"e
ace%tar u' %ar.$etro "e e'tra"a +oolea'a e' lugar "e te'er 6ue ace%tar
u' ProductsFo0 i'sta'cia o u' %ar.$etro "e ti%o de ob6eto .
Co' este $-to"o "e 5or$ato co$%leto1 to"o lo 6ue 6ue"a es %ara lla$ar "es"e
el Te#plateField Ms Ite#Te#plate .Para crear el Te#plateField 1 6uite
el interru#pidas DoundField ) a=a"ir u'a 'ue3a Te#plateField 1 o co'3ertir
elinterru#pidas DoundField e' u' Te#plateField . 9uego1 "es"e el %u'to "e 3ista
$arca"o "eclarati3o1 e"itar elTe#plateField %ara 6ue co'te'ga s!lo
u' Ite#Te#plate 6ue i'3oca el 2isplay2iscontinued.sU7(or/4 $-to"o1 %asa'"o el
3alor "e la corrie'te ProductFo0 i'sta'cia interru#pidas %ro%ie"a". Esto se %ue"e
acce"er $e"ia'te el uso "e la 7!al $-to"o. E' co'creto1 el Te#plateField $arca"o Ms
"e+e' te'er el siguie'te as%ecto(
<Asp: TemplateField HeaderText = "interrumpidas"
SortExpression = "interrumpidas">
<ItemTemplate>
<% # DisplayDiscontinuedAsYESorNO ((bool)
Eval ("interrumpidas"))%>
</ ItemTemplate>
</ Asp: TemplateField>
Esto har. 6ue el 2isplay2iscontinued.sU7(or/4 $-to"o 6ue se i'3oca cua'"o se
re%rese'ta la 2etailsVie0 1 %asa'"o
el ProductFo0 i'sta'cia interru#pidas 3alor. Da"o 6ue la 7!al $-to"o "e3uel3e u'
3alor "e ti%o de ob6eto 1 %ero el 2isplay2iscontinued.sU7(or/4 $-to"o es%era u'
%ar.$etro "e e'tra"a "e ti%o Doolean 1 6ue tire la 7!al3alor $-to"o "e "e3oluci!'
"e Doole . El 2isplay2iscontinued.sU7(or/4 $-to"o 3ol3er. e'to'ces (R o /4 1
seg<' el 3alor 6ue reci+e. El 3alor "e3uelto es lo 6ue se $uestra e' este 2etailsVie0 5ila
83er 5igura 10:.
Figura 1, (I o /4 los !alores se #uestran a"ora en la 'ila interru#pidas (Clic en
la 'oto para una i#agen #=s grande)
Conclusin
El Te#plateField e' el 2etailsVie0 "e co'trol %er$ite u' $a)or gra"o "e 5lei+ili"a" e'
la 3isuali0aci!' "e los "atos 6ue est. "is%o'i+le co' los co'troles "e ca$%o1 ) es i"eal %ara
situacio'es e' las 6ue(
Ca$%os "e "atos "e+e' ser ehi+i"os e' u' 9ridVie0 colu$'a.
9os "atos se e%resa' $e#or $e"ia'te u' co'trol "e *e+1 e' lugar "e teto %la'o.
9a sali"a "e%e'"e "e los "atos su+)ace'tes1 co$o la 3isuali0aci!' "e los $eta"atos
o e' 5or$ato a los "atos.
Mie'tras Te#plateField s %er$ite' u' $a)or gra"o "e 5lei+ili"a" e' la %restaci!' "e
los 2etailsVie0 "atos Ms su+)ace'te1 el 2etailsVie0 "e sali"a to"a3Ba se sie'te u' %oco
cua"ra"o1 )a 6ue ca"a ca$%o se re%rese'ta co$o u'a 5ila e' u' HTM9 PtableQ .
El For#Vie0 "e co'trol o5rece u' $a)or gra"o "e 5lei+ili"a" e' la co'5iguraci!' "e la
sali"a re%rese'ta"a. ElFor#Vie0 'o co'tie'e ca$%os1 si'o si$%le$e'te u'a serie "e
%la'tillas 8 Ite#Te#plate 1 7ditIte#Te#plate 1AeaderTe#plate 1 ) asB
sucesi3a$e'te:. 7a$os a 3er c!$o utili0ar el For#Vie0 %ara lograr u' $a)or co'trol "e
la "is%osici!' "icta"a %or el tutorial 6ue 3ie'e.
Tutorial 13: $so de las plantillas del For#Vie0

Scott Mitchell
02 200Z
Fesu#en: E' este tutorial1 Scott Mitchell $uestra c!$o utili0ar el For#Vie0 "e co'trol
%ara u' "ise=o $.s 5lei+le al $ostrar u' <'ico registro. 8P %.gi'as i$%resas:
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial 13 (Visual C #)
&'tro"ucci!'
Paso 1( E'lace "e los "atos a los co'troles Eor$7ie4
Paso 2( De5i'ici!' "e la &te$Te$%late "e $arca"o
Co'clusi!'
Introduccin
E' los <lti$os "os tutoriales1 he$os 3isto c!$o %erso'ali0ar el control
9ridVie0 ) 2etailsVie0 sali"as "e los co'troles
Husa'"o Te#plateFields . Te#plateFields %er$itir el co'te'i"o "e u' ca$%o es%ecB5ico
%ara ser alta$e'te %erso'ali0a"os1 %ero al 5i'al ta'to el 9ridVie0 ) 2etailsVie0 tie'e u'
lugar cerra"o1 "e la re" Ico$o as%ecto. E' $uchas situacio'es1 co$o u' "ise=o "e
cua"rBcula1 co$o es lo i"eal1 %ero a 3eces u'a 5or$a $.s 5lui"a1 $ostrar $e'os rBgi"o 6ue
se 'ecesita. Cua'"o se $uestra u' registro <'ico1 co$o u' "ise=o 5lui"o es %osi+le utili0ar
el For#Vie0co'trol.
A "i5ere'cia "e los 2etailsVie0 1 el For#Vie0 'o se co$%o'e "e los ca$%os. No se
%ue"e agregar u' DoundField oTe#plateField a u' For#Vie0 . E' ca$+io1
el For#Vie0 se re%rese'ta $e"ia'te %la'tillas. Pie'se e'
el For#Vie0co$o 2etailsVie0 "e co'trol 6ue co'tie'e u'
<'ico Te#plateField . El For#Vie0 so%orta las siguie'tes %la'tillas(
Ite#Te#plate ( se utili0a %ara hacer el registro e' %articular se $uestra e'
el For#Vie0 .
AeaderTe#plate ISe utili0a %ara es%eci5icar u'a 5ila "e e'ca+e0a"o o%cio'al.
FooterTe#plate ISe utili0a %ara es%eci5icar u'a 5ila "e %ie o%cio'al.
7#pty2ataTe#plate ICua'"o el For#Vie0 Ms 2ata(ource carece "e registros1
el 7#pty2ataTe#plate se utili0a e' lugar "e la Ite#Te#plate %ara la %restaci!'
"e $arca"o "el co'trol.
PagerTe#plate ISe %ue"e utili0ar %ara %erso'ali0ar la i'ter5a0 "e %agi'aci!'
%ara For#Vie0 s 6ue ha' %er$iti"o a la %agi'aci!'.
7ditIte#Te#plate I InsertIte#Te#plate ISe usa %ara %erso'ali0ar la i'ter5a0 "e
e"ici!' o "e la i'ter5a0 "e i'serci!' %ara For#Vie0 s 6ue so%orta' esta
5u'cio'ali"a".
E' este tutorial1 3a$os a ea$i'ar co' el For#Vie0 "e co'trol "e %rese'tar u'a %a'talla
"e $e'os rBgi"a "e los %ro"uctos. E' lugar "e te'er ca$%os %ara el 'o$+re1 categorBa1
%ro3ee"or1 ) asB sucesi3a$e'te1 el For#Vie0 MsIte#Te#plate se $uestra' estos 3alores
$e"ia'te u'a co$+i'aci!' "e u' ele$e'to "e ca+ecera ) u' PtableQ 83er Eigura 1:.
Figura 1 7l For#Vie0 sale de la cuadrCcula de dise5o si#ilar al !isto en el
2etailsVie0 (Clic en la 'oto para una i#agen #=s grande)
Paso 1: 7nlace de los datos a los controles For#Vie0
A+ra el For#Vie0aspx %.gi'a ) arrastrar u' For#Vie0 "el cua"ro "e herra$ie'tas
hasta el "ise=a"or. 9a %ri$era 3e0 6ue la a"ici!' "e la For#Vie0 a%arece co$o u' cua"ro
gris1 e'se=.'"o'os 6ue u' Ite#Te#plate es 'ecesario.
Figura + 7l For#Vie0 no se puede representar en el 2ise5ador de "asta un
Ite#Te#plate se proporciona (Clic en la 'oto para una i#agen #=s grande)
El Ite#Te#plate %ue"e ser crea"a a $a'o 8a tra3-s "e la si'tais "eclarati3a: o %ue"e
ser autoIcrea"o %or la u'i!' "elFor#Vie0 a u' co'trol "e orige' "e "atos $e"ia'te el
Dise=a"or. Esta autoIcrea"o Ite#Te#plate co'tie'e HTM9 6ue $uestra el 'o$+re "e
ca"a ca$%o ) u'a etiBueta "e co'trol1 cu)o texto se u'e a la %ro%ie"a" el 3alor "el
ca$%o. Este e'5o6ue ta$+i-' autoIcrea u' InsertIte#Te#plate ) 7ditIte#Te#plate 1
los cuales se relle'a' co' los co'troles "e e'tra"a %ara ca"a u'o "e los ca$%os "e "atos
"e3ueltos %or el co'trol "el orige' "e "atos.
Si "esea crear auto$.tica$e'te la %la'tilla1 "es"e el For#Vie0 tag Ms i'telige'te a=a"ir
u' 'ue3o 4b6ect2ata(ourceco'trol 6ue i'3oca el ProductsD** clase 9etProducts
() $-to"o. Esto crear.
u' For#Vie0 co' Ite#Te#plate>InsertIte#Te#plate> ) 7ditIte#Te#plate . Des"e la
3ista C!"igo 5ue'te1 6uitar el InsertIte#Te#plate )7ditIte#Te#plate )a 6ue 'o est.
i'teresa"o e' la creaci!' "e u' For#Vie0 6ue a"$ita la e"ici!' o i'serci!' to"a3Ba.A
co'ti'uaci!'1 li$%iar el $arge' "e'tro "el Ite#Te#plate %ara 6ue %o"a$os te'er u'
+orr!' ) cue'ta 'ue3a %ara tra+a#ar.
Si %re5iere co'struir el Ite#Te#plate $a'ual$e'te1 %ue"e agregar ) co'5igurar
el 4b6ect2ata(ource arrastr.'"olo "es"e la ca#a "e herra$ie'tas hasta el "ise=a"or. Si'
e$+argo1 'o se esta+lece la For#Vie0 Ms orige' "e "atos "el Dise=a"or. E' su lugar1 3a)a
a la 3ista C!"igo 5ue'te ) co'5igurar $a'ual$e'te
el For#Vie0 Ms 2ata(ourceI2%ro%ie"a" a la identi'icacin de 3alor "e
la 4b6ect2ata(ource . A co'ti'uaci!'1 agregue $a'ual$e'te elIte#Te#plate .
&'"e%e'"ie'te$e'te "e 6u- e'5o6ue 6ue "eci"i! to$ar1 e' este %u'to
su For#Vie0 $arca"o Ms "eclarati3o "e+e te'er el siguie'te as%ecto(
<Asp: FormView ID = "FormView1" runat = "server"
DataSourceID = "ObjectDataSource1">
<ItemTemplate>

</ ItemTemplate>
</ Asp: FormView>
To$e u' $o$e'to %ara co$%ro+ar la paginacin .cti!ar casilla "e 3eri5icaci!' e'
el For#Vie0 Ms eti6ueta i'telige'te1 lo 6ue se agrega el .llo0Paging V @True@ atri+uir a
la For#Vie0 Ms si'tais "eclarati3a. A"e$.s1 %o'ga la7nableVie0(tate %ro%ie"a"
a Falso .
Paso +: 2e'inicin de #arcado de la Ite#Te#plate
de
Co' el For#Vie0 e'la0a"o a la 4b6ect2ata(ource co'trol ) co'5igura"o %ara a"$itir la
%agi'aci!'1 esta$os listos %ara es%eci5icar el co'te'i"o "e la Ite#Te#plate . Para este
tutorial1 3a$os a te'er el 'o$+re "el %ro"ucto a%arece e' u' P"1Q tBtulo. Des%u-s "e eso1
3a$os a usar u' HTM9 PtableQ %ara $ostrar las %ro%ie"a"es "el %ro"ucto 6ue 6ue"a e'
u'a ta+la "e cuatro colu$'as e' las colu$'as %ri$era ) la tercera lista "e los 'o$+res "e
%ro%ie"a"es ) la lista "e segu'"o ) cuarto "e sus 3alores.
Este $arca"o se %ue"e' i'tro"ucir a tra3-s "e la For#Vie0 i'ter5a0 Ms e"ici!' "e
%la'tillas e' el Dise=a"or o i'tro"ucir $a'ual$e'te a tra3-s "e la si'tais
"eclarati3a. Cua'"o se tra+a#a co' %la'tillas 6ue ge'eral$e'te resulta $.s r.%i"o tra+a#ar
"irecta$e'te co' la si'tais "eclarati3a1 %ero 'o "u"e e' utili0ar cual6uier t-c'ica 6ue se
sie'ta' $.s c!$o"os.
El $arca"o siguie'te se $uestra el For#Vie0 $arca"o "eclarati3o "es%u-s "e
la Ite#Te#plate estructura Ms se ha co$%leta"o(
<Asp: FormView ID = "FormView1" runat = "server"
DataSourceID = "ObjectDataSource1"
AllowPaging = "True" EnableViewState = "false">
<ItemTemplate>
<hr />
<h3> <% # Eval ("ProductName")%> </ h3>
<table border="0">
<tr>
<td class="ProductPropertyLabel"> Categora: </ td>
<td class="ProductPropertyValue">
<% # Eval ("NombreCategora")%> </ td>
<td class="ProductPropertyLabel"> Proveedor: </ td>
<td class="ProductPropertyValue">
<% # Eval ("SupplierName ")%></ td>
</ Tr>
<tr>
<td class="ProductPropertyLabel"> Precio: </ td>
<td class="ProductPropertyValue"> <% # Eval ("Precio por unidad",
"{0: C}")%> </ td>
<td unidades class="ProductPropertyLabel"> En Stock: </ td>
<td class="ProductPropertyValue">
<% # Eval ("UnitsInStock ")%></ td>
</ Tr>
<tr>
<td unidades class="ProductPropertyLabel"> Pedido: </ td>
<td class="ProductPropertyValue">
<% # Eval ("UnitsOnOrder")%> </ td>
<td class="ProductPropertyLabel"> nivel de pedido: </ td>
<td class="ProductPropertyValue">
<% # Eval ("ReorderLevel ")%></ td>
</ Tr>
<tr>
<td class="ProductPropertyLabel"> Cantidad / Unidad </ td>
<td class="ProductPropertyValue">
<% # Eval ("CantidadPorUnidad")%> </ td>
<td class="ProductPropertyLabel"> Discontinuado: </ td>
<td class="ProductPropertyValue">
<Asp: CheckBox runat = "server" Enabled = "false"
Comprobar ='<%# Eval ("interrumpidas")%> '/>
</ Td>
</ Tr>
</ Table>
<hr />
</ ItemTemplate>
</ Asp: FormView>
Te'ga e' cue'ta 6ue los "atos "e la si'tais "e e'laceI PWW # 7!al
(@Product/a#e@)Q 1 %or e#e$%loI%ue"e ser i')ecta"o "irecta$e'te e' la sali"a "e la
%la'tilla. Es "ecir1 'o tie'e 6ue ser asig'a"o a u'a etiBueta "e co'trol "etexto "e
%ro%ie"a". Por e#e$%lo1 te'e$os el Product/a#e 3alor 6ue a%arece e'
u' P"1Q ele$e'to $e"ia'te P"1Q PW # 7!al (@Product/a#e@)WQ PI "1Q 1 6ue %ara
el %ro"ucto Chai se re%rese'ta' co$o P"1Q C"ai PI "1 Q .
El ProductProperty*abel ) ProductPropertyValue clases CSS se utili0a' %ara
es%eci5icar el estilo "e los 'o$+res "e %ro"uctos ) 3alores "e %ro%ie"a"es e'
el PtableQ . Estas clases CSS se "e5i'e' e' stylescss ) hacer 6ue los 'o$+res "e
%ro%ie"a" a ser 3alie'tes ) ali'ea"os a la "erecha ) a=a"ir u' relle'o "erecho a los 3alores
"e %ro%ie"a".
Por6ue 'o ha) C"ecJDoxFields "is%o'i+le co' el For#Vie0 1 co' el 5i' "e $ostrar
la interru#pidas 3alor co$o u'a casilla "e 3eri5icaci!'1 ha) 6ue a=a"ir 'uestra
%ro%ia C"ecJDox co'trol. El Aabilitado %ro%ie"a" est. esta+leci"a e''also 1 %or lo 6ue es
"e s!lo lectura1 ) el C"ecJDox Ms C"eBueado %ro%ie"a" est. 3i'cula"o al 3alor "e
lasinterru#pidas ca$%o "e "atos.
Co' el Ite#Te#plate co$%leta1 la i'5or$aci!' "el %ro"ucto se $uestra "e u'a $a'era
$ucho $.s 5lui"a. Co$%arar el2etailsVie0 sali"a "el tutorial a'terior 8Eigura ,: co' la
sali"a ge'era"a %or el For#Vie0 e' este tutorial 8Eigura /:.
Figura 1 *a salida 2etailsVie0 rCgida
Figura 3 7l lCBuido de salida For#Vie0 (Clic en la 'oto para una i#agen #=s
grande)
Conclusin
Mie'tras 6ue el 9ridVie0 ) 2etailsVie0 co'troles %ue"e' te'er su sali"a %erso'ali0a"os
utili0a'"o Te#plateFields 1 a$+os to"a3Ba %rese'tar sus "atos e' u'a cua"rBcula1 e'
5or$ato cua"ra"o. Para esos $o$e'tos e' u' solo registro tie'e 6ue ser "e$ostra"o co'
u' 5or$ato $e'os rBgi"o1 el For#Vie0 es u'a o%ci!' i"eal. Al igual 6ue el 2etailsVie0 1
el For#Vie0 re%rese'ta u' <'ico registro "e su origen de datos 1 %ero1 a "i5ere'cia
"el 2etailsVie0 1 se co$%o'e s!lo "e las %la'tillas ) 'o so%orta ca$%os.
Co$o he$os 3isto e' este tutorial1 el For#Vie0 %er$ite u' "ise=o $.s 5lei+le al $ostrar
u' <'ico registro. E' 5uturos tutoriales1 3a$os a ea$i'ar el 2ata*ist ) el repetidor
de co'troles1 6ue %ro%orcio'a' el $is$o 'i3el "e 5lei+ili"a" co$o el For#sVie0 1 %ero
so' ca%aces "e $ostrar 3arios registros 8co$o el 9ridVie0 :.
7dicin> insercin y eli#inacin de datos
Tutorial 18: $na !isin general de .ctuali%ar>
insertar y borrar datos

Scott Mitchell
0, 200Z
Fesu#en: E' este tutorial1 Scott Mitchell e%lica c!$o asig'ar el Insert () 1 $pdate
() ) 2elete () los $-to"os "e la4b6ect2ata(ource a los $-to"os "e las clases e' el ;991
asB co$o la 5or$a "e co'5igurar el 9ridVie0 1 2etailsVie0 )For#Vie0 co'troles %ara
%ro%orcio'ar ca%aci"a"es "e $o"i5icaci!' "e "atos. 8/2 %.gi'as i$%resas:
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial 18 (Visual C #)
&'tro"ucci!'
Paso 1( Creaci!' "e la i'serci!'1 actuali0aci!' ) eli$i'aci!' Tutoriales P.gi'as *e+
Paso 2( Agregar ) co'5igurar el co'trol G+#ectDataSource
ea$i'a'"o el G+#ectDataSource $arca"o
Paso ,( Agregar u' co'trol 4e+ "e "atos ) co'5iguraci!' 6ue %ara la $o"i5icaci!' "e "atos
Eli$i'aci!' "e "atos "el Dri"7ie4
e"ici!' "e "atos co' Dri"7ie4
&'sertar1 e"itar ) eli$i'ar "atos co' los Details7ie4
>so "el Eor$7ie4 %ara u' siste$a $.s 5lei+le "e "atos Mo"i5icaci!' "e la i'ter5a0 "e
usuario
Co'clusi!'
Introduccin
A tra3-s "e los tutoriales "e 3arios a=os1 he$os ea$i'a"o c!$o $ostrar los "atos e' u'a
%.gi'a ASP.NET usa'"o el9ridVie0 1 2etailsVie0 ) For#Vie0 co'troles. Estos co'troles
s!lo tra+a#ar co' los "atos 6ue se su$i'istra a los $is$os. Por lo ge'eral1 estos co'troles
"e acceso "e "atos a tra3-s "el uso "e u' co'trol "e orige' "e "atos1 tales co$o
el 4b6ect2ata(ource . He$os 3isto c!$o el 4b6ect2ata(ource act<a co$o u' %ro)
e'tre la %.gi'a "e ASP.NET ) los "atos su+)ace'tes. Cua'"o u' 9ridVie0 "e+e $ostrar
los "atos1 se i'3oca el (elect () el $-to"o "e su4b6ect2ata(ource 1 6ue a su 3e0 lla$a a
u' $-to"o "e 'uestra l!gica "e 'egocio 9a)er 8;99:1 6ue lla$a a u' $-to"o e' el 6ue es
a%ro%ia"o la ca%a "e acceso a "atos 8DA9: Ta+leA"a%ter1 6ue a su 3e0 e'3Ba u' (7*7CT
de la co'sulta a la +ase "e "atos North4i'".
Recor"e$os 6ue cua'"o crea$os el Ta+leA"a%ters e' el DA9 e' 'uestro %ri$er tutorial 1
Microso5t 7isual Stu"io agrega auto$.tica$e'te $-to"os %ara i'sertar1 actuali0ar )
eli$i'ar "atos "e la ta+la "e +ase "e "atos su+)ace'te.Por otra %arte1 e' la creaci!' "e
u'a ca%a "e l!gica "e 'egocios 1 he$os "ise=a"o los $-to"os "e la ;99 6ue lla$! a estos
$-to"os "e $o"i5icaci!' "e "atos DA9.
A"e$.s "e su (eleccin () $-to"o1 el 4b6ect2ata(ource ta$+i-' tie'e Insert
() 1 $pdate () ) 2elete () $-to"os. Al igual 6ue el (elect () $-to"o1 estos tres $-to"os
se %ue"e' asig'ar a los $-to"os "e u' o+#eto su+)ace'te. Cua'"o se co'5igura %ara
i'sertar1 actuali0ar o eli$i'ar "atos1 el 9ridVie0 1 2etailsVie0 ) For#Vie0 co'troles
%ro%orcio'a' u'a i'ter5a0 "e usuario %ara $o"i5icar los "atos su+)ace'tes. Esta i'ter5a0 "e
usuario lla$a al Insert () 1 $pdate () )2elete () los $-to"os "e la 4b6ect2ata(ource 1
6ue luego lla$ar a los $-to"os asocia"os "el o+#eto su+)ace'te 83er Eigura 1:.
Figura 1 7l insert ()> $pdate () y 7li#inar () de la 4b6ect2ata(ource ser!ir co#o
una aproxi#acin a la D** (Clic en la 'oto para una i#agen #=s grande)
E' este tutorial1 3a$os a 3er c!$o asig'ar las Insert () 1 $pdate () ) 2elete () los
$-to"os "e la 4b6ect2ata(ource a los $-to"os "e las clases e' el ;991 asB co$o la 5or$a
"e co'5igurar el 9ridVie0 1 2etailsVie0 ) For#Vie0 co'troles %ara %ro%orcio'ar
ca%aci"a"es "e $o"i5icaci!' "e "atos.
Paso 1: Creacin de la insercin> actuali%acin y
eli#inacin de p=ginas Web Tutoriales
A'tes "e e$%e0ar a e%lorar la $a'era "e i'sertar1 actuali0ar ) eli$i'ar "atos1 %ri$ero
to$e u' $o$e'to %ara crear las %.gi'as ASP.NET e' 'uestro %ro)ecto "e sitio *e+ 6ue
3a$os a 'ecesitar %ara este tutorial ) los siguie'tes.E$%e0ar %or agregar u'a 'ue3a
car%eta lla$a"a E"it&'sertDelete. A co'ti'uaci!'1 agregue las siguie'tes %.gi'as ASP.NET
a esa car%eta1 asegur.'"ose "e asociar ca"a %.gi'a co' la %.gi'a $aestra Site.$aster(
De5ault.as%
;asics.as%
DataMo"i5icatio'E3e'ts.as%
ErrorHa'"li'g.as%
>&7ali"atio'.as%
Custo$i0e">&.as%
G%ti$isticCo'curre'c).as%
Co'5ir$atio'G'Delete.as%
>ser9e3elAccess.as%
Figura + .gregar las p=ginas .(P/7T para la #odi'icacin de datos
relacionados con tutoriales
Al igual 6ue e' las otras car%etas1 De5ault.as% e' la car%eta E"it&'sertDelete $ostrar. u'a
lista "e los tutoriales e' su secci!'. Ha) 6ue recor"ar 6ue el co'trol "e usuario
Sectio'9e3elTutorial9isti'g.asc %ro%orcio'a esta 5u'cio'ali"a". Por lo ta'to1 a=a"ir este
co'trol "e usuario %ara De5ault.as% arrastr.'"olo "es"e el E%lora"or "e solucio'es a la
3ista Dise=o "e la %.gi'a.
Figura 1 .gregar el control de usuario (ection*e!elTutorial*istingascx a
2e'aultaspx (Clic en la 'oto para una i#agen #=s grande)
Por <lti$o1 a=a"ir las %.gi'as co$o e'tra"as al archi3o *e+.site$a%. E' co'creto1 agregue
el $arca"o siguie'te "es%u-s "e 6ue el 5or$ato %erso'ali0a"o Psite&ap/odeQ (
<Ttulo siteMapNode = "Editar, insertar y eliminar"
url = "~ / EditInsertDelete / Default.aspx"
description = "Ejemplos de informes que proporcionan edicin, insercin,
y eliminacin de las capacidades ">

<SiteMapNode url = "~ / EditInsertDelete / Basics.aspx"
title = "Conceptos bsicos"
description = "examina los fundamentos de la modificacin de datos con la
Controles GridView, DetailsView y FormView. "/>
<SiteMapNode url = "~ / EditInsertDelete / DataModificationEvents.aspx"
title = "Datos de eventos de modificacin"
description = "explora los eventos provocados por el ObjectDataSource
pertinentes a la modificacin de datos. "/>
<SiteMapNode url = "~ / EditInsertDelete / ErrorHandling.aspx"
title = "Control de errores"
description = "Aprenda a manejar con gracia las excepciones planteadas
durante el flujo de trabajo de modificacin de datos. "/>
<SiteMapNode url = "~ / EditInsertDelete / UIValidation.aspx"
title = "Agregar validacin de entrada de datos"
description = "Ayuda a prevenir la entrada de datos, errores, proporcionando
validacin. "/>
<SiteMapNode url = "~ / EditInsertDelete / CustomizedUI.aspx"
title = "Personalizacin de la interfaz de usuario"
description = "Personalizar el usuario de edicin e insercin de
interfaces. "/>
<SiteMapNode url = "~ / EditInsertDelete / OptimisticConcurrency.aspx"
title = "concurrencia optimista"
description = "Aprenda cmo ayudar a evitar que los usuarios simultneos de
overwritting los cambios respectivos. "/>
<SiteMapNode url = "~ / EditInsertDelete / ConfirmationOnDelete.aspx"
title = "Confirmar en Delete"
description = "Pedir al usuario la confirmacin al eliminar un
registro. "/>
<SiteMapNode url = "~ / EditInsertDelete / UserLevelAccess.aspx"
title = "Capacidad de lmite basado en el usuario"
description = "Aprenda a limitar la funcionalidad de modificacin de datos
basado en el rol de usuario o los permisos. "> /
</ SiteMapNode>
Des%u-s "e actuali0ar *e+.site$a%1 to$e u' $o$e'to %ara 3er el sitio *e+ "e tutoriales a
tra3-s "e u' 'a3ega"or. El $e'< "e la i06uier"a ahora i'clu)e artBculos "e la e"ici!'1
i'serci!' ) eli$i'aci!' "e tutorBas1 co$o se $uestra e' la Eigura /.
Figura 3 7l #apa del sitio incluye a"ora entradas para la edicin> insercin y
eli#inacin de tutoriales
Paso +: .gregar y con'igurar el control
4b6ect2ata(ource
De+i"o a 6ue el 9ridVie0 1 2etailsVie0 ) For#Vie0 "i5iere' e' su ca%aci"a" "e
$o"i5icaci!' "e "atos ) el "ise=o1 3a$os a ea$i'ar u'o %or u'o. E' lugar "e te'er ca"a
u'o su %ro%io co'trol "el uso "e 4b6ect2ata(ource 1 si' e$+argo1 3a$os a crear u'
<'ico 4b6ect2ata(ource 6ue los tres e#e$%los "e co'trol se %ue"e co$%artir.
A+ra la %.gi'a ;asics.as%1 arrastre u' 4b6ect2ata(ource "es"e el Cua"ro "e
herra$ie'tas hasta el Dise=a"or1 ) haga clic e' el Con'igurar origen de datos de e'lace
"e la eti6ueta i'telige'te. De+i"o a 6ue el ProductsD** es la <'ica clase "e %lo$o e'
sa'gre 6ue %ro%orcio'a la e"ici!'1 i'serci!' ) eli$i'aci!' "e los $-to"os1 co'5igurar
el4b6ect2ata(ource %ara utili0ar esta clase.
Figura - Con'igurar el 4b6ect2ata(ource se utili%a la clase ProductsD** (Clic en
la 'oto para una i#agen #=s grande)
E' la siguie'te %a'talla se %ue"e es%eci5icar 6u- $-to"os "e la ProductsD** clase se
asig'a' a la (eleccin () 1 Insert () 1 $pdate () ) 2elete () los $-to"os "e
la 4b6ect2ata(ource $e"ia'te la selecci!' "e la 5icha corres%o'"ie'te ) elegir el $-to"o
"e la gotaI la lista "es%lega+le. Eigura 61 6ue "e+e %arecer 5a$iliar %or ahora1 los
$a%as (eleccione () el $-to"o "e la 4b6ect2ata(ource a la 9etProducts () el $-to"o
"e la ProductsD** clase. El Insert () 1 $pdate () )2elete () $-to"os se %ue"e'
co'5igurar $e"ia'te la selecci!' "e la 5icha corres%o'"ie'te "e la lista e' la %arte su%erior.
Figura 8 Tienen el 4b6ect2ata(ource de!ol!er todos los productos (Clic en la
'oto para una i#agen #=s grande)
9as 5iguras Z1 P ) K $uestra' la .CT$.*IX.CIY/ 1 I/(7FT.F ) D4FF.F las %esta=as1
res%ecti3a$e'te1 "e la4b6ect2ata(ource . Co'5igurar estas 5ichas1 %or lo 6ue el Insert
() 1 $pdate () ) 2elete () $-to"os "e i'3ocaci!' "e
la$pdateProduct 1 .ddProduct ) 2eleteProduct $-to"os1 res%ecti3a$e'te1 "e
la ProductsD** clase.
Figura : &apa del 4b6ect2ata(ource #?todo update () con el #?todo de la clase
$pdateProduct ProductsD** es(Clic en la 'oto para una i#agen #=s grande)
Figura ; &apa del 4b6ect2ata(ource Insert () para el #?todo .ddProduct la
clase de ProductsD** (Clic en la 'oto para una i#agen #=s grande)
Figura < &apa del 4b6ect2ata(ource 7li#inar () para el #?todo 2eleteProduct la
clase de ProductsD** (Clic en la 'oto para una i#agen #=s grande)
>ste" %ue"e ha+er 'ota"o 6ue las listas "es%lega+les e'
la .CT$.*IX.CIY/ 1 I/(7FT.F ) D4FF.F las 5ichas )a tie'e estos $-to"os
seleccio'a"os. Esto es gracias a 'uestro uso "e la 2ata4b6ect&et"od.ttribute 1 6ue
"ecora los $-to"os "e ProductsD** . Por e#e$%lo1 el 2eleteProduct $-to"o tie'e la
siguie'te 5ir$a(
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Delete, true)]
pblica DeleteProduct bool (int ProductID)
{
...
}
El 2ata4b6ect&et"od.ttribute atri+uto i'"ica el %ro%!sito "e ca"a $-to"o1 )a sea %ara
seleccio'ar1 i'sertar1 actuali0ar o eli$i'ar1 ) si es o 'o es el 3alor %re"eter$i'a"o. Si se
o$ite estos atri+utos al crear clases ;991 te'"r. 6ue seleccio'ar $a'ual$e'te los $-to"os
"e la .CT$.*IX.CIY/ 1 I/(7FT.F ) D4FF.F las 5ichas.
Des%u-s "e asegurarse "e 6ue se to$e' las ProductsD** $-to"os se asig'a' a
la insercin () 1 $pdate () ) 2elete ()los $-to"os "e la 4b6ect2ata(ource 1 haga clic
e' Finali%ar %ara co$%letar el asiste'te.
7xa#inar el #arcado 4b6ect2ata(ource
Des%u-s "e co'5igurar el 4b6ect2ata(ource a tra3-s "e su asiste'te1 3a)a a la 3ista "e
c!"igo 5ue'te %ara ea$i'ar el $arca"o ge'era"o
"eclarati3a. El Pasp:4b6ect2ata(ourceQ eti6ueta es%eci5ica el o+#eto su+)ace'te ) los
$-to"os "e i'3ocaci!' %ara. A"e$.s1
ha) 2eletePara#eters 1 $pdatePara#eters ) InsertPara#eters 6ue se asig'a' a los
%ar.$etros "e e'tra"a %ara el .ddProduct 1 $pdateProduct ) 2eleteProduct $-to"os
"e la ProductsD** clase(
<Asp: ObjectDataSource ID = "ObjectDataSource1" runat = "server"
DeleteMethod = "DeleteProduct" InsertMethod = "AddProduct"
OldValuesParameterFormatString = "original_ {0}"
SelectMethod = "GetProducts"
TypeName = "ProductsBLL" UpdateMethod = "UpdateProduct">
<DeleteParameters>
<asp:Parameter Name="productID" Type="Int32" />
</ DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="productName" tipo="String" />
<asp:Parameter Name="supplierID" Type="Int32" />
<asp:Parameter Name="categoryID" Type="Int32" />
<asp:Parameter Name="quantityPerUnit" tipo="String" />
<asp:Parameter Name="unitPrice" Type="Decimal" />
<asp:Parameter Name="unitsInStock" Type="Int16" />
<asp:Parameter Name="unitsOnOrder" Type="Int16" />
<asp:Parameter Name="reorderLevel" Type="Int16" />
<asp:Parameter Name="discontinued" Type="Boolean" />
<asp:Parameter Name="productID" Type="Int32" />
</ UpdateParameters>
<InsertParameters>
<asp:Parameter Name="productName" tipo="String" />
<asp:Parameter Name="supplierID" Type="Int32" />
<asp:Parameter Name="categoryID" Type="Int32" />
<asp:Parameter Name="quantityPerUnit" tipo="String" />
<asp:Parameter Name="unitPrice" Type="Decimal" />
<asp:Parameter Name="unitsInStock" Type="Int16" />
<asp:Parameter Name="unitsOnOrder" Type="Int16" />
<asp:Parameter Name="reorderLevel" Type="Int16" />
<asp:Parameter Name="discontinued" Type="Boolean" />
</ InsertParameters>
</ Asp: ObjectDataSource>
El 4b6ect2ata(ource i'clu)e u' %ar.$etro %ara ca"a u'o "e los %ar.$etros "e e'tra"a
%ara sus $-to"os asocia"os1 asB co$o u'a lista "e (electPara#eters est. %rese'te
cua'"o el 4b6ect2ata(ource se co'5igura %ara lla$ar a u' $-to"o "e selecci!' 6ue
es%era u' %ar.$etro "e e'tra"a 8co$o 9etProductsDyCategoryI2
( IdCategora ) :. Co$o 3ere$os e' +re3e1 los 3alores "e
estos 2eletePara#eters 1 $pdatePara#eters ) InsertPara#eters se a#usta'
auto$.tica$e'te %or el 9ridVie0 1 2etailsVie0 ) For#Vie0 1 a'tes "e i'3ocar el Insert
() 1 $pdate () o 7li#inar () el $-to"o "e la 4b6ect2ata(ource . Estos 3alores ta$+i-'
se %ue"e' esta+lecer $e"ia'te %rogra$aci!'1 seg<' sea 'ecesario1 co$o 3ere$os e' u'
tutorial e' el 5uturo.
>' e5ecto secu'"ario "e utili0ar el asiste'te %ara co'5igurar a 4b6ect2ata(ource es 6ue
7isual Stu"io esta+lece la%ro%ie"a" Gl"7aluesPara$eterEor$atStri'g a originalZ
S,T . Este 3alor "e la %ro%ie"a" se utili0a %ara i'cluir los 3alores origi'ales "e los "atos
6ue se est. e"ita'"o ) es <til e' "os situacio'es(
Si1 "ura'te la e"ici!' "e u' registro1 los usuarios %ue"e' ca$+iar el 3alor "e cla3e
%ri'ci%al. E' este caso1 ta'to el 'ue3o 3alor "e cla3e %ri'ci%al ) el 3alor origi'al "e la
cla3e %ri'ci%al "e+e ser sie$%re1 %or lo 6ue el registro co' el 3alor "e cla3e %ri'ci%al
origi'al se %ue"e e'co'trar ) te'er su 3alor actuali0a"o e' co'secue'cia.
Cua'"o se utili0a la co'curre'cia o%ti$ista. Co'curre'cia o%ti$ista es u'a t-c'ica
%ara asegurarse "e 6ue "os usuarios si$ult.'eos 'o so+rescri+ir los ca$+ios
res%ecti3os1 ) es el te$a %ara u' tutorial e' el 5uturo.
El 4ldValuesPara#eterFor#at(tring %ro%ie"a" i'"ica el 'o$+re "e los %ar.$etros "e
e'tra"a e' la actuali0aci!' "el o+#eto su+)ace'te ) eli$i'ar los $-to"os %ara los 3alores
origi'ales. Ha+lare$os "e esta %ro%ie"a" ) su %ro%!sito co' $a)or "etalle cua'"o se
e%lora la si$ulta'ei"a" o%ti$ista. 9o $e'cio'o ahora1 si' e$+argo1 %or6ue 'uestros
$-to"os "e %lo$o e' sa'gre 'o es%era' 6ue los 3alores origi'ales1 ) %or lo ta'to es
i$%orta'te 6ue eli$i'e$os esta %ro%ie"a". Salie'"o "e
la 4ldValuesPara#eterFor#at(tring %ro%ie"a" esta+leci"a e' otra cosa 6ue el 3alor
%or "e5ecto 8 S,T : se %ro"ucir. u' error cua'"o u' co'trol "e "atos "e la *e+ i'te'ta
i'3ocar el $pdate () o 7li#inar () el $-to"o "e la 4b6ect2ata(ource 1 %or6ue
el 4b6ect2ata(ource tratar. "e %asar e' a$+as
la $pdatePara#eters o2eletePara#eters es%eci5ica"os1 asB co$o los %ar.$etros "e
3alor origi'al.
Si esto 'o es $u) clara e' este $o$e'to1 'o se %reocu%e1 3a$os a ea$i'ar esta
%ro%ie"a" ) su utili"a" e' u' tutorial 5uturo. Por ahora1 s!lo aseg<rese "e eli$i'ar )a sea
esta "eclaraci!' "e %ro%ie"a" %or co$%leto "e la si'tais "eclarati3a o esta+lecer el 3alor
e' el 3alor %or "e5ecto 8 S,T :.
/ota Si uste" aca+a "e li$%iar el 4ldValuesPara#eterFor#at(tring 3alor "e la
%ro%ie"a" "es"e la 3e'ta'a Pro%ie"a"es "e la 3ista "e "ise=o1 la %ro%ie"a" seguir.
eistie'"o e' la si'tais "eclarati3a1 si'o 6ue se "e5i'e co$o u'a ca"e'a 3acBa. Esto1
la$e'ta+le$e'te1 to"a3Ba se tra"ucir. e' el $is$o %ro+le$a 6ue "iscuti$os
a'terior$e'te. Por lo ta'to1 )a sea 6uitar la %ro%ie"a" %or co$%leto "e la si'tais
"eclarati3a o1 "es"e la 3e'ta'a Pro%ie"a"es1 esta+le0ca el 3alor %or "e5ecto1 S,T .
Paso 1: .gregar un control 0eb de datos y
con'iguracin Bue para la #odi'icacin de datos
Des%u-s "e 6ue el 4b6ect2ata(ource se ha a=a"i"o a la %.gi'a ) co'5igura"o1 esta$os
listos %ara agregar co'troles "e "atos a la %.gi'a *e+1 ta'to %ara $ostrar los "atos )
%ro%orcio'ar u' $e"io %ara el usuario 5i'al %ara $o"i5icarlo.7a$os a 3er e'
el 9ridVie0 1 2etailsVie0 ) For#Vie0 %or se%ara"o1 )a 6ue estos co'troles 4e+ "e
"atos "i5iere' e' su ca%aci"a" "e $o"i5icaci!' "e "atos ) la co'5iguraci!'.
Co$o 3ere$os e' el resto "e este artBculo1 la a"ici!' "e u'a e"ici!' $u) +.sica1 i'serci!'
) eli$i'aci!' "e a%o)o a tra3-s "el 9ridVie0 1 2etailsVie0 ) For#Vie0 co'troles es
real$e'te ta' 5.cil co$o co$%ro+ar u' %ar "e casillas "e 3eri5icaci!'. Ha) $uchos $atices
) casos etre$os e' el $u'"o real 6ue hace' "e %ro%orcio'ar "icha 5u'cio'ali"a" $.s
co$%lica"o 6ue si$%le$e'te a%u'tar ) hacer clic. E' este tutorial1 si' e$+argo1 se ce'tra
eclusi3a$e'te e' "e$ostrar si$%le $o"i5icaci!' "e "atos ca%aci"a"es. Tutoriales 5uturo
estu"ie los %ro+le$as 6ue si' "u"a surgir.' e' u' a$+ie'te "el $u'"o real.
Dorrado de datos de la 9ridVie0
&'icio arrastra'"o u' 9ridVie0 "el cua"ro "e herra$ie'tas hasta el "ise=a"or. A
co'ti'uaci!'1 e'la0ar el4b6ect2ata(ource al 9ridVie0 $e"ia'te la selecci!' "e la lista
"es%lega+le e' el 9ridVie0 tag Ms i'telige'te. E' este %u'to1 el 9ridVie0 $arca"o Ms
"eclarati3o ser. el siguie'te(
<Asp: GridView ID = "GridView1" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1">
<columnas>
<Asp: BoundField DataField = "ProductID" HeaderText = "ProductID"
InsertVisible = "false"
ReadOnly = "True" SortExpression = "ProductID" />
<Asp: BoundField DataField = "ProductName"
HeaderText = "ProductName"
SortExpression = "ProductName" />
<Asp: BoundField DataField = "IdProveedor" HeaderText = "IdProveedor"
SortExpression = "IdProveedor" />
<Asp: BoundField DataField = "CategoryID" HeaderText = "CategoryID"
SortExpression = "CategoryID" />
<Asp: BoundField DataField = "CantidadPorUnidad"
HeaderText = "CantidadPorUnidad"
SortExpression = "CantidadPorUnidad" />
<Asp: BoundField DataField = "UnitPrice" HeaderText = "UnitPrice"
SortExpression = "UnitPrice" />
<Asp: BoundField DataField = "UnitsInStock"
HeaderText = "UnitsInStock" SortExpression = "UnitsInStock" />
<Asp: BoundField DataField = "UnitsOnOrder"
HeaderText = "UnitsOnOrder" SortExpression = "UnitsOnOrder" />
<Asp: BoundField DataField = "ReorderLevel"
HeaderText = "ReorderLevel" SortExpression = "ReorderLevel" />
<Asp: CheckBoxField DataField = "interrumpidas"
HeaderText = "interrumpidas" SortExpression = "interrumpidas" />
<Asp: BoundField DataField = "CategoryName"
HeaderText = "CategoryName" ReadOnly = "True"
SortExpression = "CategoryName" />
<Asp: BoundField DataField = "SupplierName"
HeaderText = "SupplierName" ReadOnly = "True"
SortExpression = "SupplierName" />
</ Columns>
</ Asp: GridView>
E'la0ar el 9ridVie0 a la 4b6ect2ata(ource a tra3-s "e su eti6ueta i'telige'te tie'e "os
3e'ta#as(
DoundField s ) C"ecJDoxField s se crea' auto$.tica$e'te %ara ca"a u'o "e los
ca$%os 6ue es "e3uelta %or el4b6ect2ata(ource . Por otra %arte1
el DoundField ) C"ecJDoxField %ro%ie"a"es Ms se esta+lece' +as.'"ose e' los
$eta"atos "el ca$%o su+)ace'te. Por e#e$%lo1
el ProductI2 1 Category/a#e ) (upplier/a#e ca$%os est.' $arca"os co$o "e
s!lo lectura e' el Products2ataTable )1 %or ta'to1 'o "e+e ser actuali0a+le "ura'te
la e"ici!'. Para solucio'ar esto1 la %ro%ie"a"es Rea"G'l) "e estos DoundField s se
esta+lece' e' !erdad .
9a %ro%ie"a" Data\e)Na$es se asig'a al ca$%o "e cla3e %ri'ci%al 8s: "el o+#eto
su+)ace'te. Esto es ese'cial cua'"o se utili0a el 9ridVie0 %ara e"itar o eli$i'ar
"atos1 )a 6ue esta %ro%ie"a" i'"ica 6ue el ca$%o 8o co'#u'to "e ca$%os: 6ue
i"e'ti5ica "e 5or$a <'ica ca"a registro. Para $.s i'5or$aci!' so+re
el 2ata[ey/a#es%ro%ie"a"1 se re5iere' "e 'ue3o a la $aestro A "etalle utili0a'"o
u' Dri"7ie4 $aestro seleccio'a+le co' u' Detail7ie4 Detalles tutorial.
Mie'tras 6ue el 9ridVie0 se %ue"e e'la0ar a los 4b6ect2ata(ource a tra3-s "e la
3e'ta'a Pro%ie"a"es o si'tais "eclarati3a1 esto re6uiere 6ue uste" agregue la
a"ecua"a DoundField ) 2ata[ey/a#es $arca"o "e 5or$a $a'ual.
El 9ridVie0 co'trol %ro%orcio'a so%orte i'tegra"o %ara la e"ici!' a 'i3el "e 5ila )
eli$i'aci!'. Co'5iguraci!' "e u'9ridVie0 %ara a%o)ar la eli$i'aci!' agrega u'a colu$'a
"e eli#inar los +oto'es. Cua'"o el usuario hace clic e' el7li#inar +ot!' %ara u'a 5ila
"eter$i'a"a1 so+re3ie'e u'a "e3oluci!' "e "atos ) el 9ridVie0 reali0a los siguie'tes
%asos(
1. El 2eletePara#eters 3alor 8s: "el 4b6ect2ata(ource se les asig'a.
2. 9a 7li#inar () el $-to"o "e la 4b6ect2ata(ource se i'3oca1 +orrar el registro
es%eci5ica"o.
,. El 9ridVie0 se 3uel3e a e'la0ar co' el 4b6ect2ata(ource i'3oca'"o su (elect
() $-to"o.
9os 3alores 6ue se asig'a' a la 2eletePara#eters so' los 3alores "e
la 2ata[ey/a#es ca$%o 8s: "e la 5ila cu)o7li#inar +ot!' se hi0o clic. Por lo ta'to1 es
3ital 6ue el 2ata[ey/a#es %ro%ie"a" "e u' 9ridVie0 est. correcta$e'te
co'5igura"a. Si se trata "e 5alta1 el 2eletePara#eters se le asig'ar. u' 3alor "e null e'
el %aso 11 6ue a su 3e0 'o resultar. e' 'i'g<' registro eli$i'a"o e' el %aso 2.
/ota El 2ata[eys colecci!' se al$ace'a e' el esta"o "e co'trol "el 9ridVie0 1 lo 6ue
sig'i5ica 6ue el2ata[eys 3alores ser.' recor"a"os a tra3-s "e "e3oluci!' "e "atos i'cluso
si el esta"o "e 3ista "e la9ridVie0 se ha "esacti3a"o. Si' e$+argo1 es $u) i$%orta'te
6ue el esta"o "e 3ista sigue' sie'"o ha+ilita"o %ara 9ridVie0 s 6ue el a%o)o "e e"itar o
+orrar 8el co$%orta$ie'to %or "e5ecto:. Si se esta+lece la 7nableVie0(tate %ro%ie"a"
"el 9ridVie0 al 'also 1 el co$%orta$ie'to "e e"itar ) eli$i'ar 'o te'"r.' 'i'g<'
%ro+le$a %ara u' solo usuario1 %ero1 si ha) usuarios al $is$o tie$%o la eli$i'aci!' "e
"atos1 eiste la %osi+ili"a" "e 6ue estos usuarios al $is$o tie$%o %or acci"e'te %o"rBa
eli$i'ar o $o"i5icar los registros 6ue 'o te'Ba' la i'te'ci!' "e eli$i'ar o e"itar. 87er la
e'tra"a "e $i +log1AD7ERTENC&A( %u'to "e co'curre'cia co' ASP.NET 2.0 Dri"7ie4s A
Details7ie4 A Eor$7ie4s 6ue la e"ici!' "e a%o)o ) A o eli$i'ar ) cu)o %u'to "e 3ista "el
Esta"o es re"uci"a .1 %ara $.s i'5or$aci!':
Esta $is$a a"3erte'cia se a%lica ta$+i-' a 2etailsVie0 s ) For#Vie0 s.
Para agregar las ca%aci"a"es "e +orrar a u' 9ridVie0 1 +asta co' ir a la eti6ueta
i'telige'te ) co$%ro+ar el Aabilitar eli#inacin casilla "e 3eri5icaci!'.
Figura 1, Co#pruebe la Aabilitar eli#inacin casilla de !eri'icacin
Co$%ro+aci!' "e la Aabilitar eli#inacin casilla "e 3eri5icaci!' "e la eti6ueta i'telige'te
a=a"e u' Co##andField a la 9ridVie0 . El Co##andField hace u'a colu$'a e'
el 9ridVie0 co' +oto'es %ara reali0ar u'a o $.s "e las siguie'tes tareas( la selecci!' "e
u' registro1 e"ici!' "e u' registro1 eli$i'ar u' registro. A'terior$e'te he$os 3isto
laCo##andField e' la acci!' co' la selecci!' "e registros e' el $aestro A "etalle
utili0a'"o u' Dri"7ie4 $aestro seleccio'a+le co' u' Detail7ie4 Detalles tutorial.
El Co##andField co'tie'e u'a serie "e ("o0EDutton %ro%ie"a"es 6ue i'"ica' lo 6ue
u'a serie "e +oto'es 6ue a%arece' e' el Co##andField . Al $arcar la Aabilitar
eli#inacin casilla "e 3eri5icaci!'1
u' Co##andField cu)a("o02eleteDutton %ro%ie"a" se esta+lece e' cierto ha si"o
a=a"i"o a la colu#nas "e la colecci!' "e 9ridVie0 .
<Asp: GridView ID = "GridView1" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1">
<columnas>
<asp:CommandField ShowDeleteButton="True" />
... BoundFields eliminado debido a la brevedad ...
</ Columns>
</ Asp: GridView>
E' este %u'to1 lo creas o 'o1 he$os ter$i'a"o co' la a"ici!' "e so%orte %ara la eli$i'aci!'
"e 9ridVie0 C Co$o $uestra la Eigura 11 se $uestra1 al 3isitar esta %.gi'a a tra3-s "e u'
'a3ega"or1 u'a colu$'a "e eli#inar los +oto'es est. %rese'te.
Figura 11 7l Co##andField agrega una colu#na de botones 7li#inar (Clic en la
'oto para una i#agen #=s grande)
Si uste" ha si"o la co'strucci!' "e este tutorial "es"e el %ri'ci%io %or su %ro%ia cue'ta1
cua'"o se %rue+a esta %.gi'a1 haga clic e' el 7li#inar +ot!' se %ro"ucir. u'a
ece%ci!'. Co'ti'<e le)e'"o %ara a%re'"er acerca "e %or 6u- estas ece%cio'es se
%la'tearo' ) c!$o solucio'arlos.
/ota Si 3a a seguir utili0a'"o a lo largo "e la "escarga 6ue aco$%a=a a este tutorial1
estos %ro+le$as )a ha' si"o co'ta+ili0a"os. Si' e$+argo1 os a'i$o a leer a tra3-s "e los
"etalles 6ue sigue' %ara a)u"ar a i"e'ti5icar %ro+le$as 6ue %ue"a' surgir1 asB co$o
solucio'es a"ecua"as.
Si1 al i'te'tar eli$i'ar u' %ro"ucto1 se o+tie'e u'a ece%ci!' cu)o $e'sa#e es si$ilar a
HG+#ectDataSource MG+#ectDataSource1M 'o %u"o e'co'trar u' $-to"o 'o ge'-ricoH
DeletePro"uct H6ue tie'e %ar.$etros( Pro"uct&D1 origi'al_Pro"uct&D1H es %ro+a+le 6ue se
ol3i"! "e 6uitar el 4ldValuesPara#eterFor#at(tring %ro%ie"a"
"el4b6ect2ata(ource . Co' la 4ldValuesPara#eterFor#at(tring %ro%ie"a"
es%eci5ica"a1 el 4b6ect2ata(ource i'te'ta %asar
ta'to productI2 ) originalZProductI2 %ar.$etros "e e'tra"a a
la 2eleteProduct $-to"o. 2eleteProduct 1 si' e$+argo1 s!lo ace%ta u' solo %ar.$etro
"e e'tra"a1 %or lo ta'to1 la ece%ci!'. Etracci!' "e
la4ldValuesPara#eterFor#at(tring %ro%ie"a" 8o si se esta+lece e' S,T : i'stru)e a
los 4b6ect2ata(ource 'o i'te'tar %asar e' el %ar.$etro "e e'tra"a origi'al.
Figura 1+ .segHrese de Bue la propiedad 4ldValuesPara#eterFor#at(tring se
"a eli#inado (Clic en la 'oto para una i#agen #=s grande)
&'cluso si se ha+Ba 6uita"o la 4ldValuesPara#eterFor#at(tring %ro%ie"a"1 uste"
seguir. reci+ie'"o u'a ece%ci!' al i'te'tar eli$i'ar u' %ro"ucto1 co' el $e'sa#e H9a
i'strucci!' DE9ETE e' co'5licto co' ME\_Gr"er_Details_Pro"uctsH la restricci!' "e
re5ere'cia. H 9a +ase "e "atos Ne%tu'o co'tie'e u'a restricci!' "e cla3e eter'a e'tre
los detalles del pedido ) Productos ta+las1 lo 6ue sig'i5ica 6ue u' %ro"ucto 'o %ue"e
ser eli$i'a"o "el siste$a si ha) u'o o $.s registros "e 6ue e' la 4rden
2etalles $esa. De+i"o a 6ue ca"a %ro"ucto e' la +ase "e "atos Ne%tu'o tie'e al $e'os
u' registro "e detalles del pedido 1 'o se %ue"e eli$i'ar 'i'g<' %ro"ucto hasta 6ue se
eli$i'e %ri$ero la asocia"a "etalles %ara los registros "el %ro"ucto.
Figura 11 $na restriccin de cla!e 'or=nea se pro"Cbe la eli#inacin de los
productos (Clic en la 'oto para una i#agen #=s grande)
Para 'uestro tutorial1 3a$os a eli$i'ar to"os los registros "e la 4rden 2etalles de la
ta+la. E' u'a a%licaci!' real1 te'"rBa$os la o%ci!' "e(
Tie'e otra %a'talla %ara a"$i'istrar la i'5or$aci!' %ara los "etalles.
Au$e'tar la 2eleteProduct $-to"o %ara i'cluir l!gica %ara eli$i'ar los "etalles "el
%e"i"o "el %ro"ucto es%eci5ica"o.
Mo"i5icar la co'sulta S@9 6ue se utili0a %or el Ta+leA"a%ter 6ue i'cluir. la
eli$i'aci!' "e los "etalles "el %e"i"o "el %ro"ucto es%eci5ica"o.
7a$os a eli$i'ar to"os los registros "e la 4rden 2etalles de $esa %ara elu"ir la
restricci!' "e cla3e 5or.'ea. 7a)a al E%lora"or "e ser3i"ores e' 7isual Stu"io1 haga clic e'
el nort"0nd#d' 'o"o ) seleccio'e /ue!a consulta . 9uego1 e' la 3e'ta'a "e co'sulta1
e#ecute la siguie'te i'strucci!'( 27*7T7 FF4& M4rder 2etailsN
Figura 13 7li#inar todos los registros de la tabla 2etalles de pedidos (Clic en la
'oto para una i#agen #=s grande)
Des%u-s "e la li$%ie0a "e los 2etalles de pedidos "e $esa1 hacie'"o clic e'
el 7li#inar +ot!' eli$i'a el %ro"ucto si' error. Si al hacer clic e' el 7li#inar +ot!'1 'o se
eli$i'a el %ro"ucto1 aseg<rese "e 6ue el 2ata[ey/a#es %ro%ie"a" "el 9ridVie0 se
esta+lece e' el ca$%o "e cla3e %ri'ci%al 8 ProductI2 :.
/ota Al hacer clic e' el 7li#inar +ot!'1 so+re3ie'e u'a "e3oluci!' "e "atos ) el registro
se eli$i'a.Esto %ue"e ser %eligroso1 %or6ue es 5.cil "e hacer clic e' la 5ila e6ui3oca"a
"e eli#inar el +ot!' acci"e'tal$e'te. E' u' 5uturo tutorial1 3a$os a 3er c!$o agregar
u'a co'5ir$aci!' "el la"o "el clie'te al eli$i'ar u' registro.
*a edicin de datos con el 9ridVie0
Yu'to co' la eli$i'aci!'1 el 9ridVie0 co'trol ta$+i-' %ro%orcio'a so%orte i'tegra"o "e
e"ici!' "e 'i3el "e 5ila.Co'5iguraci!' "e u' 9ridVie0 %ara a%o)ar la e"ici!' agrega u'a
colu$'a "e editar los +oto'es. Des"e la %ers%ecti3a "el usuario 5i'al1 haga clic e' u'a
5ila 7ditar +ot!' hace 6ue la 5ila 6ue se %ue"e' e"itar1 co'3ertir las c-lulas e' cua"ros "e
teto 6ue co'tie'e' los 3alores eiste'tes ) la sustituci!' "e la edicin co' el
+ot!' .ctuali%ar ) Cancelar +oto'es.Des%u-s "e hacer los ca$+ios "esea"os1 los
usuarios %ue"e' hacer clic e' el .ctuali%ar +ot!' %ara co'5ir$ar los ca$+ios
o Cancelar +ot!' %ara "eshacerse "e ellos. E' cual6uier caso1 "es%u-s "e hacer
clic actuali%acin o Cancelar1 el 9ridVie0 3uel3e a su esta"o %reIe"ici!'.
Des"e 'uestra %ers%ecti3a co$o "esarrolla"or "e %.gi'as1 cua'"o el usuario hace clic e'
el 7ditar +ot!' %ara u'a 5ila "eter$i'a"a1 so+re3ie'e u'a "e3oluci!' "e "atos )
el 9ridVie0 reali0a los siguie'tes %asos(
1. El 7ditIte#Index %ro%ie"a" "el 9ridVie0 se asig'a al B'"ice "e la 5ila
cu)os 7ditar +ot!' se hi0o clic.
2. El 9ridVie0 se 3uel3e a e'la0ar co' el 4b6ect2ata(ource i'3oca'"o su (elect
() $-to"o.
,. El B'"ice "e la 5ila 6ue coi'ci"e co' el 7ditIte#Index se re%rese'ta e' H$o"o "e
e"ici!'.H E' este $o"o1 laedicin se sustitu)e %or el
+ot!' .ctuali%ar ) Cancelar +oto'es ) DoundField s cu)a Fead4nly %ro%ie"a"es
se esta+lece' e' 'also 8%or "e5ecto: se re%rese'ta' co$o TextDox co'troles *e+
cu)o texto %ro%ie"a"es se asig'a' a los 3alores "e los ca$%os "e "atos.
E' este %u'to1 el $arca"o se "e3uel3e al 'a3ega"or1 %er$itie'"o al usuario 5i'al %ara
hacer cual6uier ca$+io a los "atos "e la 5ila. Cua'"o el usuario hace clic e'
la actuali%acin de +ot!'1 se %ro"uce u'a "e3oluci!' "e "atos ) el9ridVie0 reali0a los
siguie'tes %asos(
1. El $pdatePara#eters 3alor 8s: "el 4b6ect2ata(ource se asig'a' los 3alores
i'tro"uci"os %or el usuario 5i'al e' el 9ridVie0 Ms i'ter5a0 "e e"ici!'.
2. El $pdate () el $-to"o "e la 4b6ect2ata(ource se i'3oca1 la actuali0aci!' "el
registro es%eci5ica"o.
,. El 9ridVie0 se 3uel3e a e'la0ar co' el 4b6ect2ata(ource i'3oca'"o su (elect
() $-to"o.
9os 3alores "e cla3e %ri'ci%al 6ue 5uero' asig'a"os a la $pdatePara#eters e' el %aso 1
%ro3ie'e' "e los 3alores 6ue se es%eci5ica' e' el 2ata[ey/a#es %ro%ie"a"1 $ie'tras 6ue
los 3alores cla3e 'o %ri$arios %ro3ie'e' "el teto e' elTextDox co'troles *e+ "e la 5ila
e"ita"a. Al igual 6ue co' la eli$i'aci!'1 es 3ital 6ue el 2ata[ey/a#es %ro%ie"a" "e
u' 9ridVie0 est. correcta$e'te co'5igura"a. Si se trata "e 5alta1
el $pdatePara#eters 3alor "e cla3e %ri'ci%al se le asig'ar. u' 3alor "e null e' el %aso
11 6ue a su 3e0 'o resultar. e' 'i'g<' registro actuali0a"o e' el %aso 2.
E"ici!' "e la 5u'cio'ali"a" se %ue"e acti3ar co' s!lo el co'trol "e la edicin
.cti!ar casilla "e 3eri5icaci!' e' el9ridVie0 tag Ms i'telige'te.
Figura 1- Co#pruebe la Aabilitar edicin casilla de !eri'icacin
Co$%ro+aci!' "e la Aabilitar edicin casilla "e 3eri5icaci!' Agregar
u'a Co##andField 8si es 'ecesario: ) esta+lecer
su ("o07ditDutton %ro%ie"a" !erdadera . Co$o 3i$os a'terior$e'te1
el Co##andField co'tie'e u'a serie "e("o0EDutton %ro%ie"a"es 6ue i'"ica' lo 6ue
u'a serie "e +oto'es 6ue a%arece' e' el Co##andField .Co$%ro+aci!' "e la Aabilitar
edicin casilla a=a"e la ("o07ditDutton %ro%ie"a" a los actuales Co##andField .
<Asp: GridView ID = "GridView1" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1">
<columnas>
<Asp: CommandField ShowDeleteButton = "True"
ShowEditButton = "true" />
... BoundFields eliminado debido a la brevedad ...
</ Columns>
</ Asp: GridView>
Eso es to"o lo 6ue ha) 6ue a=a"ir so%orte %ara la e"ici!' ru"i$e'taria. Co$o Eigure16
$uestra1 la i'ter5a0 "e e"ici!' es +asta'te cru"o1
ca"a DoundField cu)a Fead4nly %ro%ie"a" est. esta+leci"a e' 'also 8%or "e5ecto: se
re%rese'ta co$o u' cuadro de texto . Esto i'clu)e .reas
co$o CategoryI2 ) IdPro!eedor 1 6ue so' cla3es %ara las otras ta+las.
Figura 18 .l "acer clic en el botn 7ditar C"ai #uestra la 'ila de @#odo de
edicin@ (Clic en la 'oto para una i#agen #=s grande)
A"e$.s "e %e"ir a los usuarios e"itar los 3alores "e la cla3e eter'a "irecta1 la i'ter5a0 "e
la i'ter5a0 "e e"ici!' es 6ue carece' "e las siguie'tes $a'eras(
Si el usuario i'tro"uce u' CategoryI2 o IdPro!eedor 6ue 'o eiste e' la +ase "e
"atos1 la .CT$.*IX.CIY/ 3a a 3iolar u'a restricci!' "e cla3e eter'a1 hacie'"o u'a
ece%ci!' a ele3arse.
9a i'ter5a0 "e e"ici!' 'o i'clu)e 'i'g<' ti%o "e 3ali"aci!'. Si uste" 'o %ro%orcio'a
u' 3alor "eter$i'a"o 8co$oProduct/a#e : o i'tro"ucir u' 3alor "e ca"e'a e' la
6ue se es%era u' 3alor 'u$-rico 8%or e#e$%lo1 i'tro"ucie'"o HDe$asia"oH e'
el Precio$nidad cua"ro "e teto:1 u'a ece%ci!' ser. la'0a"a. >' tutorial 5uturo se
ea$i'ar. c!$o agregar co'troles "e 3ali"aci!' %ara la i'ter5a0 "e usuario "e
e"ici!'.
E' la actuali"a"1 todos los ca$%os "e %ro"uctos 6ue 'o so' "e s!lo lectura "e+e ser
i'clui"o e' el 9ridVie0 . Si tu3i-ra$os 6ue 6uitar u' ca$%o "e la 9ridVie0 I%or
e#e$%lo1 Precio$nidad 1 al actuali0ar los "atos1 el9ridVie0 'o se esta+lecerBa
la $pdatePara#eters 3alor "e Precio por unidad 1 lo 6ue ca$+iarBa el registro "e
la +ase "e Precio$nidad a u' /$** el 3alor. Del $is$o $o"o1 si u' ca$%o
o+ligatorio1 co$o Product/a#e 1 se eli$i'a "e la 9ridVie0 1 la actuali0aci!' 5allar.
co' la $is$a Hcolu$'aH Pro"uctNa$e H'o %er$ite 'ulosH ece%ci!' $e'cio'a"a
a'terior$e'te.
El 5or$ato "e e"ici!' "e la i'ter5a0 "e#a $ucho 6ue "esear. El Precio por unidad se
$uestra co' cuatro "eci$ales. &"eal$e'te1 el CategoryI2 ) IdPro!eedor los
3alores 6ue co'tie'e' 2rop2o0n*ist s 6ue la lista "e categorBas ) %ro3ee"ores e'
el siste$a.
Estas so' to"as las "e5icie'cias 6ue 3a$os a te'er 6ue 3i3ir co'1 %or ahora1 %ero 6ue se
a+or"ar.' e' 5uturos tutoriales.
Insertar> editar y eli#inar datos con los 2etailsVie0
Co$o he$os 3isto e' los %ri$eros tutoriales1 el 2etailsVie0 $uestra u' registro "e
co'trol a la 3e0 )1 al igual 6ue el9ridVie0 1 %er$ite e"itar ) +orrar "el registro 6ue se
$uestra actual$e'te. Ta'to la e%erie'cia "el usuario 5i'al co' la e"ici!' ) eli$i'aci!' "e
ele$e'tos "e u' 2etailsVie0 ) el 5lu#o "e tra+a#o "es"e el la"o "e ASP.NET so' i"-'ticos
a los "e la 9ridVie0 . Cua'"o el 2etailsVie0 "i5iere "el 9ridVie0 es 6ue ta$+i-'
%ro%orcio'a u' siste$a i'tegra"o "e i'sertar a%o)o.
Para "e$ostrar las ca%aci"a"es "e $o"i5icaci!' "e "atos "el 9ridVie0 1 e$%e0ar %or la
a"ici!' "e u' 2etailsVie0 a la %.gi'a "e ;asics.as% %or e'ci$a "e la
eiste'te 9ridVie0 ) e'la0arlo a la eiste'te 4b6ect2ata(ource a tra3-s
"el2etailsVie0 tag Ms i'telige'te. A co'ti'uaci!'1 li$%iar la altura ) el anc"o de las
%ro%ie"a"es "e la 2etailsVie0 1 ) co$%ro+ar la paginacin Aabilitar la o%ci!' "e la
eti6ueta i'telige'te. Para ha+ilitar la e"ici!'1 i'serci!' ) eli$i'aci!' "e a%o)o1
si$%le$e'te $ar6ue la edicin .cti!ar 1 Aabilitar insercin ) Aabilitar
eli#inacin casillas "e 3eri5icaci!' "e la eti6ueta i'telige'te.
Figura 1: Con'igurar el 2etailsVie0 para apoyar la edicin> insercin y
eli#inacin
Al igual 6ue co' el 9ridVie0 1 la a"ici!' "e la e"ici!'1 i'serci!' o eli$i'aci!' "e a%o)o
a=a"e u' Co##andField a la2etailsVie0 1 co$o la si'tais "eclarati3a siguie'te
$uestra(
<Asp: DetailsView ID = "DetailsView1" runat = "server"
AutoGenerateRows = "false"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1"
AllowPaging = "True">
<Fields>
<Asp: BoundField DataField = "ProductID"
HeaderText = "ProductID" InsertVisible = "false"
ReadOnly = "True" SortExpression = "ProductID" />
<Asp: BoundField DataField = "ProductName"
HeaderText = "ProductName" SortExpression = "ProductName" />
<Asp: BoundField DataField = "IdProveedor" HeaderText = "IdProveedor"
SortExpression = "IdProveedor" />
<Asp: BoundField DataField = "CategoryID" HeaderText = "CategoryID"
SortExpression = "CategoryID" />
<Asp: BoundField DataField = "CantidadPorUnidad"
HeaderText = "CantidadPorUnidad"
SortExpression = "CantidadPorUnidad" />
<Asp: BoundField DataField = "UnitPrice"
HeaderText = "UnitPrice" SortExpression = "UnitPrice" />
<Asp: BoundField DataField = "UnitsInStock"
HeaderText = "UnitsInStock" SortExpression = "UnitsInStock" />
<Asp: BoundField DataField = "UnitsOnOrder"
HeaderText = "UnitsOnOrder" SortExpression = "UnitsOnOrder" />
<Asp: BoundField DataField = "ReorderLevel"
HeaderText = "ReorderLevel" SortExpression = "ReorderLevel" />
<Asp: CheckBoxField DataField = "interrumpidas"
HeaderText = "interrumpidas" SortExpression = "interrumpidas" />
<Asp: BoundField DataField = "CategoryName"
HeaderText = "CategoryName" ReadOnly = "True"
SortExpression = "CategoryName" />
<Asp: BoundField DataField = "SupplierName"
HeaderText = "SupplierName" ReadOnly = "True"
SortExpression = "SupplierName" />
<Asp: CommandField ShowDeleteButton = "True"
ShowEditButton = "True" ShowInsertButton = "true" />
</ Campos>
</ Asp: DetailsView>
Te'ga e' cue'ta 6ue %ara el 2etailsVie0 1 el Co##andField a%arece al 5i'al "e
la Colu#nas colecci!' %or "e5ecto.De+i"o a 6ue el 2etailsVie0 ca$%os Ms se re%rese'ta'
co$o 5ilas1 el Co##andField a%arece co$o u'a 5ila co'Insertar 1 editar ) eli#inar los
+oto'es e' la %arte i'5erior "e la 2etailsVie0 .
Figura 1; Con'igurar el 2etailsVie0 para apoyar la edicin> insercin y
eli#inacin (Clic en la 'oto para una i#agen #=s grande)
Al hacer clic e' el 7li#inar +ot!' se i'icia la $is$a secue'cia "e e3e'tos co$o co'
el 9ridVie0 ( u'a "e3oluci!' "e "atos1 segui"o %or el 2etailsVie0 6ue %ue+la'
el 2eletePara#eters "e su 4b6ect2ata(ource 1 +asa"o e' el2ata[ey/a#es 3alores )
co'clu)! co' u' lla$a"o a la eli#inacin () el $-to"o "e su 4b6ect2ata(ource 1 6ue e'
reali"a" eli$i'a el %ro"ucto "e la +ase "e "atos. E"ici!' e' el 2etailsVie0 ta$+i-'
tra+a#a "e u'a $a'era 6ue es i"-'tica a la "el 9ridVie0 .
Para i'sertar1 el usuario 5i'al se %rese'ta co' u' nue!o +ot!' 6ue1 cua'"o se hace clic1
hace 6ue el 2etailsVie0 e' H$o"o "e i'serci!'H. Co' el H$o"o "e i'serci!'H1
el nue!o +ot!' se sustitu)e %or insercin ) Cancelar +oto'es1 ) s!lo
a6uellos DoundField s cu)a InsertVisible %ro%ie"a" est. esta+leci"a e' !erdadero 8%or
"e5ecto: 6ue se $uestra' so'.9os ca$%os "e "atos 6ue se i"e'ti5ica' co$o los ca$%os "e
i'cre$e'to auto$.tico1 co$o %or e#e$%lo ProductI2 1 tie'e' su %ro%ie"a"
&'sert7isi+le esta+leci"o e' 'also cua'"o se e'la0a el 2etailsVie0 a la 5ue'te "e "atos a
tra3-s "e la eti6ueta i'telige'te.
Al e'la0ar u' orige' "e "atos a u' 2etailsVie0 a tra3-s "e la eti6ueta i'telige'te1 7isual
Stu"io esta+lece elInsertVisible %ro%ie"a" 'alsos s!lo %ara los ca$%os "e i'cre$e'to
auto$.tico. Ca$%os "e s!lo lectura1 co$oCategory/a#e ) (upplier/a#e 1 se $ostrar.
e' la i'ter5a0 "e H$o"o "e i'serci!'H "el usuario1 a $e'os 6ue suInsertVisible %ro%ie"a"
se esta+lece e%lBcita$e'te e' 'also . To$e u' $o$e'to %ara esta+lecer
el InsertVisible%ro%ie"a"es "e estos "os ca$%os "e 'alsa 1 )a sea a tra3-s "e
la 2etailsVie0 si'tais Ms "eclarati3a o $e"ia'te laedicin Ca#pos e'lace e' la eti6ueta
i'telige'te. 9a 5igura 1K $uestra la co'5iguraci!' "e
la InsertVisible %ro%ie"a"es'alsas hacie'"o clic e' el 7ditar ca#pos e'lace.
Figura 1< /eptuno o'rece a"ora t? .c#e (Clic en la 'oto para una i#agen #=s
grande)
Des%u-s "e a#ustar la InsertVisible %ro%ie"a"es1 3er la %.gi'a ;asics.as% e' u'
'a3ega"or ) haga clic e' el nue!o+ot!'. 9a 5igura 20 $uestra el 2etailsVie0 cua'"o se
agrega u'a 'ue3a +e+i"aIAc$e t- a 'uestra lB'ea "e %ro"uctos.
Figura +, /eptuno o'rece a"ora t? .c#e (Clic en la 'oto para una i#agen #=s
grande)
Des%u-s "e e'trar e' los "etalles %ara el t- Ac$e ) haga clic e' el Insertar +ot!'1
so+re3ie'e u'a "e3oluci!' "e "atos ) el 'ue3o registro se a=a"e a los productos de la
ta+la "e +ase "e "atos. De+i"o a 6ue este 2etailsVie0 $uestra los %ro"uctos e' el or"e'
e' 6ue a%arece' e' la ta+la "e +ase "e "atos1 "e+e$os %.gi'a %ara el <lti$o %ro"ucto co'
el 5i' "e 3er el 'ue3o %ro"ucto.
Figura +1 2etalles para el t? .c#e (Clic en la 'oto para una i#agen #=s grande)
/ota 9a %ro%ie"a" Curre'tMo"e "el 2etailsVie0 i'"ica 6ue la i'ter5a0 6ue se $uestra )
%ue"e ser u'o "e los siguie'tes 3alores( 7ditar 1 Insertar 1 o Fead4nly . 9a %ro%ie"a"
De5aultMo"e i'"ica el $o"o e' 6ue el 2etailsVie0 3uel3e "es%u-s "e u'a e"ici!' o
i'serci!' se ha co$%leta"o ) es <til %ara $ostrar u'2etailsVie0 6ue est.
%er$a'e'te$e'te e' la e"ici!' o el $o"o "e i'serci!'.
El %u'to ) haga clic e' la i'serci!' ) e"ici!' "e la 2etailsVie0 su5re' las $is$as
li$itacio'es 6ue el 9ridVie0 ( El usuario "e+e i'tro"ucir
eiste'tes CategoryI2 ) IdPro!eedor 3alores a tra3-s "e u' cua"ro "e teto1 la i'ter5a0
'o tie'e 'i'gu'a l!gica "e 3ali"aci!'1 to"os los ca$%os "e %ro"uctos1 6ue 'o
%er$ite' /$** los 3alores o 'o tie'e' u' 3alor %or "e5ecto es%eci5ica"o e' el 'i3el "e
+ase "e "atos "e+e' ser i'clui"os e' la i'ter5a0 "e la i'serci!'1 ) asB sucesi3a$e'te.
9as t-c'icas 6ue 3a$os a ea$i'ar %ara la a$%liaci!' ) $e#ora "e la 9ridVie0 i'ter5a0 Ms
e"ici!' e' 5uturos artBculos se %ue"e' a%licar ta$+i-' a la 2etailsVie0 i'ter5aces "e
co'trol "e e"ici!' e i'serci!'.
$tili%ando el For#Vie0 para una inter'a% de usuario
#=s 'lexible #odi'icacin de datos
El For#Vie0 o5rece so%orte i'tegra"o %ara i'sertar1 e"itar ) eli$i'ar los "atos1 %ero1
"e+i"o a 6ue utili0a las %la'tillas e' lugar "e ca$%os1 'o ha) lugar %ara a=a"ir
la DoundField s o Co##andField 6ue es utili0a"o %or
el 9ridVie0 )2etailsVie0 co'troles %ara %ro%orcio'ar los "atos "e $o"i5icaci!' "e la
i'ter5a0. E' ca$+io1 esta i'ter5a01 los co'troles *e+ %ara reco%ilar la e'tra"a "el usuario
cua'"o se a=a"e u' 'ue3o artBculo o e"itar u'o )a eiste'te1 #u'to co'
el/ue!o 1 7ditar 1 Dorrar 1 Insertar 1 .ctuali%ar ) Cancelar +oto'es1 se "e+e agregar
$a'ual$e'te las %la'tillas a"ecua"as. A5ortu'a"a$e'te1 7isual Stu"io crea
auto$.tica$e'te la i'ter5a0 'ecesaria cua'"o se e'la0a el For#Vie0 a u'a 5ue'te "e
"atos a tra3-s "e la lista "es%lega+le e' la eti6ueta i'telige'te.
Para ilustrar estas t-c'icas1 e$%e0ar %or la a"ici!' "e u' For#Vie0 a la %.gi'a "e
;asics.as% )1 "es"e el For#Vie0tag Ms i'telige'te1 6ue se u'e' a los )a
crea"os 4b6ect2ata(ource . Esto ge'erar.
u' 7ditIte#Te#plate 1InsertIte#Te#plate ) Ite#Te#plate %ara el For#Vie0 1
co' TextDox co'troles *e+ %ara reco%ilar la e'tra"a "el usuario ) el botn de co'trol
4e+ %ara la /ue!a 1 7ditar 1 Dorrar 1 Insertar 1 .ctuali%ar ) Cancelar +oto'es. A"e$.s1
el2ata[ey/a#es %ro%ie"a" "el For#Vie0 se esta+lece e' el ca$%o "e cla3e %ri'ci%al
8 ProductI2 : "el o+#eto 6ue es "e3uelto %or el 4b6ect2ata(ource . Por <lti$o1
co$%rue+e la paginacin Aabilitar o%ci!' e' el For#Vie0 tag Ms i'telige'te.
9a si'tais siguie'te $uestra el $arca"o "eclarati3o %ara
el Ite#Te#plate "el For#Vie0 1 "es%u-s "e 6ue elFor#Vie0 se ha u'i"o a
la 4b6ect2ata(ource . Por "e5ecto1 ca"a ca$%o "e 3alor 'oI+oolea'o %ro"ucto se u'e a
ladel texto "e %ro%ie"a" "e u'a etiBueta "e co'trol *e+1 $ie'tras 6ue ca"a ca$%o 3alor
+oolea'o 8 descatalogados : se u'e a la C"eBueado %ro%ie"a" "e u'a %erso'a
"isca%acita"a C"ecJDox co'trol *e+. Para 6ue el /ue!o 1 7ditar )7li#inar +oto'es %ara
acti3ar ciertos For#Vie0 co$%orta$ie'to cua'"o se hace clic1 es i$%erati3o 6ue
suCo##and/a#e 3alores se esta+lece e' /ue!a 1 7ditar ) 7li#inar 1 res%ecti3a$e'te.
<Asp: FormView ID = "FormView1" runat = "server" DataKeyNames = "ProductID"
DataSourceID = "ObjectDataSource1" AllowPaging = "True">
<EditItemTemplate>
...
</ EditItemTemplate>
<InsertItemTemplate>
...
</ InsertItemTemplate>
<ItemTemplate>
ProductID:
<Asp: Label = ID "ProductIDLabel" runat = "server"
Texto ='<%# Eval ("ProductID") %>'></ asp: Label> <br />
ProductName:
<Asp: Label = ID "ProductNameLabel" runat = "server"
Texto ='<%# Bind ("ProductName")%> '>
</ Asp: Label> <br />
IdProveedor:
<Asp: Label = ID "SupplierIDLabel" runat = "server"
Texto ='<%# Bind ("IdProveedor")%> '>
</ Asp: Label> <br />
CategoryID:
<Asp: Label = ID "CategoryIDLabel" runat = "server"
Texto ='<%# Bind ("CategoryID")%> '>
</ Asp: Label> <br />
CantidadPorUnidad:
<Asp: Label = ID "QuantityPerUnitLabel" runat = "server"
Texto ='<%# Bind ("CantidadPorUnidad")%> '>
</ Asp: Label> <br />
Precio por unidad:
<Asp: Label = ID "UnitPriceLabel" runat = "server"
Texto ='<%# Bind ("Precio por unidad") %>'></ asp: Label> <br />
UnitsInStock:
<Asp: Label = ID "UnitsInStockLabel" runat = "server"
Texto ='<%# Bind ("UnitsInStock")%> '>
</ Asp: Label> <br />
UnitsOnOrder:
<Asp: Label = ID "UnitsOnOrderLabel" runat = "server"
Texto ='<%# Bind ("UnitsOnOrder")%> '>
</ Asp: Label> <br />
ReorderLevel:
<Asp: Label = ID "ReorderLevelLabel" runat = "server"
Texto ='<%# Bind ("ReorderLevel")%> '>
</ Asp: Label> <br />
Discontinuadas:
<Asp: CheckBox ID = "DiscontinuedCheckBox" runat = "server"
Comprobar ='<%# Bind ("interrumpidas")%> '
Enabled = "false" /> <br />
CategoryName:
<Asp: Label = ID "CategoryNameLabel" runat = "server"
Texto ='<%# Bind ("NombreCategora")%> '>
</ Asp: Label> <br />
SupplierName:
<Asp: Label = ID "SupplierNameLabel" runat = "server"
Texto ='<%# Bind ("SupplierName")%> '>
</ Asp: Label> <br />
<Asp: LinkButton ID = "editbutton" runat = "server"
CausesValidation = "False" CommandName = "Editar"
Text = "Editar">
</ Asp: LinkButton>
<Asp: LinkButton ID = "DeleteButton" runat = "server"
CausesValidation = "False" CommandName = "Delete"
Text = "Eliminar">
</ Asp: LinkButton>
<Asp: LinkButton ID = "NewButton" runat = "server"
CausesValidation = "False" CommandName = "Nuevo"
Text = "Nuevo">
</ Asp: LinkButton>
</ ItemTemplate>
</ Asp: FormView>
9a 5igura 22 $uestra el Ite#Te#plate "el For#Vie0 cua'"o se 3e a tra3-s "e u'
'a3ega"or. Ca"a ca$%o est. e' la lista "e %ro"uctos co'
el /ue!o 1 7ditar ) 7li#inar +oto'es e' la %arte i'5erior.
Figura ++ 7l !alor predeter#inado Ite#Te#plate For#Vie0 #uestra cada ca#po
del producto> 6unto con la creacin> edicin y 7li#inar (Clic en la 'oto para una
i#agen #=s grande)
Al igual 6ue co' el 9ridVie0 ) 2etailsVie0 1 haga clic e' el 7li#inar +ot!'1 o
cual6uier botn 1 *inJDutton oI#ageDutton 6ue Co##and/a#e %ro%ie"a" est.
esta+leci"a e' 7li#inar 1 %ro3oca u'a "e3oluci!' "e "atos1 lle'a
el2eletePara#eters "el 4b6ect2ata(ource 1 +asa"o e' el 2ata[ey/a#es 3alor
"el For#Vie0 1 e i'3oca el 2elete () el $-to"o "e la 4b6ect2ata(ource .
Cua'"o la edicin se %ulsa el +ot!'1 so+re3ie'e u'a "e3oluci!' "e "atos ) los "atos "e
re+ote a la 7ditIte#Te#plate1 6ue es el e'carga"o "e $ostrar la i'ter5a0 "e e"ici!'. Esta
i'ter5a0 i'clu)e los co'troles *e+ %ara la e"ici!' "e "atos1 #u'to co'
la actuali%acin ) Cancelar +oto'es. El 3alor %re"eter$i'a"o 7ditIte#Te#plate 6ue es
ge'era"o %or 7isual Stu"io co'tie'e u'a etiBueta %ara los ca$%os "e i'cre$e'to
auto$.tico 8 ProductI2 :1 u' cuadro de texto %ara ca"a ca$%o "e 3alor 'oI+oolea'o1 )
u' C"ecJDox %ara ca"a ca$%o 3alor +oolea'o. Este co$%orta$ie'to es $u) si$ilar a la
"e la autoIge'era"os DoundField s e' el 9ridVie0 ) 2etailsVie0 co'troles.
/ota >' %e6ue=o %ro+le$a co' el For#Vie0 Ms "e autoIge'eraci!' "e
la 7ditIte#Te#plate es 6ue hace TextDox co'troles *e+ %ara a6uellos ca$%os 6ue so'
"e s!lo lectura1 co$o Category/a#e )(upplier/a#e . 7a$os a 3er c!$o "ar cue'ta "e
esto e' +re3e.
El TextDox co'troles e' el 7ditIte#Te#plate tie'e' su texto la %ro%ie"a" co$%arti"a
co' el 3alor "e su ca$%o "e "atos corres%o'"ie'te $e"ia'te el uso de dos v9as de enlace
de datos . De "os 3Bas "e e'lace "e "atos1 "e'ota"a %or <% # Enlace ("dataField")%> Ille3a
a ca+o el e'lace "e "atos ta'to e' el $o$e'to "el e'lace "e "atos a la %la'tilla ) al
relle'ar el 4b6ect2ata(ource %ar.$etros Ms %ara i'sertar o $o"i5icar registros. Es "ecir1
cua'"o el usuario hace clic e' el 7ditar +ot!' "e la Ite#Te#plate 1 el Dind () $-to"o
"e3uel3e el ca$%o "e "atos es%eci5ica"o "e 3alores. Des%u-s "e 6ue el usuario ha
reali0a"o ca$+ios ) los clics de actuali%acin 1 los 3alores e%uestos "e 'ue3o 6ue
corres%o'"e' a los ca$%os "e "atos se es%eci5ica $e"ia'te el uso "e Dind () se a%lica' a
la $pdatePara#eters "e4b6ect2ata(ource . Por otra %arte1 u'a 3Ba "e e'lace "e "atos1
"e'ota"a %or <% # Eval ("dataField")%> "e s!lo recu%era los 3alores "e los ca$%os "e
"atos e' el e'lace "e "atos a la %la'tilla ) 6ue no "e3uel3e' los 3alores i'tro"uci"os %or el
usuario a los %ar.$etros "e la 5ue'te "e "atos so+re "e3oluci!' "e "atos.
El $arca"o "eclarati3o siguie'te $uestra la 7ditIte#Te#plate "el For#Vie0 . Te'ga e'
cue'ta 6ue el Dind () $-to"o se utili0a e' la si'tais "e e'lace "e "atos a6uB1 ) 6ue
la actuali%acin ) Cancelar Dotn de co'troles *e+ tie'e'
suCo##and/a#e %ro%ie"a"es co' la $is$a.
<Asp: FormView ID = "FormView1" runat = "server" DataKeyNames = "ProductID"
DataSourceID = "ObjectDataSource1" AllowPaging = "True">
<EditItemTemplate>
ProductID:
<Asp: Label = ID "ProductIDLabel1" runat = "server"
Texto ="<%# Eval ("ProductID") %>"></ asp: Label> <br />
ProductName:
<Asp: TextBox ID = "ProductNameTextBox" runat = "server"
Texto ="<%# Bind ("ProductName")%> ">
</ Asp: TextBox> <br />
IdProveedor:
<Asp: TextBox ID = "SupplierIDTextBox" runat = "server"
Texto ="<%# Bind ("IdProveedor")%> ">
</ Asp: TextBox> <br />
CategoryID:
<Asp: TextBox ID = "CategoryIDTextBox" runat = "server"
Texto ="<%# Bind ("CategoryID")%> ">
</ Asp: TextBox> <br />
CantidadPorUnidad:
<Asp: TextBox ID = "QuantityPerUnitTextBox" runat = "server"
Texto ="<%# Bind ("CantidadPorUnidad")%> ">
</ Asp: TextBox> <br />
Precio por unidad:
<Asp: TextBox ID = "UnitPriceTextBox" runat = "server"
Texto ="<%# Bind ("Precio por unidad")%> ">
</ Asp: TextBox> <br />
UnitsInStock:
<Asp: TextBox ID = "UnitsInStockTextBox" runat = "server"
Texto ="<%# Bind ("UnitsInStock")%> ">
</ Asp: TextBox> <br />
UnitsOnOrder:
<Asp: TextBox ID = "UnitsOnOrderTextBox" runat = "server"
Texto ="<%# Bind ("UnitsOnOrder")%> ">
</ Asp: TextBox> <br />
ReorderLevel:
<Asp: TextBox ID = "ReorderLevelTextBox" runat = "server"
Texto ="<%# Bind ("ReorderLevel")%> ">
</ Asp: TextBox> <br />
Discontinuadas:
<Asp: CheckBox ID = "DiscontinuedCheckBox" runat = "server"
Comprobar ="<%# Bind ("interrumpidas")%> "/> <br />
CategoryName:
<Asp: TextBox ID = "CategoryNameTextBox" runat = "server"
Texto ="<%# Bind ("NombreCategora")%> ">
</ Asp: TextBox> <br />
SupplierName:
<Asp: TextBox ID = "SupplierNameTextBox" runat = "server"
Texto ="<%# Bind ("SupplierName")%> ">
</ Asp: TextBox> <br />
<Asp: LinkButton ID = "UpdateButton" runat = "server"
CausesValidation = "True" CommandName = "Actualizar"
Text = "Update">
</ Asp: LinkButton>
<Asp: LinkButton ID = "UpdateCancelButton" runat = "server"
CausesValidation = "False" CommandName = "Cancelar"
Text = "Cancelar">
</ Asp: LinkButton>
</ EditItemTemplate>
<InsertItemTemplate>
...
</ InsertItemTemplate>
<ItemTemplate>
...
</ ItemTemplate>
</ Asp: FormView>
E' este %u'to1 'uestra 7ditIte#Te#plate har. u'a ece%ci!' 6ue se %ro"uce si se
i'te'ta usarlo. El %ro+le$a es 6ue elCategory/a#e ) (upplier/a#e ca$%os se
re%rese'ta' co$o TextDox co'troles *e+ e' el 7ditIte#Te#plate . G "e+e$os ca$+iar
estos TextDox es "e etiBueta s o eli$i'arlos %or co$%leto. 7a$os a eli$i'arlos %or
co$%leto "e la7ditIte#Te#plate .
9a 5igura 2, $uestra el For#Vie0 e' el 'a3ega"or "es%u-s "e la edicin se ha hecho clic
e' el +ot!' "e Chai. Te'ga e' cue'ta 6ue la (upplier/a#e ) Category/a#e ca$%os
6ue se $uestra' e' el Ite#Te#plate )a 'o est.' %rese'tes1 co$o aca+a$os "e sacarlos
"el 7ditIte#Te#plate . Cua'"o la actuali%acin se hace clic e' el For#Vie0 %roce"e a
tra3-s "e la $is$a secue'cia "e %asos co$o el 9ridVie0 ) 2etailsVie0 co'troles.
Figura +1 Por de'ecto> el 7ditIte#Te#plate #uestra cada ca#po editable del
producto co#o un cuadro de texto o casilla de !eri'icacin (Clic en la 'oto para
una i#agen #=s grande)
Cua'"o el Insertar +ot!' 6ue se e'cue'tra "e'tro "el Ite#Te#plate "el For#Vie0 se
hace clic e' u'a "e3oluci!' "e "atos se %ro"uce. Si' e$+argo1 'o ha) "atos se u'e a
la For#Vie0 1 %or6ue u' 'ue3o registro 6ue se agrega. ElInsertIte#Te#plate i'ter5a0
i'clu)e los co'troles *e+ %ara agregar u' 'ue3o registro1 #u'to co'
la insercin )Cancelar +oto'es. El 3alor %re"eter$i'a"o InsertIte#Te#plate 6ue es
ge'era"o %or 7isual Stu"io co'tie'e u' cuadro de texto %ara ca"a ca$%o "e 3alor 'oI
+oolea'o ) u' C"ecJDox %ara ca"a ca$%o "e 3alor +oolea'o1 si$ilar a la ge'era"a
auto$.tica$e'te 7ditIte#Te#plate i'ter5a0 Ms. Ca"a cuadro de texto "e co'trol tie'e
su texto la %ro%ie"a" co$%arti"a co' el 3alor "e su ca$%o "e "atos corres%o'"ie'te a
tra3-s "e "os 3Bas "e e'lace "e "atos.
El $arca"o "eclarati3o siguie'te $uestra la InsertIte#Te#plate "el For#Vie0 . Te'ga
e' cue'ta 6ue el Dind ()$-to"o se utili0a e' la si'tais "e e'lace "e "atos a6uB1 ) 6ue
la insercin ) Cancelar Dotn de co'troles *e+ tie'e' suCo##and/a#e %ro%ie"a"es
co' la $is$a.
<Asp: FormView ID = "FormView1" runat = "server" DataKeyNames = "ProductID"
DataSourceID = "ObjectDataSource1" AllowPaging = "True">
<EditItemTemplate>
...
</ EditItemTemplate>
<InsertItemTemplate>
ProductName:
<Asp: TextBox ID = "ProductNameTextBox" runat = "server"
Texto ="<%# Bind ("ProductName")%> ">
</ Asp: TextBox> <br />
IdProveedor:
<Asp: TextBox ID = "SupplierIDTextBox" runat = "server"
Texto ="<%# Bind ("IdProveedor")%> ">
</ Asp: TextBox> <br />
CategoryID:
<Asp: TextBox ID = "CategoryIDTextBox" runat = "server"
Texto ="<%# Bind ("CategoryID")%> ">
</ Asp: TextBox> <br />
CantidadPorUnidad:
<Asp: TextBox ID = "QuantityPerUnitTextBox" runat = "server"
Texto ="<%# Bind ("CantidadPorUnidad")%> ">
</ Asp: TextBox> <br />
Precio por unidad:
<Asp: TextBox ID = "UnitPriceTextBox" runat = "server"
Texto ="<%# Bind ("Precio por unidad")%> ">
</ Asp: TextBox> <br />
UnitsInStock:
<Asp: TextBox ID = "UnitsInStockTextBox" runat = "server"
Texto ="<%# Bind ("UnitsInStock")%> ">
</ Asp: TextBox> <br />
UnitsOnOrder:
<Asp: TextBox ID = "UnitsOnOrderTextBox" runat = "server"
Texto ="<%# Bind ("UnitsOnOrder")%> ">
</ Asp: TextBox> <br />
ReorderLevel:
<Asp: TextBox ID = "ReorderLevelTextBox" runat = "server"
Texto ="<%# Bind ("ReorderLevel")%> ">
</ Asp: TextBox> <br />
Discontinuadas:
<Asp: CheckBox ID = "DiscontinuedCheckBox" runat = "server"
Comprobar ="<%# Bind ("interrumpidas")%> "/> <br />
CategoryName:
<Asp: TextBox ID = "CategoryNameTextBox" runat = "server"
Texto ="<%# Bind ("NombreCategora")%> ">
</ Asp: TextBox> <br />
SupplierName:
<Asp: TextBox ID = "SupplierNameTextBox" runat = "server"
Texto ="<%# Bind ("SupplierName")%> ">
</ Asp: TextBox> <br />
<Asp: LinkButton ID = "InsertButton" runat = "server"
CausesValidation = "True" CommandName = "Insertar"
Text = "Insertar">
</ Asp: LinkButton>
<Asp: LinkButton ID = "InsertCancelButton" runat = "server"
CausesValidation = "False" CommandName = "Cancelar"
Text = "Cancelar">
</ Asp: LinkButton>
</ InsertItemTemplate>
<ItemTemplate>
...
</ ItemTemplate>
28 Asp3 <orm/ie+7
Ha) u'a sutile0a co' la For#Vie0 Ms "e autoIge'eraci!' "e la InsertIte#Te#plate . E'
co'creto1 el TextDox co'troles *e+ se crea'1 i'cluso %ara a6uellos ca$%os 6ue so' "e
s!lo lectura1 co$o Category/a#e ) (upplier/a#e . Al igual 6ue co'
el 7ditIte#Te#plate 1 6ue se "e+e' eli$i'ar estos TextDox es "e
la InsertIte#Te#plate .
9a 5igura 2/ $uestra el For#Vie0 e' u' 'a3ega"or cua'"o se a=a"e u' 'ue3o %ro"ucto1
ca5- Ac$e. Te'ga e' cue'ta 6ue la (upplier/a#e ) Category/a#e ca$%os 6ue se
$uestra' e' el Ite#Te#plate )a 'o est.' %rese'tes1 co$o aca+a$os "e co'seguir su
eli$i'aci!'. Cua'"o el Insertar +ot!' es %ulsa"o1 el For#Vie0 %roce"e a tra3-s "e la
$is$a secue'cia "e %asos 6ue el 2etailsVie0 co'trol1 agregar u' 'ue3o registro a
la Productos "e $esa. 9a 5igura 22 $uestra los "etalles "el %ro"ucto Ca5- "e Ac$e e'
el For#Vie0 "es%u-s "e 6ue se ha i'serta"o.
Figura +3 7l InsertIte#Te#plate dicta la inter'a% de insertar el For#Vie0 (Clic
en la 'oto para una i#agen #=s grande)
Figura +- *os detalles del nue!o producto> ca'? .c#e> se #uestran en el
For#Vie0 (Clic en la 'oto para una i#agen #=s grande)
Se%ara'"o las "e s!lo lectura1 la e"ici!' ) la i'serci!' "e las i'ter5aces e' tres $o"elos
"isti'tos1 el For#Vie0 %er$ite u' gra"o "e co'trol so+re estas i'ter5aces 6ue
el 2etailsVie0 ) 9ridVie0 .
/ota Al igual 6ue el 2etailsVie0 1 el Current&ode %ro%ie"a" "el For#Vie0 i'"ica
6ue la i'ter5a0 6ue se $uestra1 ) su 2e'ault&ode %ro%ie"a" i'"ica el $o"o e' 6ue
el For#Vie0 3uel3e "es%u-s "e u'a e"ici!' o i'serci!' se ha co$%leta"o.
Conclusin
E' este tutorial1 he$os ea$i'a"o los 5u'"a$e'tos "e la i'serci!'1 e"ici!' ) eli$i'aci!'
"e "atos $e"ia'te el 9ridVie01 2etailsVie0 ) For#Vie0 . 9os tres "e estos co'troles
%ro%orcio'a' u' cierto 'i3el "e ca%aci"a"es i'tegra"as "e $o"i5icaci!' "e "atos 6ue
%ue"e' ser utili0a"os si' 'ecesi"a" "e escri+ir u'a sola lB'ea "e c!"igo e' la %.gi'a
ASP.NET1 gracias a los co'troles 4e+ "e "atos ) el 4b6ect2ata(ource . Si' e$+argo1 el
si$%le %u'to ) haga clic e' las t-c'icas "e hacer u' $u) "-+il e i'ge'uo $o"i5icaci!' "e
"atos "e i'ter5a0 "e usuario. Co' el 5i' "e %ro%orcio'ar la 3ali"aci!'1 i')ectar 3alores
%rogra$.ticos1 $a'e#ar ece%cio'es co' gracia1 %erso'ali0ar la i'ter5a0 "e usuario1 ) asB
sucesi3a$e'te1 3a$os a te'er 6ue "e%e'"er "e u' gru%o "e t-c'icas 6ue se "iscutir.
so+re los tutoriales siguie'tes.
Tutorial 1:: 7xa#en de los aconteci#ientos
relacionados con la insercin> actuali%acin y
eli#inacin de

Scott Mitchell
0, 200Z
Fesu#en: A$%liar el i'cor%ora"o e' la i'serci!'1 actuali0aci!' ) eli$i'aci!' "e las
ca%aci"a"es "e "atos "e ASP.NET Co'troles *e+ ) %erso'ali0ar la i'ter5a0 "e e"ici!' %ara
actuali0ar s!lo u' su+co'#u'to "e los ca$%os "e %ro"uctos1 co' este tutorial "e Scott
Mitchell. 82K %.gi'as i$%resas:
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial 1: (Visual C #)
&'tro"ucci!'
Paso 1( Actuali0aci!' Pro"uctNa$e "e u' %ro"ucto ) los ca$%os Precio>'i"a"
Me#orar el 5or$ato Precio>'i"a"
Paso 2( Prohi+ir >'itPrices N>99
Paso ,( %ro%orcio'a' u'a i'ter5a0 %ara a=a"ir 'ue3os %ro"uctos
Paso /( Asig'aci!' "e 3alores a los %ar.$etros "e Categor)&D ) &"Pro3ee"or
Co'clusi!'
Introduccin
Cua'"o se utili0a el i'cor%ora"o e' la i'serci!'1 e"ici!' o eli$i'aci!' "e las caracterBsticas
"el 9ridVie0 1 2etailsVie0o For#Vie0 co'troles1 u'a serie "e $e"i"as tra's%irar
cua'"o el usuario 5i'al se co$%leta el %roceso "e agregar u' 'ue3o registro o actuali0aci!'
o eli$i'aci!' "e u' registro eiste'te. Co$o )a co$e'ta$os e' el tutorial a'terior 1
cua'"o u'a 5ila se e"ita e' el 9ridVie0 la edicin se sustitu)e %or el +ot!'
"e actuali%acin ) Cancelar +oto'es ) laDoundField a su 3e0 s e' TextDox es. Des%u-s
"e 6ue el usuario 5i'al se actuali0a' los "atos ) los clics de actuali%acin 1 los siguie'tes
%asos se lle3a' a ca+o la "e3oluci!' "e "atos(
1. El 9ridVie0 relle'a el $pdatePara#eters "e su 4b6ect2ata(ource co' u'
ca$%o <'ico 6ue i"e'ti5ica el registro $o"i5ica"o 8s: "el 8a tra3-s "e
la 2ata[ey/a#es %ro%ie"a":1 #u'to co' los 3alores i'tro"uci"os %or el usuario.
2. El 9ridVie0 i'3oca el $pdate () co$o su $-to"o "e 4b6ect2ata(ource 1 6ue a su
3e0 i'3oca el $-to"o a%ro%ia"o e' el o+#eto su+)ace'te
8 Products2.*$pdateProduct 1 e' 'uestro tutorial a'terior:.
,. 9os "atos su+)ace'tes1 6ue ahora i'clu)e los ca$+ios se actuali0a'1 es "e re+ote a
la 9ridVie0 .
Dura'te esta secue'cia "e %asos1 u'a serie "e e3e'tos "e 5uego1 lo 6ue 'os %er$ite crear
co'trola"ores "e e3e'tos %ara agregar l!gica %erso'ali0a"a1 cua'"o sea 'ecesario. Por
e#e$%lo1 a'tes "el %aso 11 el Fo0$pdating caso "e 6ue el 9ridVie0 i'ce'"ios. Po"e$os1
e' este $o$e'to1 ca'celar la solicitu" "e actuali0aci!' si ha) alg<' error "e
3ali"aci!'. Cua'"o el $pdate () es lla$a"o1 la actuali%acin caso
"e 4b6ect2ata(ource i'ce'"ios1 %ro%orcio'a'"o u'a o%ortu'i"a" %ara a=a"ir o $o"i5icar
los 3alores "e cual6uiera "e los $pdatePara#eter s. Des%u-s "e 6ue el $-to"o "el
o+#eto su+)ace'te "e la 4b6ect2ata(ource ha co$%leta"o su e#ecuci!'1
la actuali%acin caso "e4b6ect2ata(ource se ele3a. >' co'trola"or "e e3e'tos %ara
la actuali%acin e3e'to %ue"e i's%eccio'ar los "etalles so+re la o%eraci!' "e
actuali0aci!'1 tales co$o '<$ero "e 5ilas 6ue se 3iero' a5ecta"os ) si eiste o 'o u'a
ece%ci!'.Ei'al$e'te1 "es%u-s "el %aso 21 el Fo0$pdated caso "e 6ue
el 9ridVie0 i'ce'"ios1 u' co'trola"or "e e3e'tos "e este e3e'to %ue"e ea$i'ar la
i'5or$aci!' a"icio'al so+re la o%eraci!' "e actuali0aci!' 6ue se reali0! #usto.
9a Eigura 1 $uestra esta serie "e e3e'tos ) los %asos cua'"o se actuali0a u' 9ridVie0 . El
%atr!' "e e3e'tos e' la Eigura 1 'o es a%lica+le s!lo a la actuali0aci!' co'
u' 9ridVie0 . &'sertar1 actuali0ar o +orrar "atos
"el 9ridVie0 12etailsVie0 o For#Vie0 %reci%ita la $is$a secue'cia "e e3e'tos %re )
%ostIgra"o "e 'i3el ta'to %ara el co'trol "e los "atos ) la *e+ 4b6ect2ata(ource .
Figura 1 $na serie de e!entos de incendios preKgrado y post grado> al actuali%ar
los datos en un 9ridVie0 (Clic en la 'oto para una i#agen #=s grande)
E' este tutorial1 3a$os a ea$i'ar co' estos e3e'tos %ara a$%liar la i'cor%ora"a e' la
i'serci!'1 actuali0aci!' ) eli$i'aci!' "e 5u'cio'es "e los co'troles *e+ ASP.NET "e
"atos. Ta$+i-' 3ere$os c!$o %erso'ali0ar la i'ter5a0 "e e"ici!' %ara actuali0ar s!lo u'
su+co'#u'to "e los ca$%os "e %ro"uctos.
Paso 1: .ctuali%acin Product/a#e de un producto y
los ca#pos Precio$nidad
E' las i'ter5aces "e e"ici!' "el tutorial a'terior1 todos los ca$%os "e %ro"ucto 6ue 'o era'
"e s!lo lectura tie'e' 6ue ser i'clui"os. Si tu3i-ra$os 6ue 6uitar u' ca$%o "e
la 9ridVie0 I%or e#e$%lo1 CantidadPor$nidad Ial actuali0ar los "atos1 el co'trol 4e+ "e
"atos 'o se esta+lecerBa
la 4b6ect2ata(ource Ms CantidadPor$nidad $pdatePara#eters 3alor.El 4b6ect2ata(
ource luego %asarBa e' u' /$** el 3alor e' el $pdateProduct $-to"o "e la ca%a "e
l!gica "e 'egocio 8;99:1 6ue i+a a ca$+iar el registro "e +ases "e "atos e"ita"os
"e CantidadPor$nidad colu$'a a u' /$** el 3alor. Del $is$o $o"o1 si u' ca$%o ta'
'ecesario co$o Product/a#e 1 se eli$i'a "e la i'ter5a0 "e e"ici!'1 la actuali0aci!' 5allar.
co' u' LProduct/a#eL colu#na no per#ite !alores nulos ece%ci!'. 9a ra0!' "e este
co$%orta$ie'to es 6ue el 4b6ect2ata(ource se co'5igura %ara lla$ar
la $pdateProduct $-to"o "e la ProductsD** clase1 6ue es%era u' %ar.$etro "e e'tra"a
%ara ca"a u'o "e los ca$%os "e %ro"uctos. Por lo ta'to1 la $pdatePara#eters colecci!'
"e la4b6ect2ata(ource co'tie'e u' %ar.$etro %ara ca"a u'o "e los %ar.$etros "e
e'tra"a "el $-to"o.
Si 6uere$os o5recer u' co'trol 4e+ "e "atos 6ue %er$ite al usuario 5i'al %ara actuali0ar
s!lo u' su+co'#u'to "e los ca$%os1 e'to'ces "e+e$os )a sea $e"ia'te %rogra$aci!' la
5alta $pdatePara#eters los 3alores "e la actuali%acin de co'trola"or "e e3e'tos "e
la 4b6ect2ata(ource o crear ) lla$ar a u' $-to"o 6ue s!lo es%era ;99 u' su+co'#u'to
"e los ca$%os. 7a$os a e%lorar este <lti$o e'5o6ue.
E' co'creto1 3a$os a crear u'a %.gi'a 6ue $uestra s!lo
el Product/a#e ) Precio$nidad ca$%os e"ita+les e' u'9ridVie0 . 9a i'ter5a0 "e
e"ici!' "e este 9ridVie0 %er$ite al usuario actuali0ar s!lo los "os ca$%os 6ue se
$uestra'1Product/a#e ) Precio$nidad . De+i"o a 6ue esta i'ter5a0 "e e"ici!' s!lo se
%ro%orcio'a u' su+co'#u'to "e los ca$%os "e u' %ro"ucto1 ha) 6ue crear )a sea
u' 4b6ect2ata(ource 6ue utili0a el $pdateProduct $-to"o "e la actual ;99 ) tie'e el
3alor "e los %ro"uctos 6ue 5alta' ca$%o esta+lecerse $e"ia'te %rogra$aci!' co'
la actuali%acin deco'trola"or "e e3e'tos o u' 'ue3o $-to"o "e %lo$o e' sa'gre 6ue
s!lo es%era el su+co'#u'to "e los ca$%os "e5i'i"os e' el 9ridVie0 . Para este tutorial1
3a$os a usar esta <lti$a o%ci!' ) crear u'a so+recarga "e la$pdateProduct $-to"oIu'o
6ue lle3a e' ta' s!lo tres %ar.$etros "e
e'tra"a( product/a#e 1 precio$nitario )productI2 .
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Update, false)]
pblica UpdateProduct bool (cadena productName, decimal? precioUnitario, int
productID)
{
Northwind.ProductsDataTable productos =
Adapter.GetProductByProductID (ProductID);
if (products.Count == 0)
/ / Ningn registro coincidente, devuelva falso
return false;
Northwind.ProductsRow producto = productos [0];
product.ProductName = productName;
if (precioUnitario == null) product.SetUnitPriceNull ();
ms product.UnitPrice = unitPrice.Value;
/ / Actualizar el registro del producto
int = rowsAffected Adapter.Update (producto);
/ / Devuelve verdadero si, precisamente, una fila se ha actualizado, si no falsa
volver rowsAffected == 1;
}
Al igual 6ue co' el origi'al $pdateProduct $-to"o1 esta so+recarga se i'icia $e"ia'te la
co$%ro+aci!' %ara 3er si ha) u' %ro"ucto e' la +ase "e "atos 6ue ha es%eci5ica"o
el ProductI2 . Si 'o1 "e3uel3e 'also 1 lo 6ue i'"ica 6ue la solicitu" %ara actuali0ar la
i'5or$aci!' "el %ro"ucto 5alla"o. De lo co'trario1 se actuali0a
el Product/a#e ) Precio$nidadca$%os "el registro "e %ro"uctos eiste'tes "e acuer"o
) se co$%ro$ete la actuali0aci!' lla$a'"o al $pdate ()$-to"o "el Ta+leA"a%ter1
%asa'"o los ProductsFo0 e#e$%lo.
Co' esta a"ici!' a 'uestra ProductsD** clase1 esta$os listos %ara crear la
si$%li5icaci!' 9ridVie0 i'ter5a0. A+ra el DataMo"i5icatio'E3e'ts.as% e' la car%eta
E"it&'sertDelete1 ) a=a"ir u' 9ridVie0 a la %.gi'a. Crear u' 'ue3o4b6ect2ata(ource )
co'5igurarlo %ara usar el ProductsD** clase1 co' su (eleccin () $-to"o "e asig'aci!'
"e9etProducts ) su actuali%acin () $-to"o "e asig'aci!' a
la $pdateProduct so+recarga 6ue to$a s!lo e'
losproduct/a#e 1 precio$nitario ) productI2 %ar.$etros "e e'tra"a. 9a Eigura 2
$uestra el Asiste'te %ara crear orBge'es "e "atos %ara hacer el $a%a "e la actuali%acin
() el $-to"o "e la 4b6ect2ata(ource a la 'ue3a$pdateProduct so+recarga "el $-to"o
"e la ProductsD** clase.
Figura + &apa del 4b6ect2ata(ource $pdate () para la sobrecarga
$pdateProduct nue!o (Clic en la 'oto para una i#agen #=s grande)
De+i"o a 6ue 'uestro e#e$%lo i'icial$e'te s!lo tie'e la ca%aci"a" "e e"itar "atos1 %ero 'o
%ara i'sertar o +orrar registros1 to$e u' $o$e'to %ara i'"icar e%lBcita$e'te 6ue
la insercin () ) 2elete () los $-to"os "e la4b6ect2ata(ource 'o "e+e ser asig'a"a a
cual6uiera "e los $-to"os "e la ProductsD** clase1 al ir a la I/(7FT.F )D4FF.F las
%esta=as ) elegir (/inguno) e' la lista "es%lega+le.
Figura 1 (eleccionar (/inguno) en la lista desplegable para el I/(7FT y 27*7T7
pesta5as (Clic en la 'oto para una i#agen #=s grande)
Des%u-s "e co$%letar este asiste'te1 co'sulte la Aabilitar edicin casilla "e 3eri5icaci!'
"e la 9ridVie0 tag Ms i'telige'te.
Co' el Asiste'te %ara crear orBge'es "e "atos ) co$%letar la u'i!' a la 9ridVie0 1
Microso5t 7isual Stu"io ha crea"o la si'tais "eclarati3a %ara a$+os co'troles. 7a)a a la
3ista "e c!"igo 5ue'te %ara i's%eccio'ar el $arca"o "eclarati3o "el4b6ect2ata(ource 1
6ue se $uestra a6uB(
<Asp: ObjectDataSource ID = "ObjectDataSource1" runat = "server"
OldValuesParameterFormatString = "original_ {0}"
SelectMethod = "GetProducts"
TypeName = "ProductsBLL" UpdateMethod = "UpdateProduct">
<UpdateParameters>
<asp:Parameter Name="productName" tipo="String" />
<asp:Parameter Name="unitPrice" Type="Decimal" />
<asp:Parameter Name="productID" Type="Int32" />
</ UpdateParameters>
</ Asp: ObjectDataSource>
Por6ue 'o ha) asig'acio'es %ara la insercin () ) 2elete () los $-to"os "e
la 4b6ect2ata(ource 1 'o
ha)InsertPara#eters o 2eletePara#eters seccio'es. A"e$.s1 "e+i"o a
la actuali%acin () $-to"o se asig'a a la$pdateProduct so+recarga "el $-to"o 6ue s!lo
ace%ta tres %ar.$etros "e e'tra"a1 el $pdatePara#eters secci!' tie'e s!lo
tres par=#etros "e los casos.
Te'ga e' cue'ta 6ue la 4ldValuesPara#eterFor#at(tring %ro%ie"a"
"el 4b6ect2ata(ource se esta+lece e' originalZ S,T . Esta %ro%ie"a" se esta+lece
auto$.tica$e'te %or 7isual Stu"io cua'"o se utili0a el asiste'te Co'5igurar orige' "e
"atos. Si' e$+argo1 "e+i"o a 'uestros $-to"os "e %lo$o e' sa'gre 'o es%era' 6ue el
origi'al ProductI2 3alor 6ue se %asa e'1 eli$i'ar esta asig'aci!' "e la %ro%ie"a" %or
co$%leto "e la si'tais "eclarati3a "e la 4b6ect2ata(ource .
/ota Si uste" aca+a "e li$%iar el 4ldValuesPara#eterFor#at(tring 3alor "e la
%ro%ie"a" "e laspropiedades de la 3e'ta'a e' la 3ista Dise=o1 la %ro%ie"a" seguir.
eistie'"o e' la si'tais "eclarati3a1 si'o 6ue se "e5i'e co$o u'a ca"e'a 3acBa. @uite la
%ro%ie"a" %or co$%leto "e la si'tais "eclarati3a o1 e' el Propiedades 3e'ta'a1
esta+le0ca el 3alor "e la o%ci!' %re"eter$i'a"a1 6ue es S,T .
Mie'tras 6ue el 4b6ect2ata(ource s!lo ha $pdatePara#eters %ara el 'o$+re "el
%ro"ucto1 %recio1 ) la i"e'ti5icaci!'1 7isual Stu"io ha a=a"i"o
u'a DoundField o C"ecJDoxField e' el 9ridVie0 %ara ca"a u'o "e los ca$%os "e los
%ro"uctos.
Figura 3 7l 9ridVie0 contiene un DoundField o C"ecJDoxField para cada uno de
los ca#pos de los productos(Clic en la 'oto para una i#agen #=s grande)
Cua'"o el usuario 5i'al e"ita u' %ro"ucto ) haga clic e' su actuali%acin de +ot!'1
el 9ridVie0 e'u$era los ca$%os 6ue 'o era' "e s!lo lectura. A co'ti'uaci!'1 esta+lece el
3alor "el %ar.$etro corres%o'"ie'te e' el $pdatePara#eterscolecci!' "e
la 4b6ect2ata(ource co' el 3alor i'tro"uci"o %or el usuario. Si 'o ha) 'i'g<' %ar.$etro
corres%o'"ie'te1 el 9ridVie0 agrega u'a a la colecci!'. Por lo ta'to1 si
'uestro 9ridVie0 co'tie'e DoundField s ) C"ecJDoxField s %ara to"os los ca$%os "el
%ro"ucto1 el 4b6ect2ata(ource aca+ar. i'3oca'"o la $pdateProduct so+recarga 6ue
to$a e' to"os estos %ar.$etros1 a %esar "e 6ue el $arca"o "eclarati3o
"el 4b6ect2ata(ource s!lo es%eci5ica tres %ar.$etros "e e'tra"a 83er Eigura 2:. Del
$is$o $o"o1 si eiste algu'a co$+i'aci!' "e los ca$%os "e %ro"uctos 'oI"e s!lo lectura
e' el 9ridVie0 6ue 'o se corres%o'"e co' los %ar.$etros "e e'tra"a %ara
u' $pdateProduct so+recarga1 u'a ece%ci!' se %ro"uce cua'"o i'te'ta actuali0ar.
Figura - 7l 9ridVie0 a5adir par=#etros a la coleccin del 4b6ect2ata(ource
$pdatePara#eters
Para asegurarse "e 6ue el 4b6ect2ata(ource lla$a al $pdateProduct so+recarga 6ue
to$a e' ta' s!lo el 'o$+re "el %ro"ucto1 %recio1 ) la i"e'ti5icaci!'1 "e+e$os restri'gir
el 9ridVie0 %ara 6ue los ca$%os e"ita+les %or s!lo
elProduct/a#e ) Precio$nidad . Esto %ue"e lograrse $e"ia'te la eli$i'aci!' "e la
otra DoundField s ) C"ecJDoxFields1 $e"ia'te el esta+leci$ie'to "e los otros ca$%os
H Fead4nly %ro%ie"a" real 1 o %or algu'a co$+i'aci!' "e los "os.Para este tutorial1
3a$os a eli$i'ar to"os los 9ridVie0 los ca$%os ece%to
el Product/a#e ) Precio$nidadDoundField s1 "es%u-s "e 6ue el $arca"o "eclarati3o
"el 9ridVie0 se 3er. co$o la siguie'te(
<Asp: GridView ID = "GridView1" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1">
<columnas>
<asp:CommandField ShowEditButton="True" />
<Asp: BoundField DataField = "ProductName"
HeaderText = "ProductName" SortExpression = "ProductName" />
<Asp: BoundField DataField = "UnitPrice" HeaderText = "UnitPrice"
SortExpression = "UnitPrice" />
</ Columns>
</ Asp: GridView>
Au'6ue el $pdateProduct so+recarga es%era tres %ar.$etros "e e'tra"a1 s!lo te'e$os
"os DoundField s e' 'uestro9ridVie0 . Esto se "e+e a la productI2 %ar.$etro "e
e'tra"a es u' 3alor "e cla3e %ri'ci%al ) %asa a tra3-s "el 3alor "e
la 2ata[ey/a#es %ro%ie"a" "e la 5ila e"ita"a.
Nuestro 9ridVie0 1 #u'to co' el $pdateProduct so+recarga1 %er$ite al usuario e"itar
s!lo el 'o$+re ) el %recio "e u' %ro"ucto si' %er"er 'i'gu'o "e los ca$%os "e otros
%ro"uctos.
Figura 8 *a inter'a% per#ite la edicin de tan slo el no#bre del producto y el
precio (Clic en la 'oto para una i#agen #=s grande)
/ota Co$o se e%lica e' el tutorial a'terior 1 es "e 3ital i$%orta'cia 6ue el Vista "el
esta"o "el9ridVie0 estar ha+ilita"o 8el co$%orta$ie'to %or "e5ecto:. Si se esta+lece
la 7nableVie0(tate %ro%ie"a" "el 9ridVie0 al 'also 1 se corre el riesgo "e te'er
usuarios co'curre'tes si' 6uerer +orrar o e"itar los registros. 87er AD7ERTENC&A( %u'to "e
co'curre'cia co' ASP.NET 2.0 Dri"7ie4s A Details7ie4 A Eor$7ie4s 6ue la e"ici!' "e a%o)o
) A o eli$i'ar ) cu)o %u'to "e 3ista "el Esta"o es re"uci"a 1 %ara $.s i'5or$aci!'.:
*a #e6ora de la Precio$nidad 'or#ato
Mie'tras 6ue el 9ridVie0 e#e$%lo 6ue se $uestra e' la Eigura 6 o+ras1
el Precio$nidad ca$%o 'o tie'e 5or$ato algu'o1 lo 6ue resulta e' u' i'"ica"or "e
i$%orte 6ue carece "e sB$+olos "e $o'e"a ) cue'ta co' cuatro "eci$ales.Para a%licar u'
5or$ato "e $o'e"a %ara las 5ilas 'o e"ita+le1 esta+le0ca la 2ataFor#at(tring %ro%ie"a"
"e laPrecio$nidad DoundField a S,: cT ) su At#l7ncode %ro%ie"a" 'alsos .
Figura : 7stablecer 2ataFor#at(tring $nitPrice y At#l7ncode propiedades en
consecuencia (Clic en la 'oto para una i#agen #=s grande)
Co' este ca$+io1 las 5ilas 'o se %ue"e e"itar el 5or$ato "e %recios co$o u'a $o'e"a1 la
5ila e"ita"a1 si' e$+argo1 sigue $ostra'"o el 3alor si' el sB$+olo "e $o'e"a ) co' cuatro
"eci$ales.
Figura ; *as 'ilas no #odi'icables son a"ora el 'or#ato de #oneda (Clic en la
'oto para una i#agen #=s grande)
9as i'struccio'es "e 5or$ato es%eci5ica"o e' el 2ataFor#at(tring %ro%ie"a" se %ue"e
a%licar a la i'ter5a0 "e e"ici!' $e"ia'te el esta+leci$ie'to "e
la .pplyFor#atIn7dit&ode %ro%ie"a" "e la DoundField "e !erdad 8el 3alor
%re"eter$i'a"o es 'also :. T!$ese u' $o$e'to %ara esta+lecer esta %ro%ie"a"
e' !erdad .
Figura < 7stable%ca la propiedad .pplyFor#atIn7dit&ode la DoundField
Precio$nidad en true (Clic en la 'oto para una i#agen #=s grande)
Co' este ca$+io1 el 3alor "e la Precio$nidad 6ue se $uestra e' la 5ila e"ita"a ta$+i-'
tie'e el 5or$ato "e u'a $o'e"a.
Figura 1, 7l !alor de la 'ila editada de $nitPrice es a"ora el 'or#ato de una
#oneda (Clic en la 'oto para una i#agen #=s grande)
Si' e$+argo1 la actuali0aci!' "e u' %ro"ucto co' el sB$+olo "e $o'e"a e' la ca#a "e teto1
tales co$o ^ 1K.00Ila'0a u'a For#at7xception . Cua'"o el 9ridVie0 trata "e asig'ar los
3alores su$i'istra"os %or el usuario a la$pdatePara#eters colecci!'
"el 4b6ect2ata(ource 1 'o es ca%a0 "e co'3ertir el Precio$nidad ca"e'a H^ 1K.00H e'
eldeci#al 6ue es re6ueri"o %or los %ar.$etros 83er Eigura 11:. Para re$e"iar esto1
%o"e$os crear u' co'trola"or "e e3e'tos %ara el Fo0$pdating caso "e 6ue
el 9ridVie0 ) tie'e' 6ue a'alice los su$i'istra"os %or el usuarioPrecio$nidad co$o
$o'e"a e' 5or$ato deci#al .
El Fo0$pdating caso "e 6ue el 9ridVie0 ace%ta co$o segu'"o %ar.$etro1 u' o+#eto "e
ti%oDri"7ie4>%"ateE3e'tArgs 1 6ue i'clu)e u' /e0Values "iccio'ario co$o u'a "e sus
%ro%ie"a"es 6ue co'tie'e los 3alores su$i'istra"os %or el usuario 6ue est.' listos %ara ser
asig'a"o a la $pdatePara#eters colecci!' "el4b6ect2ata(ource . Po"e$os
so+rescri+ir el archi3o Precio$nidad 3alor e' el /e0Values colecci!' co' u' 3alor
"eci$al 6ue se a'ali0a usa'"o el 5or$ato "e $o'e"a co' las siguie'tes lB'eas "e c!"igo e'
el Fo0$pdatingco'trola"or "e e3e'tos(
protected void GridView1_RowUpdating (object sender,
GridViewUpdateEventArgs e)
{
if (e.NewValues ["UnitPrice"]! = null)
e.NewValues ["UnitPrice"] =
Decimal.Parse (e.NewValues ["UnitPrice"]. ToString (),
System.Globalization.NumberStyles.Currency);
}
Si el usuario ha %ro%orcio'a"o u'a Precio$nidad 3alor 8co$o H^ 1K.00H:1 este 3alor se
so+rescri+e co' el 3alor "eci$al 6ue se calcula Deci$al.Parse 1 el a'.lisis "el 3alor co$o
$o'e"a. Esto correcta$e'te a'ali0ar. el "eci$al e' el caso "e los sB$+olos "e $o'e"a1
las co$as1 "eci$ales1 ) asB sucesi3a$e'te1 ) utili0a la e'u$eraci!' Nu$+erSt)les e'
elS)ste$.Dlo+ali0atio' es%acio "e 'o$+res.
9a 5igura 11 $uestra ta'to el %ro+le$a 6ue es causa"o %or los sB$+olos "e $o'e"a e' el
su$i'istra"o %or el usuarioPrecio$nidad ) c!$o el Fo0$pdating co'trola"or "e e3e'tos
"el 9ridVie0 %ue"e ser utili0a"o %ara a'ali0ar la e'tra"a tal correcta$e'te.
Figura 11 7l !alor de la 'ila editada de $nitPrice es a"ora el 'or#ato de una
#oneda (Clic en la 'oto para una i#agen #=s grande)
Paso +: Pro"ibir $nitPrices /$**
Au'6ue la +ase "e "atos est. co'5igura"o %ara %er$itir /$** los 3alores "e
la Precio$nidad colu$'a "e la Productos"e $esa1 6ue %ue"e ser 6ue "esee e3itar 6ue
los usuarios 6ue 3isita' esta %.gi'a e' %articular "e la es%eci5icaci!' "e
u' /$** Precio$nidad 3alor. Es "ecir1 si u' usuario 'o %ue"e e'trar e'
u' Precio$nidad 3alor "e la hora "e e"itar u'a 5ila "e %ro"uctos1 e' lugar "e guar"ar los
resulta"os e' la +ase "e "atos se "esea $ostrar u' $e'sa#e 6ue i'5or$a al usuario 6ue1 a
tra3-s "e esta %.gi'a1 to"os los %ro"uctos e"ita"os "e+e te'er u' %recio es%eci5ica"a.
El 9ridVie0$pdate7!ent.rgs o+#eto 6ue se %asa e' el Fo0$pdating co'trola"or "e
e3e'tos "el 9ridVie0 co'tie'e u'Cancelar %ro%ie"a" 6ue1 si se esta+lece
e' !erdadero 1 ter$i'a el %roceso "e actuali0aci!'. 7a$os a a$%liar
elFo0$pdating co'trola"or "e e3e'tos %ara esta+lecer eCancel "e !erdad ) $ostrar u'
$e'sa#e 6ue e%lica %or 6u-1 si el Precio por unidad "e 3alor e' el /e0Values colecci!'
es nula .
E$%e0ar %or agregar u'a etiBueta "e co'trol *e+ a la %.gi'a
"e'o$i'a"a &ustPro!ide$nitPrice&essage . EstaetiBueta "e co'trol se $ostrar. si el
usuario 'o es%eci5ica u' Precio$nidad 3alor "e la actuali0aci!' "e u' %ro"ucto.Esta+lecer
el texto "e %ro%ie"a" "e la etiBueta 6ue debe o'recer un precio para el
producto . Ta$+i-' he crea"o u'a 'ue3a clase "e CSS e' stylescss 6ue es lla$a"o de
alerta ) tie'e la siguie'te "e5i'ici!'(
. Advertencia
{
Color: Rojo;
font-style: italic;
font-weight: bold;
font-size: x-large;
}
Por <lti$o1 esta+le0ca el CssClass %ro%ie"a" "e la etiBueta "e ad!ertencia . E' este
%u'to1 el "ise=a"or "e+e $ostrar el $e'sa#e "e a"3erte'cia e' ro#o1 'egrita1 cursi3a
ta$a=o1 ti%o "e letra etra gra'"e %or e'ci$a "el 9ridVie0 1 co$o se $uestra e' la
Eigura 12.
Figura 1+ $na etiBueta se "a a5adido por enci#a del 9ridVie0 (Clic en la 'oto
para una i#agen #=s grande)
Por "e5ecto1 esta etiBueta "e+e estar oculto1 asB 6ue %o'ga su Visible %ro%ie"a"
a 'also e' el PageZ*oad co'trola"or "e e3e'tos(
protected void Page_Load (object sender, EventArgs e)
{
MustProvideUnitPriceMessage.Visible = false;
}
Si el usuario i'te'ta actuali0ar u' %ro"ucto si' es%eci5icar el Precio por unidad 1
6uere$os ca'celar la actuali0aci!' ) $ostrar la eti6ueta "e a"3erte'cia. Au$e'tar
la Fo0$pdating co'trola"or "e e3e'tos "el 9ridVie0 1 "e la siguie'te $a'era(
protected void GridView1_RowUpdating (object sender,
GridViewUpdateEventArgs e)
{
if (e.NewValues ["UnitPrice"]! = null)
{
e.NewValues ["UnitPrice"] =
Decimal.Parse (e.NewValues ["UnitPrice"]. ToString (),
System.Globalization.NumberStyles.Currency);
}
ms
{
/ / Muestra la etiqueta
MustProvideUnitPriceMessage.Visible = true;
/ / Cancelar la actualizacin
e.Cancel = true;
}
}
Si u' usuario i'te'ta guar"ar u' %ro"ucto si' es%eci5icar el %recio1 la actuali0aci!' se
ca'cela ) a%arece u' $e'sa#e <til es. Au'6ue la +ase "e "atos 8) la l!gica "e 'egocio:
%ara %er$itir /$** Precio$nidad s1 esta %articular %.gi'a ASP.NET 'o.
Figura 11 $n usuario no puede de6ar en blanco Precio por unidad (Clic en la 'oto
para una i#agen #=s grande)
Hasta ahora1 he$os 3isto c!$o utili0ar el Fo0$pdating caso "e 6ue el 9ridVie0 %ara
$o"i5icar $e"ia'te %rogra$aci!' los 3alores "el %ar.$etro asig'a"o a
la $pdatePara#eters colecci!' "el 4b6ect2ata(ource 1 asB co$o la 5or$a "e ca'celar
el %roceso "e actuali0aci!' co$%leto. Estos co'ce%tos lle3a' a
la 2etailsVie0 ) For#Vie0 ) los co'troles se a%lica' ta$+i-' a i'sertar ) +orrar.
Estas tareas ta$+i-' se %ue"e hacer e' el 4b6ect2ata(ource 'i3el a tra3-s "e
co'trola"ores "e e3e'tos %ara suinsercin 1 actuali%acin ) eli#inacin de los
aco'teci$ie'tos. Estos e3e'tos se "ese'ca"e'a' a'tes "e 6ue el $-to"o asocia"o "el
o+#eto "e 5o'"o es i'3oca"o1 ) %ro%orcio'a' u'a o%ortu'i"a" "e <lti$a o%ortu'i"a" %ara
$o"i5icar la colecci!' %ar.$etros "e e'tra"a o ca'celar la o%eraci!' %or co$%leto. 9os
co'trola"ores "e e3e'tos %ara estos tres e3e'tos se les %asa u' o+#eto "e
ti%o G+#ectDataSourceMetho"E3e'tArgs 6ue tie'e "os %ro%ie"a"es "e i'ter-s(
Ca'celar 1 el cual1 si se esta+lece e' !erdadero 1 ca'cela la o%eraci!' 6ue se reali0a
&'%utPara$eters 1 6ue es la colecci!' "e InsertPara#eters 1 $pdatePara#eters 1
o 2eletePara#eters 1 "e%e'"ie'"o "e si el co'trola"or "e e3e'tos es %ara
la insercin 1 actuali%acin o eli#inacin de e3e'tos
Para ilustrar el tra+a#o co' los 3alores "e los %ar.$etros e' el 4b6ect2ata(ource 'i3el1
3a$os a i'cluir u' 2etailsVie0e' la %.gi'a 6ue %er$ite a los usuarios a=a"ir u' 'ue3o
%ro"ucto. Este 2etailsVie0 se utili0a %ara %ro%orcio'ar u'a i'ter5a0 %ara a=a"ir u' 'ue3o
%ro"ucto a la +ase "e "atos r.%i"a$e'te. Para $a'te'er u'a i'ter5a0 "e usuario cua'"o se
a=a"e u' 'ue3o %ro"ucto1 3a$os a %er$itir 6ue el usuario i'tro"u0ca los 3alores "e
la Product/a#e )Precio$nidad <'icos ca$%os. De $a'era %re"eter$i'a"a1 los 3alores
6ue 'o se su$i'istra' e' la i'ter5a0 "e la i'serci!' "e la 2etailsVie0 se esta+lece e'
u' /$** el 3alor +ase "e "atos. Si' e$+argo1 %o"e$os utili0ar la insercin de caso "e
la 4b6ect2ata(ource %ara i')ectar 3alores %or "e5ecto1 co$o 3ere$os e' +re3e.
Paso 1: proporcionan una inter'a% para a5adir
nue!os productos
Arrastre u' 2etailsVie0 "el cua"ro "e herra$ie'tas hasta el Dise=a"or "e e'ci$a "e
la 9ridVie0 1 retire su altura )anc"o de las %ro%ie"a"es1 ) se u'e' a
la 4b6ect2ata(ource 6ue )a est. %rese'te e' la %.gi'a. Esto agregar.
u'aDoundField o C"ecJDoxField %ara ca"a u'o "e los ca$%os "e los %ro"uctos. Por6ue
6uere$os utili0ar este2etailsVie0 %ara agregar 'ue3os %ro"uctos1 se "e+e checar
la Aabilitar insercin o%ci!' "e la eti6ueta i'telige'te.Si' e$+argo1 'o ha) tal o%ci!'1 )a
6ue la insercin () el $-to"o "e la 4b6ect2ata(ource 'o est. asig'a"o a u' $-to"o e'
el ProductsD** clase1 recuer"o 6ue 'os %la'tea$os esta asig'aci!' a (/inguno) al
co'5igurar la 5ue'te "e "atos 83er Eigura ,:.
Para co'5igurar el 4b6ect2ata(ource 1 seleccio'e el 2ata Con'igurar origen de e'lace
"es"e su eti6ueta i'telige'te1 6ue %o'e e' $archa el asiste'te. 9a %ri$era %a'talla le
%er$ite ca$+iar el o+#eto su+)ace'te a 6ue la4b6ect2ata(ource est. o+liga"o1 "e#arlo
e' ProductsD** . 9a siguie'te %a'talla $uestra las asig'acio'es "e los $-to"os "e
la 4b6ect2ata(ource a los "el o+#eto su+)ace'te. A %esar "e 6ue e%resa$e'te se i'"ica
6ue la insercin () ) 2elete () $-to"os 'o "e+e' asig'arse a cual6uiera "e los $-to"os1
si 3as a la I/(7FT.F ) D4FF.F las %esta=as1 3er.s 6ue u'a a%licaci!' est. ahB. Esto se
"e+e a la .ddProduct ) 2eleteProduct $-to"os "e la ProductsD** utili0ar
el2ata4b6ect&et"od.ttribute atri+uto %ara i'"icar 6ue so' los $-to"os %or "e5ecto
%ara insertar () ) 2elete () 1 res%ecti3a$e'te. Por lo ta'to1
el 4b6ect2ata(ource asiste'te seleccio'a las $is$as ca"a 3e0 6ue se e#ecuta el
asiste'te1 a $e'os 6ue ha)a alg<' otro 3alor 6ue se es%eci5ica e%lBcita$e'te.
Salir "e la insercin () $-to"o 6ue a%u'ta a la .ddProduct $-to"o1 %ero u'a 3e0 $.s
esta+lecer la lista "es%lega+le "e la 27*7T7 5icha %ara (/inguna) .
Figura 13 7stablecer en la pesta5a Insertar de la lista desplegable el #?todo
.ddProduct (Clic en la 'oto para una i#agen #=s grande)
Figura 1- .6uste la leng\eta de 27*7T7 de la lista desplegable en
(/inguno) (Clic en la 'oto para una i#agen #=s grande)
Des%u-s "e ha+er reali0a"o estos ca$+ios1 la si'tais "eclarati3a "e
la 4b6ect2ata(ource se a$%liar. %ara i'cluir u'InsertPara#eters colecci!'1 co$o se
$uestra a6uB(
<Asp: ObjectDataSource ID = "ObjectDataSource1" runat = "server"
SelectMethod = "GetProducts" TypeName = "ProductsBLL"
UpdateMethod = "UpdateProduct" OnUpdating = "ObjectDataSource1_Updating"
InsertMethod = "AddProduct"
OldValuesParameterFormatString = "original_ {0}">
<UpdateParameters>
<asp:Parameter Name="productName" tipo="String" />
<asp:Parameter Name="unitPrice" Type="Decimal" />
<asp:Parameter Name="productID" Type="Int32" />
</ UpdateParameters>
<InsertParameters>
<asp:Parameter Name="productName" tipo="String" />
<asp:Parameter Name="supplierID" Type="Int32" />
<asp:Parameter Name="categoryID" Type="Int32" />
<asp:Parameter Name="quantityPerUnit" tipo="String" />
<asp:Parameter Name="unitPrice" Type="Decimal" />
<asp:Parameter Name="unitsInStock" Type="Int16" />
<asp:Parameter Name="unitsOnOrder" Type="Int16" />
<asp:Parameter Name="reorderLevel" Type="Int16" />
<asp:Parameter Name="discontinued" Type="Boolean" />
</ InsertParameters>
</ Asp: ObjectDataSource>
7ol3er a e#ecutar el asiste'te 3uel3e a a=a"ir
la 4ldValuesPara#eterFor#at(tring %ro%ie"a". To$e u' $o$e'to %ara aclarar esta
%ro%ie"a" o +ie' esta+lecer el 3alor %or "e5ecto 8 S,T : o eli$i'arlo %or co$%leto "e la
si'tais "eclarati3a.
Co' el 4b6ect2ata(ource 6ue %ro%orcio'a ca%aci"a"es "e i'serci!'1 el 2etailsVie0 tag
Ms i'telige'te ahora i'cluir. laAabilitar insercin casilla "e 3eri5icaci!'T 3ol3er al
Dise=a"or ) $ar6ue esta o%ci!'. A co'ti'uaci!'1 recortar el2etailsVie0 1 %or lo 6ue s!lo
tie'e "os DoundField sI Product/a#e ) Precio$nidad ) la Co##andField . E' este
%u'to1 la si'tais "eclarati3a "e la 2etailsVie0 "e+e te'er el siguie'te as%ecto(
<Asp: DetailsView ID = "DetailsView1" runat = "server" AutoGenerateRows = "false"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1">
<Fields>
<Asp: BoundField DataField = "ProductName"
HeaderText = "ProductName" SortExpression = "ProductName" />
<Asp: BoundField DataField = "UnitPrice" HeaderText = "UnitPrice"
SortExpression = "UnitPrice" />
<asp:CommandField ShowInsertButton="True" />
</ Campos>
</ Asp: DetailsView>
9a 5igura 16 $uestra esta %.gi'a cua'"o se 3e a tra3-s "e u' 'a3ega"or e' este
$o$e'to. Co$o %ue"e 3er1 el2etailsVie0 $uestra el 'o$+re ) el %recio "el %ri$er
%ro"ucto 8Chai:. 9o 6ue 6uere$os1 si' e$+argo1 es u'a i'ter5a0 "e i'serci!' 6ue
%ro%orcio'a u' $e"io %ara 6ue el usuario agregue u' 'ue3o %ro"ucto a la +ase "e "atos
r.%i"a$e'te.
Figura 18 7l 2etailsVie0 est= representada> en #odo de slo lectura (Clic en la
'oto para una i#agen #=s grande)
Co' el 5i' "e $ostrar el 2etailsVie0 e' el $o"o "e i'sertar1 "e+e$os esta+lecer
el 2e'ault&ode %ro%ie"a" "eInsercin . Esto hace 6ue el 2etailsVie0 e' $o"o "e
i'serci!'1 cua'"o 3isit! %or %ri$era 3e01 ) lo $a'tie'e allB "es%u-s "e i'sertar u' 'ue3o
registro. Co$o $uestra la Eigura 1Z se $uestra1 co$o u' 2etailsVie0 %ro%orcio'a u'a
i'ter5a0 r.%i"a %ara agregar u' 'ue3o registro.
Figura 1: 7l 2etailsVie0 proporciona una inter'a% para a5adir un nue!o
producto r=pida#ente (Clic en la 'oto para una i#agen #=s grande)
Cua'"o el usuario i'tro"uce el 'o$+re "el %ro"ucto ) el %recio1 co$o HEl agua Ac$eH )
H11KKH1 co$o e' la 5igura 1Z ) haga clic en Insertar 1 so+re3ie'e u'a "e3oluci!' "e "atos
) el 5lu#o "e tra+a#o co$ie'0a la i'serci!'1 6ue cul$i'a e' u' registro "e 'ue3os %ro"uctos
se a=a"e' a la +ase "e "atos. El 2etailsVie0 $a'tie'e su i'ter5a0 "e i'serci!' )
el9ridVie0 es auto$.tica$e'te re+ote a su orige' "e "atos co' el 5i' "e i'cluir el 'ue3o
%ro"ucto1 co$o se $uestra e' la Eigura 1P.
Figura 1; 7l agua .c#e producto "a sido a5adido a la base de datos
Mie'tras 6ue el 9ridVie0 e' la Eigura 1P 'o lo "e$uestra1 los ca$%os "e los %ro"uctos
6ue carece' "e
la 2etailsVie0i'ter5a0 CategoryI2 1 IdPro!eedor 1 CantidadPor$nidad 1 ) asB
sucesi3a$e'teIse les asig'a /$** los 3alores "e +ase "e "atos. Esto se %ue"e 3er
$e"ia'te la reali0aci!' "e los siguie'tes %asos(
1. 7a)a al E%lora"or "e ser3i"ores e' 7isual Stu"io.
2. A$%liar el nort"0nd#d' 'o"o "e +ase "e "atos.
,. Haga clic "erecho e' los productos de 'o"o "e la ta+la "e +ase "e "atos.
/. Seleccio'e &ostrar datos de tabla .
Este %roce"i$ie'to $ostrar. u'a lista "e to"os los registros e' los productos
de $esa. Co$o $uestra la Eigura 1K se $uestra1 to"as las colu$'as "e 'uestro %ro"ucto1
otros 'ue3os 6ue ProductI2 1 Product/a#e ) Precio$nidad ha'/$** 3alores.
Figura 1< *os ca#pos de los productos Bue no est=n pre!istas en el 2etailsVie0
se les asignan !alores /$**(Clic en la 'oto para una i#agen #=s grande)
Po"e$os 6uiere "ar u' 3alor %or "e5ecto 6ue 'o sea /$** %ara u'o o $.s "e estos 3alores
"e la colu$'a1 )a sea %or6ue /$** 'o es la $e#or o%ci!' %or "e5ecto o %or la colu$'a "e
la +ase "e "atos e' sB 'o %er$ite /$** s. Para lograr esto1 se %ue"e esta+lecer $e"ia'te
%rogra$aci!' los 3alores "e los %ar.$etros "e la InputPara#eterscolecci!' "e
la 2etailsVie0 . Esta asig'aci!' se %ue"e hacer )a sea e' el co'trola"or "e e3e'tos %ara
el Ite#Insertingcaso "e 6ue el 2etailsVie0 o la Insercin caso
"e 4b6ect2ata(ource . De+i"o a 6ue )a he$os 3isto e' el uso "e los e3e'tos "e %reI
gra"o ) %ostIgra"o e' el 'i3el "e co'trol "e "atos "e la 4e+1 3a$os a e%lorar esta 3e0
usa'"o el4b6ect2ata(ource e3e'tos Ms.
Paso 3: .signacin de !alores a los par=#etros de
CategoryI2 y IdPro!eedor
Para este tutorial1 3a$os a i$agi'ar 6ue %ara 'uestra a%licaci!'1 al a=a"ir u' 'ue3o
%ro"ucto a tra3-s "e esta i'ter5a01 se "e+e asig'ar u' CategoryI2 ) IdPro!eedor 3alor
"e 1 . Co$o se $e'cio'! a'terior$e'te1 el 4b6ect2ata(ourcetie'e u' %ar "e e3e'tos "e
%reIgra"o ) %ostIgra"o 6ue el 5uego "ura'te el %roceso "e $o"i5icaci!' "e "atos. Cua'"o
su insercin () es lla$a"o1 el 4b6ect2ata(ource %ri$ero ele3a su insercin e3e'to1
lla$a al $-to"o e' 6ue suinsercin () ha si"o el $-to"o asig'a"o1 )1 5i'al$e'te1 %la'tea
la Insertado e3e'to. 9a insercin de co'trola"or "e e3e'tos 'os "a u'a <lti$a
o%ortu'i"a" %ara $o"i5icar los %ar.$etros "e e'tra"a o ca'celar la o%eraci!' %or
co$%leto.
/ota E' u'a a%licaci!' real1 es %ro+a+le 6ue "esee )a sea %ara %er$itir a los usuarios
es%eci5icar la categorBa ) el %ro3ee"or o %ara recoger este 3alor %ara ellos1 so+re la +ase
"e ciertos criterios o la l!gica "e 'egocio 8e' 3e0 "e seguir ciega$e'te la selecci!' "e u'
&D "e uno :. E' cual6uier caso1 el e#e$%lo $uestra c!$o esta+lecer $e"ia'te
%rogra$aci!' el 3alor "e u' %ar.$etro "e e'tra"a "el e3e'to "e %reIgra"o "e
la 4b6ect2ata(ource .
To$e u' $o$e'to %ara crear u' co'trola"or "e e3e'tos %ara la Insercin caso
"e 4b6ect2ata(ource . Te'ga e' cue'ta 6ue los %ar.$etros "el co'trola"or "e e3e'tos
"e la segu'"a e'tra"a es u' o+#eto "e ti%o4b6ect2ata(ource&et"od7!ent.rgs 1 6ue
tie'e u'a %ro%ie"a" %ara acce"er a la colecci!' "e %ar.$etros 8InputPara#eters : ) u'a
%ro%ie"a" %ara ca'celar la o%eraci!' 8 Cancelar :.
protected void ObjectDataSource1_Inserting
(Object sender, ObjectDataSourceMethodEventArgs e)
{
}
E' este %u'to1 el InputPara#eters %ro%ie"a" co'tie'e el InsertPara#eters colecci!'
"e la 4b6ect2ata(ource co' los 3alores asig'a"os "es"e el 2etailsVie0 . Para ca$+iar
el 3alor "e u'o "e estos %ar.$etros1 s!lo tie'e 6ue utili0areInputPara#eters
M@ paramame @N V !alor . Por lo ta'to1 %ara esta+lecer el CategoryI2 ) IdPro!eedor a
los 3alores "e 1 1 a#ustar la insercin de co'trola"or "e e3e'tos %ara el siguie'te as%ecto(
protected void ObjectDataSource1_Inserting
(Object sender, ObjectDataSourceMethodEventArgs e)
{
e.InputParameters ["CategoryID"] = 1;
e.InputParameters ["IdProveedor"] = 1;
}
Esta 3e01 al agregar u' %ro"ucto1 tales co$o 'ue3os Ac$e So"aI
el CategoryI2 ) IdPro!eedor colu$'as "el 'ue3o %ro"ucto se esta+lece' e' un 83-ase
5igura 20:.
Figura +, /ue!os productos ya tienen sus !alores y CategoryI2 IdPro!eedor
establece en 1 (Clic en la 'oto para una i#agen #=s grande)
Conclusin
Dura'te la e"ici!'1 i'serci!' ) eli$i'aci!' "e %rocesos1 ta'to e' el co'trol "e los "atos ) la
*e+ 4b6ect2ata(ource%roce"er a tra3-s "e u'a serie "e e3e'tos "e %reIgra"o ) %ost
gra"o. E' este tutorial1 se ea$i'aro' los e3e'tos %reI'i3el ) 3io c!$o utili0ar estas %ara
%erso'ali0ar los %ar.$etros "e e'tra"a o ca'celar la o%eraci!' "e $o"i5icaci!' "e "atos
e' co'#u'to1 ta'to "es"e el co'trol "e "atos ) la *e+ 4b6ect2ata(ource e3e'tos Ms. E' el
siguie'te tutorial1 3ere$os c!$o crear ) utili0ar co'trola"ores "e e3e'tos %ara los e3e'tos
"e 'i3el %ostI.
Tutorial 1;: &ane6o de D**K*e!el y
excepciones 2.*K*e!el en una p=gina .(P/7T

Scott Mitchell
0, 200Z
Fesu#en: Este es el Visual C # tutorial. 8 Ca$+ie al tutorial "e 7isual ;asic .: E' este
tutorial1 3a$os a 3er c!$o se $uestra u' $e'sa#e a$istoso1 error i'5or$ati3o 6ue u'a
ece%ci!' se %ro"uce' "ura'te u'a i'serci!'1 actuali0aci!' o eli$i'aci!' "e u' co'trol "e
*e+ ASP.NET "e "atos.
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial 1; (Visual C #)
&'tro"ucci!'
Paso 1( Creaci!' "e u' Dri"7ie4 e"ita+le "e Pro"uctos
Paso 2( Ma'e#o "e Dracia DA9I9e3el ece%cio'es
Paso ,( Ma'e#o "e Dracia ;99I9e3el ece%cio'es
Co'clusi!'
Introduccin
Tra+a#ar co' "atos "e u'a a%licaci!' 4e+ ASP.NET usa'"o u'a ar6uitectura "e a%licacio'es
%or 'i3eles i$%lica los siguie'tes tres %asos ge'erales(
1. Deter$i'ar 6u- $-to"o "e la ca%a "e l!gica "e 'egocio "e+e ser i'3oca"o ) lo
3alores "e los %ar.$etros a %asar. 9os 3alores "e los %ar.$etros %ue"e' ser
co"i5ica"as "e 5or$a rBgi"a1 %rogra$aci!' asig'a"a1 o "e los i'su$os i'tro"uci"os
%or el usuario.
2. &'3ocar el $-to"o.
,. Procesar los resulta"os. Al lla$ar a u' $-to"o "e %lo$o e' sa'gre 6ue "e3uel3e
"atos1 esto %ue"e i$%licar la u'i!' "e "atos %ara u' co'trol 4e+ "e "atos. Para los
$-to"os "e %lo$o e' sa'gre 6ue $o"i5ica' los "atos1 esto %ue"e i'cluir la
reali0aci!' "e algu'a acci!' so+re la +ase "e u' 3alor "e retor'o o "e gracia "e
$a'e#ar cual6uier ece%ci!' 6ue se le3a't! e' el %aso 2.
Co$o 3i$os e' el Tutorial 1Z( Ea$e' "e los aco'teci$ie'tos relacio'a"os co' la
i'serci!'1 actuali0aci!' ) eli$i'aci!' 1 ta'to e' el 4b6ect2ata(ource ) los co'troles *e+
"e "atos %ro%orcio'a' %u'tos "e ete'si+ili"a" %ara los %asos 1 ) ,. El 9ridVie0 1 %or
e#e$%lo1 "is%ara sus Fo0$pdating caso a'tes "e asig'ar los 3alores "e ca$%o %ara
su4b6ect2ata(ource Ms $pdatePara#eters colecci!'T su Fo0$pdated e3e'to se
%ro"uce "es%u-s "e 6ue el4b6ect2ata(ource ha co$%leta"o la o%eraci!'.
La he$os ea$i'a"o los hechos 6ue se "ese'ca"e'a' "ura'te el %aso 1 ) he 3isto c!$o
se %ue"e' utili0ar %ara %erso'ali0ar los %ar.$etros "e e'tra"a o ca'celar la o%eraci!'. E'
este tutorial1 3a$os a "irigir 'uestra ate'ci!' a los e3e'tos 6ue se "ese'ca"e'a' "es%u-s
"e la o%eraci!' se ha co$%leta"o. Co' estos co'trola"ores "e e3e'tos "e 'i3el %ostI
%o"e$os1 e'tre otras cosas1 "eter$i'ar si se %ro"u#o u'a ece%ci!' "ura'te la o%eraci!' )
$a'e#ar co' gracia1 $ostra'"o u' $e'sa#e a$istoso1 error i'5or$ati3o e' la %a'talla e'
lugar "e %or "e5ecto la %.gi'a "e ece%ci!' est.'"ar "e ASP.NET.
Para ilustrar el tra+a#o co' estos e3e'tos a 'i3el "e %ostI1 3a$os a crear u'a %.gi'a 6ue
$uestra los %ro"uctos e' u' e"ita+le 9ridVie0 . Cua'"o se actuali0a u' %ro"ucto1 si se
la'0a u'a ece%ci!' a 'uestra %.gi'a "e ASP.NET $ostrar. u' $e'sa#e corto %or e'ci$a
"e la 9ridVie0 e%lica'"o 6ue ha ocurri"o u' %ro+le$a. 7a$os a e$%e0arC
Paso 1: Creacin de un 9ridVie0 editable de
Productos
E' el tutorial a'terior1 he$os crea"o u' e"ita+le 9ridVie0 co' s!lo "os
ca$%os( Product/a#e ) Precio$nidad . Esto re6uiere la creaci!' "e u'a so+recarga
a"icio'al %ara el ProductsD** clase $pdateProduct $-to"o1 6ue s!lo se ace%ta' tres
%ar.$etros "e e'tra"a 8el 'o$+re "el %ro"ucto1 %recio u'itario1 ) la &D: e' lugar "e u'
%ar.$etro %ara ca"a ca$%o "el %ro"ucto. Para este tutorial1 3a$os a %racticar esta
t-c'ica u'a 3e0 $.s1 la creaci!' "e u' e"ita+le9ridVie0 6ue $uestra el 'o$+re "el
%ro"ucto1 ca'ti"a" %or u'i"a"1 %recio u'itario1 ) las u'i"a"es e' stoc?1 %ero s!lo %er$ite
6ue el 'o$+re1 %recio u'itario1 ) las u'i"a"es e' stoc? %ara ser e"ita"o.
Para a"a%tarse a este esce'ario1 3a$os a 'ecesitar otra so+recarga
"el $pdateProduct $-to"o1 6ue ace%ta cuatro %ar.$etros( el 'o$+re "el %ro"ucto1
%recio u'itario1 u'i"a"es e' stoc?1 ) &D. Agregue el $-to"o siguie'te a
laProductsD** clase(
[System.ComponentModel.DataObjectMethodAttribute (
System.ComponentModel.DataObjectMethodType.Update, false)]
pblica UpdateProduct bool (cadena productName, decimal? precioUnitario, corto?
UnitsInStock,
int ProductID)
{
Northwind.ProductsDataTable productos =
Adapter.GetProductByProductID (ProductID);
if (products.Count == 0)
/ / Ningn registro coincidente, devuelva falso
return false;
Northwind.ProductsRow producto = productos [0];
product.ProductName = productName;
if (precioUnitario == null) product.SetUnitPriceNull ();
ms product.UnitPrice = unitPrice.Value;
if (UnitsInStock == null) product.SetUnitsInStockNull ();
ms product.UnitsInStock = unitsInStock.Value;
/ / Actualizar el registro del producto
int = rowsAffected Adapter.Update (producto);
/ / Devuelve verdadero si, precisamente, una fila se ha actualizado, si no falsa
volver rowsAffected == 1;
}
Co' este $-to"o co$%leto1 esta$os listos %ara crear la %.gi'a ASP.NET 6ue %er$ite e"itar
estos cuatro ca$%os es%ecB5icos "el %ro"ucto. A+ra la %.gi'a ErrorHa'"li'g.as% e' la
car%eta E"it&'sertDelete ) a=a"ir u' 9ridVie0 a la %.gi'a a tra3-s "el "ise=o. G+ligar a
la 9ridVie0 a u' 'ue3o 4b6ect2ata(ource 1 la cartogra5Ba "e la (eleccin ()$-to"o
%ara la ProductsD** clase 9etProducts () ) el $-to"o $pdate () $-to"o %ara
la $pdateProduct so+recarga aca+a "e crear.
Figura 1 $tilice la sobrecarga del #?todo $pdateProduct Bue acepta cuatro
par=#etros de entrada
Esto crear. u' 4b6ect2ata(ource co' u' $pdatePara#eters colecci!' co' cuatro
%ar.$etros ) u' 9ridVie0 co' u' ca$%o %ara ca"a u'o "e los ca$%os "e
%ro"uctos. El 4b6ect2ata(ource $arca"o Ms "eclarati3a asig'a
el4ldValuesPara#eterFor#at(tring +ie'es cu)o 3alor originalZ S,T 1 lo 6ue %ro3ocar.
u'a ece%ci!'1 )a 6ue 'uestras clases ;99 'o es%era' u' %ar.$etro "e e'tra"a
"e'o$i'a"o originalZproductI2 %ara %asar %ulg No se ol3i"e "e 6uitar esta o%ci!' "el
to"o "e la si'tais "eclarati3a 8o se esta+lece e' el 3alor %re"eter$i'a"o1 S,T :.
A co'ti'uaci!'1 recortar el 9ridVie0 %ara i'cluir s!lo
el Product/a#e 1 CantidadPor$nidad 1 Precio$nidad )$nitsIn(tocJ DoundField s. T
a$+i-' se sie'te' e' li+erta" "e a%licar cual6uier 5or$ato a 'i3el "e ca$%o 6ue co'si"ere
'ecesarias 8tales co$o el ca$+io "el AeaderText %ro%ie"a"es:.
E' el tutorial a'terior1 3i$os c!$o "ar 5or$ato a la Precio$nidad DoundField co$o u'a
$o'e"a1 ta'to e' $o"o "e s!lo lectura ) el $o"o "e e"ici!'. 7a$os a hacer lo $is$o
a6uB. Ha) 6ue recor"ar 6ue esta o%ci!' re6uiere
laDoundField Ms 2ataFor#at(tring %ro%ie"a" S,: cT 1
su At#l7ncode %ro%ie"a" 'alsa 1 ) su .pplyFor#atIn7dit&ode"e !erdad 1 co$o se
$uestra e' la Eigura 2.
Figura + Con'igurar el DoundField Precio$nidad a #ostrar co#o una #oneda
Eor$ateo "e la Precio$nidad co$o $o'e"a e' la i'ter5a0 "e e"ici!' es 'ecesario crear
u' co'trola"or "e e3e'tos %ara el 9ridVie0 Ms Fo0$pdating caso 6ue se a'ali0a la
$o'e"a co' 5or$ato "e ca"e'a e' u' deci#al 3alor.Recor"e$os 6ue
el Fo0$pdating co'trola"or "e e3e'tos "el <lti$o tutorial ta$+i-' se co'trola %ara
asegurar 6ue el usuario ha %ro%orcio'a"o u' Precio$nidad 3alor. Si' e$+argo1 %ara este
tutorial1 3a$os a %er$itir 6ue el usuario o$ite el %recio.
GridView1_RowUpdating protected void (object sender, GridViewUpdateEventArgs e)
{
if (e.NewValues ["UnitPrice"]! = null)
e.NewValues ["UnitPrice"]
= Decimal.Parse (e.NewValues ["UnitPrice"]. ToString (),
System.Globalization.NumberStyles.Currency);
}
Nuestro 9ridVie0 i'clu)e u' CantidadPor$nidad DoundField 1 %ero
esto DoundField "e+e ser %ara 5i'es "e %rese'taci!' ) 'o "e+e ser e"ita+le %or el
usuario. Para arreglar esto1 +asta co' esta+lecer la DoundField s
M Fead4nly%ro%ie"a" real .
Figura 1 Aacer Bue el DoundField CantidadPor$nidad de slo lectura
Por <lti$o1 co$%rue+e el Aabilitar edicin casilla "e 3eri5icaci!' "e la 9ridVie0 tag Ms
i'telige'te. Des%u-s "e co$%letar estos %asos "e "ise=o "e la %.gi'a ErrorHa'"li'g.as%
"e+e ser si$ilar a la Eigura /.
Figura 3 )uitar todos #enos el DoundFields necesario y co#probar la casilla de
!eri'icacin Aabilitar edicin
E' este %u'to1 te'e$os u'a lista "e to"os los %ro"uctos
H Product/a#e 1 CantidadPor$nidad 1 Precio$nidad )$nitsIn(tocJ ca$%os1 si'
e$+argo1 s!lo el Product/a#e 1 Precio$nidad ) $nitsIn(tocJ ca$%os se %ue"e'
e"itar.
Figura - *os usuarios pueden a"ora '=cil#ente editar los no#bres de productos>
precios> y los ca#pos de las unidades en stocJ
Paso +: &ane6o de 9racia 2.*K*e!el excepciones
Si +ie' 'uestro e"ita+le 9ridVie0 5u'cio'a "e $ara3illa cua'"o el usuario i'tro"u0ca los
3alores legales %ara e"itar el 'o$+re "el %ro"ucto1 el %recio1 ) las u'i"a"es e' stoc?1
e'tra'"o e' 3alores resulta ilegal e' u'a ece%ci!'. Por e#e$%lo1 o$itie'"o
el Product/a#e 3alor hace u' NoNullAllo4e"Ece%tio' ser la'0a"o "es"e
el Product/a#e%ro%ie"a" e' el ProdcutsFo0 clase tie'e su .llo02D/ull %ro%ie"a"
esta+leci"a e' 'also 1 ) si la +ase "e "atos est. i'acti3o1 u' (Bl7xception ser. la'0a"a
%or el Ta+leA"a%ter al i'te'tar co'ectarse a la +ase "e "atos . Si' to$ar 'i'gu'a $e"i"a1
estas ece%cio'es a la +ur+u#a "e la ca%a "e acceso a "atos a la ca%a "e l!gica "e 'egocio1
) luego a la %.gi'a "e ASP.NET )1 5i'al$e'te1 el tie$%o "e e#ecuci!' "e ASP.NET.
De%e'"ie'"o "e c!$o la a%licaci!' *e+ se co'5igura ) si uste" est. 3isita'"o la a%licaci!'
"e local"ost 1 u'a ece%ci!' 'o co'trola"a %ue"e resultar e' u' ser3i"or ge'-rico "e
error "e %.gi'a1 u' i'5or$e "e error "etalla"os o u'a %.gi'a 4e+ 5.cil "e
usar. 7er A%licaci!' *e+ Ma'e#o "e errores e' ASP.NET ) el ele$e'to custo$Errors %ara
o+te'er $.s i'5or$aci!' acerca "e c!$o el tie$%o "e e#ecuci!' ASP.NET res%o'"e a u'a
ece%ci!' 'o ca%tura"a.
9a 5igura 6 $uestra la %a'talla e'co'tra$os al i'te'tar actuali0ar u' %ro"ucto si'
es%eci5icar el Product/a#e 3alor. Este es el i'5or$e "etalla"o "e error %or "e5ecto
a%arece cua'"o 3ie'e a tra3-s "e local"ost .
Figura 8 4#itiendo el no#bre del producto se #ostrar= detalles de la
excepcin
Au'6ue los "etalles tales ece%cio'es so' <tiles cua'"o se %rue+a u'a a%licaci!'1 la
%rese'taci!' "e u' usuario 5i'al co' u'a %a'talla e' la cara "e u'a ece%ci!' 'o es la
i"eal. >' usuario 5i'al %ro+a+le$e'te 'o sa+e lo 6ue es u'/o/ull.llo0ed7xception es o
%or 6u- causa 5ue. >' $e#or e'5o6ue es el "e %rese'tar al usuario co' u' $e'sa#e $.s
5.cil "e e%licar 6ue ha+Ba %ro+le$as al i'te'tar actuali0ar el %ro"ucto.
Si se %ro"uce u'a ece%ci!' cua'"o se reali0a la o%eraci!'1 los e3e'tos "e 'i3el %ostIta'to
e' el 4b6ect2ata(ource ) el co'trol 4e+ "e "atos %ro%orcio'a' u' $e"io %ara "etectar )
a'ular la ece%ci!' "e +ur+u#as hasta el tie$%o "e e#ecuci!' "e ASP.NET. Para 'uestro
e#e$%lo1 3a$os a crear u' co'trola"or "e e3e'tos %ara
el 9ridVie0 Ms Fo0$pdatede3e'to 6ue "eter$i'a si u'a ece%ci!' se ha "is%ara"o )1 "e
ser asB1 se $uestra' los "etalles "e ece%ci!' e' u'aetiBueta "e co'trol *e+.
E$%e0ar %or agregar u'a etiBueta a la %.gi'a "e ASP.NET1 el esta+leci$ie'to "e su I2 "e
%ro%ie"a" "e7xception2etails ) li$%iar su texto la %ro%ie"a". Co' el 5i' "e lla$ar la
ate'ci!' "el usuario a este $e'sa#e1 esta+le0ca su CssClass %ro%ie"a" "e ad!ertencia 1
6ue es u'a clase CSS 6ue agrega$os a la stylescss archi3o e' el tutorial a'terior. Ha)
6ue recor"ar 6ue esta clase CSS hace 6ue la etiBueta "e teto Ms 6ue se $uestra' e' color
ro#o1 cursi3a1 'egrita1 ti%o "e letra etra gra'"e.
Figura : .gregue un control Web *abel a la p=gina
Co$o 6uere$os 6ue esta etiBueta "e co'trol *e+ sea 3isi+le s!lo i'$e"iata$e'te
"es%u-s "e u'a ece%ci!' se ha %ro"uci"o1 esta+le0ca su Visible %ro%ie"a" a 'also e'
el PageZ*oad co'trola"or "e e3e'tos(
protected void Page_Load (object sender, EventArgs e)
{
ExceptionDetails.Visible = false;
}
Co' este c!"igo1 so+re la 3isita "e la %ri$era ) "e3olucio'es "e "atos su+siguie'tes "e
la 7xception2etails "e co'trol te'"r. su Visible %ro%ie"a" esta+leci"a e' 'also . E' la
cara "e u' DA9I'i3el o ;99 ece%ci!' "e 'i3el1 6ue %o"e$os "etectar e'
el 9ridVie0 Ms Fo0$pdated co'trola"or "e e3e'tos1 3a$os a co'5igurar
el 7xception2etails co'trolVisible %ro%ie"a" e' true. Des"e *e+ co'trola"ores "e
e3e'tos "e co'trol se %ro"uce' "es%u-s "e 6ue el PageZ*oadco'trola"or "e e3e'tos e' el
ciclo "e 3i"a "e la %.gi'a1 la etiBueta se $ostrar.. Si' e$+argo1 e' la "e3oluci!' "e "atos
siguie'te1 el PageZ*oad co'trola"or "e e3e'tos 3ol3er. el Visible %ro%ie"a" a 'also 1
ocult.'"olo "e la 3ista "e 'ue3o.
/ota: Co$o alter'ati3a1 se %o"rBa eli$i'ar la 'ecesi"a" "e esta+lecer
el 7xception2etails co'trol !isible"e %ro%ie"a" e' PageZ*oad $e"ia'te la asig'aci!'
"e su !isible "e %ro%ie"a" 'alsos e' la si'tais "eclarati3a ) el "es$a'tela$ie'to "e su
esta"o "e 3ista 8a#uste "e su 7nableVie0(tate %ro%ie"a" a 'also:. 7a$os a utili0ar este
e'5o6ue alter'ati3o e' u' tutorial 5uturo.
Co' la etiBueta "e co'trol a"icio'al1 'uestro siguie'te %aso es crear el co'trola"or "e
e3e'tos "el 9ridVie0 MsFo0$pdated e3e'to. Seleccio'e el 9ridVie0 e' el "ise=o1 ir a la
3e'ta'a Pro%ie"a"es1 ) haga clic e' el ico'o "e ra)o1 u'a lista "e los 9ridVie0 e3e'tos
Ms. La "e+erBa ha+er )a u'a e'tra"a allB %ara el 9ridVie0 Ms Fo0$pdating caso1 co$o
he$os crea"o u' co'trola"or "e e3e'tos %ara este e3e'to a'terior$e'te e' este
tutorial. Crear u' co'trola"or "e e3e'tos %ara el Fo0$pdated e3e'to asB.
Figura ; Cree un controlador de e!entos para el e!ento Fo0$pdated del
9ridVie0
/ota: Ta$+i-' %ue"e crear el co'trola"or "e e3e'tos a tra3-s "e la lista "es%lega+le e' la
%arte su%erior "el archi3o "e clase "e c!"igo su+)ace'te. Seleccio'e el 9ridVie0 "e la
lista "es%lega+le a la i06uier"a ) la Fo0$pdated caso "e la "e la "erecha.
9a creaci!' "e este co'trola"or "e e3e'tos se agregue el siguie'te c!"igo e' el c!"igo
su+)ace'te "e la %.gi'a ASP.NET "e clase(
protected void GridView1_RowUpdated (object sender, GridViewUpdatedEventArgs e)
{
}
Par.$etro "e este co'trola"or "e e3e'tos "e la segu'"a e'tra"a es u' o+#eto "e
ti%o Dri"7ie4>%"ate"E3e'tArgs 1 6ue tie'e tres %ro%ie"a"es "e i'ter-s %ara el $a'e#o "e
ece%cio'es(
7xcepcin Iu'a re5ere'cia a la ece%ci!' 6ue se %ro"uce1 si 'o es la ece%ci!' ha
si"o la'0a"o1 esta %ro%ie"a" te'"r. u' 3alor "e null .
7xceptionAandled I>' 3alor +oolea'o 6ue i'"ica si la ece%ci!' se ha co'trola"o
e' el Fo0$pdatedco'trola"or "e e3e'tos1 si 'alsa 8%or "e5ecto:1 la ece%ci!' se
3uel3e a %ro"ucir1 se 5iltra hasta el tie$%o "e e#ecuci!' "e ASP.NET.
[eepIn7dit&ode ISi se esta+lece e' !erdadera la e"ici!' 9ridVie0 5ila
%er$a'ece e' $o"o "e e"ici!'1 si 'alsa8%or "e5ecto:1 el 9ridVie0 5ila 3uel3e a su
$o"o "e s!lo lectura.
Nuestro c!"igo1 a co'ti'uaci!'1 "e+e co$%ro+ar %ara 3er si la excepcin 'o es nula 1 lo
6ue sig'i5ica 6ue u'a ece%ci!' 5ue %la'tea"a e' el "ese$%e=o "e la o%eraci!'. Si este es
el caso1 6uere$os(
Muestra u' $e'sa#e 5.cil "e usar e' el 7xception2etails etiBueta .
&'"ica' 6ue la ece%ci!' se ha co'trola"o.
Ma'te'ga el 9ridVie0 5ila e' $o"o "e e"ici!'.
Este c!"igo se lle3a a ca+o estos o+#eti3os(
protected void GridView1_RowUpdated (object sender, GridViewUpdatedEventArgs e)
{
if (e.Exception! = null)
{
/ / Muestra un mensaje fcil de usar
ExceptionDetails.Visible = true;
ExceptionDetails.Text = "Ha habido un problema al actualizar el producto.";
if (e.Exception.InnerException! = null)
{
Excepcin interna = e.Exception.InnerException;
if (interior es System.Data.Common.DbException)
ExceptionDetails.Text + =
"Nuestra base de datos est experimentando problemas." +
"Por favor, intntelo de nuevo ms tarde.";
else if (interior es NoNullAllowedException)
ExceptionDetails.Text + =
"Hay uno o ms campos obligatorios que faltan.";
else if (interior es ArgumentException)
{
paramName cadena = ((ArgumentException) interna) ParamName.;
ExceptionDetails.Text + =
String.Concat ("El", paramName, "el valor es ilegal.");
}
else if (interior es ApplicationException)
ExceptionDetails.Text + = inner.Message;
}
/ / Indica que la excepcin se ha manejado
e.ExceptionHandled = true;
/ / Mantener la fila en modo de edicin
e.KeepInEditMode = true;
}
}
Este co'trola"or "e e3e'tos co$ie'0a co' la co$%ro+aci!' %ara 3er
si e7xception es nula . Si 'o es asB1 la7xception2etails etiBueta Ms Visible %ro%ie"a"
se esta+lece e' !erdadero 1 ) su texto a la %ro%ie"a" HHu+o u' %ro+le$a al actuali0ar el
%ro"ucto.H 9os "etalles "e la ece%ci!' actual 6ue 5ue la'0a"o resi"e' e'
el e7xceptiono+#eto Inner7xception %ro%ie"a". Esta ece%ci!' i'ter'a se ea$i'a )1 si
se trata "e u' ti%o %articular1 u' $e'sa#e a"icio'al1 <til se a=a"e a
la 7xception2etails etiBueta Ms de texto "e %ro%ie"a". Por <lti$o1
el 7xceptionAandled )[eepIn7dit&ode %ro%ie"a"es se esta+lece' e' !erdad .
9a Eigura K $uestra u'a ca%tura "e %a'talla "e esta %.gi'a cua'"o se o$ite el 'o$+re "el
%ro"uctoT 9a 5igura 10 $uestra los resulta"os al i'tro"ucir u'a ilegal Precio$nidad 3alor 8I
20:.
Figura < 7l DoundField Product/a#e debe contener un !alor
Figura 1, *os !alores negati!os Precio$nidad no est=n per#itidos
Al esta+lecer la e7xceptionAandled %ro%ie"a" real 1 la Fo0$pdated co'trola"or "e
e3e'tos ha i'"ica"o 6ue se ha $a'e#a"o la ece%ci!'. Por lo ta'to1 la ece%ci!' 'o se
%ro%agar. hasta el tie$%o "e e#ecuci!' "e ASP.NET.
/ota: 9as 5iguras K ) 10 $uestra' u'a $a'era elega'te "e $a'e#ar las ece%cio'es
%la'tea"as %or la e'tra"a "el usuario 'o 3.li"a. 9o i"eal1 si' e$+argo1 "e e'tra"a 'o
3.li"os1 'o se llega a la ca%a "e l!gica "e 'egocio e' el %ri$er lugar1 co$o la %.gi'a "e
ASP.NET "e+e asegurarse "e 6ue las e'tra"as "el usuario so' 3.li"os a'tes "e i'3ocar
el ProductsD** clase $pdateProduct $-to"o. E' 'uestro %r!i$o ca%Btulo1 3ere$os
c!$o agregar co'troles "e 3ali"aci!' %ara las i'ter5aces "e e"ici!' e i'serci!' %ara
asegurarse "e 6ue los "atos %rese'ta"os a la ca%a "e l!gica "e 'egocio se a#usta a las
reglas "e 'egocio. 9os co'troles "e 3ali"aci!' 'o s!lo e3itar la i'3ocaci!' "e
la $pdateProduct $-to"o hasta 6ue el usuario los "atos %ro%orcio'a"os so' 3.li"os1 si'o
6ue ta$+i-' %ro%orcio'a' u'a e%erie'cia "e usuario $.s i'5or$ati3o %ara la
i"e'ti5icaci!' "e los %ro+le$as "e e'tra"a "e "atos.
Paso 1: &ane6o de 9racia D**K*e!el excepciones
Al i'sertar1 actuali0ar o eli$i'ar "atos1 la ca%a "e acceso a "atos %ue"e %ro"ucir u'a
ece%ci!' e' la cara "e u' error "e "atos relacio'a"os. 9a +ase "e "atos %ue"e estar 5uera
"e lB'ea1 u'a colu$'a "e +ase "e "atos re6ueri"a %or la ta+la 'o %o"rBa ha+er te'i"o u'
3alor es%ecB5ico1 o u'a restricci!' a 'i3el "e ta+la %ue"e ha+er si"o 3iola"a. A"e$.s "e las
estricta$e'te relacio'a"as co' los "atos ece%cio'es1 la ca%a "e l!gica "e 'egocio %ue"e'
utili0ar las ece%cio'es %ara i'"icar 6ue las reglas "e 'egocio ha' si"o 3iola"os. E' Tutorial
2( Crear u'a ca%a "e l!gica "e 'egocio 1 %or e#e$%lo1 he$os a=a"i"o u' co'trol "e la
e$%resa a la regla origi'al "e $pdateProduct so+recarga. E' co'creto1 si el usuario se
$arca co$o u' %ro"ucto "esco'ti'ua"o1 se re6uiere 6ue el %ro"ucto 'o sea la <'ica
%ro%orcio'a"a %or su %ro3ee"or. Si esta co'"ici!' se ha 3iola"o1
u'a .pplication7xception 5ue la'0a"o.
Para el $pdateProduct so+recarga crea"o e' este tutorial1 3a$os a a=a"ir u'a regla "e
'egocio1 6ue %rohB+e laPrecio$nidad ca$%o se esta+lece e' u' 3alor 'ue3o 6ue es $.s
"el "o+le "e la origi'al Precio$nidad 3alor. Para lograr esto1 a#ustar
el $pdateProduct so+recarga "e $o"o 6ue se realice este co'trol ) se %ro"uce
u'a.pplication7xception si la regla es 3iola"a. El $-to"o "e actuali0aci!' siguie'te(
pblica UpdateProduct bool (cadena productName, decimal? precioUnitario, corto?
UnitsInStock,
int ProductID)
{
Northwind.ProductsDataTable productos =
Adapter.GetProductByProductID (ProductID);
if (products.Count == 0)
/ / Ningn registro coincidente, devuelva falso
return false;
Northwind.ProductsRow producto = productos [0];
/ / Asegrese de que el precio no ha ms que duplicado
if (precioUnitario! = null & &! product.IsUnitPriceNull ())
if (precioUnitario> product.UnitPrice * 2)
throw new ApplicationException (
"Cuando la actualizacin de un precio del producto," +
"El nuevo precio no puede exceder el doble del precio original.");
product.ProductName = productName;
if (precioUnitario == null) product.SetUnitPriceNull ();
ms product.UnitPrice = unitPrice.Value;
if (UnitsInStock == null) product.SetUnitsInStockNull ();
ms product.UnitsInStock = unitsInStock.Value;
/ / Actualizar el registro del producto
int = rowsAffected Adapter.Update (producto);
/ / Devuelve verdadero si, precisamente, una fila se ha actualizado, si no falsa
volver rowsAffected == 1;
}
Co' este ca$+io1 cual6uier actuali0aci!' "e %recios 6ue es $.s "el "o+le "el %recio actual
%ro3ocar. u'a.pplication7xception ser la'0a"a. Al igual 6ue la ece%ci!' %la'tea"a a
%artir "e la DA91 esta ;99Iraise.pplication7xception %ue"e' ser "etecta"os ) $a'e#a"os
e' el 9ridVie0 Ms Fo0$pdated co'trola"or "e e3e'tos. De hecho1
el Fo0$pdated c!"igo "e co'trola"or "e e3e'tos1 co$o %or escrito1 correcta$e'te
"etectar esta ece%ci!' ) $ostrar el .pplication7xception Ms &ensa6e 3alor "e la
%ro%ie"a". 9a 5igura 11 $uestra u'a ca%tura "e %a'talla cua'"o el usuario i'te'ta
actuali0ar el %recio "e Chai a ^ 20.001 6ue es $.s "el "o+le "e su %recio actual "e ^ 1K.K2.
Figura 11 *as reglas de negocio au#enta el precio no per#itir Bue #=s del
doble de precio de un producto
/ota: &"eal$e'te1 'uestra l!gica "e reglas "e 'egocio serBa re%rogra$a"o %ara salir "e
la$pdateProduct so+recargas "el $-to"o ) e' u' $-to"o co$<'. Esto se "e#a co$o
e#ercicio %ara el lector.
Conclusin
Dura'te la i'serci!'1 actuali0aci!' ) eli$i'aci!' "e las o%eracio'es1 ta'to e' el co'trol "e
los "atos ) la *e+4b6ect2ata(ource 5uego i'3olucra"as %reIgra"o ) 'i3el "e %ostI
e3e'tos 6ue su#etali+ros la o%eraci!' real. Co$o he$os 3isto e' este tutorial ) el a'terior1
cua'"o se tra+a#a co' u' e"ita+le 9ridVie0 el 9ridVie0 Ms Fo0$pdating se acti3a el
e3e'to1 segui"o %or el 4b6ect2ata(ource Ms .ctuali%acin de e3e'to1 $o$e'to e' el
6ue se hace el co$a'"o "e actuali0aci!' co' el 4b6ect2ata(ource Ms o+#eto
su+)ace'te. Des%u-s "e la o%eraci!' se ha co$%leta"o1
el4b6ect2ata(ource Ms .ctuali%ado acti3a el e3e'to1 segui"o %or
el 9ridVie0 Ms Fo0$pdated e3e'to.
Po"e$os crear co'trola"ores "e e3e'tos %ara los e3e'tos "e %reIgra"o co' el 5i' "e
%erso'ali0ar los %ar.$etros "e e'tra"a o "e los e3e'tos "e 'i3el %ostIco' el 5i' "e
i's%eccio'ar ) res%o'"er a los resulta"os "e la o%eraci!'. Ni3el "e %ostIco'trola"ores "e
e3e'tos so' los $.s co$<'$e'te utili0a"os %ara "etectar si se %ro"u#o u'a ece%ci!'
"ura'te la o%eraci!'. E' el rostro "e u'a ece%ci!'1 estos co'trola"ores "e e3e'tos "e
'i3el %ostIo%cio'al$e'te %ue"e co'trolar la ece%ci!' %or su %ro%ia cue'ta. E' este
tutorial1 he$os 3isto c!$o $a'e#ar esa ece%ci!'1 $ostra'"o u' $e'sa#e "e error
"escri%ti3o.
E' el siguie'te tutorial1 3a$os a 3er c!$o re"ucir la %osi+ili"a" "e ece%cio'es "eri3a"as
"e %ro+le$as "e 5or$ato "e "atos 8co$o la i'tro"ucci!' "e u'
'egati3o Precio$nidad :. E' co'creto1 3a$os a 3er c!$o agregar co'troles "e 3ali"aci!'
%ara las i'ter5aces "e e"ici!' e i'serci!'.
Tutorial 1<: .dicin de controles de !alidacin
a las inter'aces de edicin e insercin de

Scott Mitchell
0, 200Z
Fesu#en: Este es el Visual C # tutorial. 8 Ca$+ie al tutorial "e 7isual ;asic .: E' este
tutorial1 3a$os a 3er lo 5.cil 6ue es a=a"ir co'troles "e 3ali"aci!' %ara
el 7ditIte#Te#plate ) InsertIte#Te#plate "e u' co'trol 4e+ "e "atos %ara
%ro%orcio'ar u'a i'ter5a0 "e usuario $.s i'5ali+le. 81K %.gi'as i$%resas:
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial 1< (Visual C #)
&'tro"ucci!'
Paso 1( Re%licar el e#e$%lo "e HTutorial 1Z( Ea$e' "e los aco'teci$ie'tos relacio'a"os
co' la i'serci!'1 actuali0aci!' ) eli$i'aci!' "eH
Paso 2( Co'3ertir el ;ou'"Eiel"s e' Te$%lateEiel"s
Paso ,( Agregar los co'troles "e 3ali"aci!' "e E"it&te$Te$%lates el Dri"7ie4
Paso /( Resu$e' "e e'tra"a "e "atos %ro+le$as
Paso 2( Agregar los co'troles "e 3ali"aci!' a la Details7ie4 "e &'sert&te$Te$%late
Paso 6( Partici!' "e los co'troles "e 3ali"aci!' e' la 3ali"aci!' "e los gru%os
Co'clusi!'
Introduccin
El 9ridVie0 ) 2etailsVie0 co'troles e' los e#e$%los 6ue he$os e%lora"o e' los <lti$os
tres tutoriales ha' si"o co$%uesta %or DoundField s ) C"ecJDoxField s 8los ti%os "e
ca$%o a=a"i"as auto$.tica$e'te %or Microso5t 7isual Stu"io al e'la0ar
u' 9ridVie0 o 2etailsVie0 a u' co'trol "e orige' "e "atos a tra3-s "e la eti6ueta
i'telige'te:. Al e"itar u'a 5ila "e u' 9ridVie0 o 2etailsVie0 1 los DoundField s 6ue 'o
so' "e s!lo lectura se co'3ierte' e' cua"ros "e teto1 a %artir "e la cual el usuario %ue"e
$o"i5icar los "atos eiste'tes. Del $is$o $o"o1 al i'sertar u' 'ue3o registro e'
u' 2etailsVie0 "e co'trol1 los DoundField s cu)a InsertVisible %ro%ie"a" est.
esta+leci"a e' !erdadero8%or "e5ecto: se re%rese'ta' co$o cua"ros "e teto 3acBos1 e'
los 6ue el usuario %ue"e %ro%orcio'ar 3alores "el 'ue3o registro "e ca$%o. Del $is$o
$o"o1 C"ecJDoxField s1 6ue se "esacti3a' e' la 'or$a1 "e s!lo lectura "e la i'ter5a01 se
co'3ierte' e' las casillas ha+ilita"as e' las i'ter5aces "e e"ici!' e i'serci!'.
Mie'tras 6ue el 3alor %re"eter$i'a"o "e e"ici!' e i'serci!' "e i'ter5aces %ara
el DoundField ) C"ecJDoxField %ue"e ser <til1 la i'ter5a0 'o tie'e 'i'g<' ti%o "e
3ali"aci!'. Si u' usuario hace u'a e'tra"a "e "atos errorIco$o la o$isi!' "e
la Product/a#e ca$%o o e'trar e' u' 3alor 'o 3.li"o %ara $nitsIn(tocJ 8%or e#e$%lo1
I20:1 u'a ece%ci!' se le3a't! "es"e las %ro5u'"i"a"es "e la ar6uitectura "e la
a%licaci!'. Au'6ue esta ece%ci!' %ue"e ser $a'e#a"o co' gracia co$o se "e$uestra e'
el tutorial a'terior 1 lo i"eal es la i'ter5a0 "e usuario "e e"ici!' o i'serci!' 6ue i'clu)e'
co'troles "e 3ali"aci!' %ara e3itar 6ue u' usuario e'tre e' tales "atos 'o 3.li"os e' el
%ri$er lugar.
A 5i' "e %ro%orcio'ar u'a i'ter5a0 %erso'ali0a"a "e e"ici!' o i'serci!'1 te'e$os 6ue
sustituir la DoundField oC"ecJDoxField co' u' Te#plateField . Te#plateField s1 6ue
5uero' el te$a "e "iscusi!' e' el Tutorial 12( >so "e Te$%lateEiel"s e' el co'trol
Dri"7ie4 ) Tutorial 1,( >so "e Te$%lateEiel"s e' Details7ie4 1 %ue"e co'star "e 3arias
%la'tillas "e "e5i'ici!' "e i'ter5aces se%ara"as %ara los Esta"os
5ila. El Te#plateField Ms Ite#Te#plate se utili0a %ara cua'"o la %restaci!' ca$%os "e
s!lo lectura o 5ilas e' el 2etailsVie0 o 9ridVie0 co'troles1 $ie'tras 6ue
el7ditIte#Te#plate ) InsertIte#Te#plate i'"ica' las i'ter5aces co' el uso "e los
$o"os "e e"ici!' ) la i'serci!'1 res%ecti3a$e'te.
E' este tutorial1 3a$os a 3er lo 5.cil 6ue es a=a"ir co'troles "e 3ali"aci!' %ara
el Te#plateField Ms 7ditIte#Te#plate )InsertIte#Te#plate %ara %ro%orcio'ar u'a
i'ter5a0 "e usuario $.s i'5ali+le. E' co'creto1 este tutorial to$a el e#e$%lo crea"o
e' Tutorial 1Z( Ea$e' "e los aco'teci$ie'tos relacio'a"os co' la i'serci!'1 actuali0aci!'
) eli$i'aci!' ) au$e'ta la e"ici!' ) la i'serci!' "e las i'ter5aces %ara i'cluir la 3ali"aci!'
corres%o'"ie'te.
Paso 1: Feplicar el e6e#plo de @Tutorial 1:: 7xa#en
de los aconteci#ientos relacionados con la
insercin> actuali%acin y eli#inacin@
E' Tutorial 1Z( Ea$e' "e los aco'teci$ie'tos relacio'a"os co' la i'serci!'1 actuali0aci!'
) eli$i'aci!' 1 he$os crea"o u'a %.gi'a e' la 6ue 5igura' los 'o$+res ) los %recios "e los
%ro"uctos e' u' e"ita+le 9ridVie0 . A"e$.s1 la %.gi'a i'clu)e
u' 2etailsVie0 cu)a 2e'ault&ode %ro%ie"a" se esta+leci! e' Insertar 1 %or lo ta'to
sie$%re la re%rese'taci!' e' $o"o "e i'serci!'. A %artir "e este 2etailsVie0 1 el usuario
%ue"e i'tro"ucir el 'o$+re ) el %recio "e u' %ro"ucto 'ue3o1 haga clic e' Insertar 1 ) lo
ha' a=a"i"o al siste$a 83er Eigura 1:.
Figura 1 7l e6e#plo anterior per#ite a los usuarios a5adir nue!os productos y
editar las existentes
Nuestro o+#eti3o %ara este tutorial es %ara au$e'tar el 2etailsVie0 ) 9ridVie0 %ara
%ro%orcio'ar co'troles "e 3ali"aci!'. E' %articular1 la l!gica "e 3ali"aci!'(
Eigir 6ue el 'o$+re se %ro%orcio'ar. al i'sertar o e"itar u' %ro"ucto.
Eige 6ue el %recio se %ro%orcio'ar. al i'sertar u' registro1 cua'"o se e"ita u' "isco1
6ue a<' se re6uiere u' %recio1 si'o 6ue utili0a' la l!gica "e %rogra$aci!' e'
el 9ridVie0 Ms Fo0$pdating co'trola"or "e e3e'tos )a est.' %rese'tes e' el
tutorial a'terior.
Aseg<rese "e 6ue el 3alor i'tro"uci"o %or el %recio es u' 5or$ato "e $o'e"a 3.li"a.
A'tes "e 6ue %o"a$os $irar a au$e'tar el e#e$%lo a'terior %ara i'cluir la 3ali"aci!'1
%ri$ero te'e$os 6ue re%licar el e#e$%lo "e la %.gi'a DataMo"i5icatio'E3e'ts.as% a la
%.gi'a "e este tutorial1 >&7ali"atio'.as%. Para lograr esto1 te'e$os 6ue co%iar e' el
$arca"o "eclarati3o "e la %.gi'a DataMo"i5icatio'E3e'ts.as% ) su c!"igo 5ue'te. E'
%ri$er lugar1 co%ie el $arca"o "eclarati3o $e"ia'te la reali0aci!' "e los siguie'tes %asos(
1. A+ra la %.gi'a DataMo"i5icatio'E3e'ts.as% e' 7isual Stu"io.
2. &r al $arca"o "eclarati3o "e la %.gi'a 8%ulse e' la Fuente e' la %arte i'5erior "e la
%.gi'a:.
,. Co%iar el teto e' el Pasp:ContentQ ) PI asp: ContentQ eti6uetas 8lB'eas , ) //:1
co$o se $uestra e' la Eigura 2.
Figura + Copiar el texto dentro del control Pasp:ContentQ
1. A+ra la %.gi'a >&7ali"atio'.as%.
2. &r al $arca"o "eclarati3o "e la %.gi'a.
,. Pegue el teto e' el Pasp:ContentQ co'trol.
Para co%iar el c!"igo 5ue'te1 a+ra la %.gi'a DataMo"i5icatio'E3e'ts.as%.cs ) co%iar s!lo el
teto dentro de la7ditInsert2eleteZ2ata&odi'ication7!ents clase. Co%ie los tres
co'trola"ores "e e3e'tos
8 *oad 19ridVie01ZFo0$pdating ) 4b6ect2ata(ource1ZInserting :1 %ero no co%ia la
"eclaraci!' "e clase o con los esta"os.Pegue el teto
co%ia"o en el 7ditInsert2eleteZ$IValidation clase e' >&7ali"atio'.as%.cs.
Des%u-s "e $o3er so+re el co'te'i"o ) el c!"igo "e DataMo"i5icatio'E3e'ts.as% a
>&7ali"atio'.as%1 to$e u' $o$e'to %ara %o'er a %rue+a su %rogreso e' u'
'a3ega"or. >ste" "e+e 3er la sali"a "el $is$o ) la e%erie'cia "e la $is$a 5u'cio'ali"a"
e' ca"a u'a "e estas "os %.gi'as 8"e 'ue3o la 5igura 1 %ara u'a ca%tura "e %a'talla "e
DataMo"i5icatio'E3e'ts.as% e' acci!':.
Paso +: Con!ertir el DoundFields en Te#plateFields
Para agregar co'troles "e 3ali"aci!' %ara las i'ter5aces "e e"ici!' e i'serci!'1
el DoundField s utili0a"os %or el2etailsVie0 ) 9ridVie0 co'troles tie'e' 6ue ser
co'3erti"os e' Te#plateField s. Para lograr esto1 haga clic e' el7ditar
colu#nas ) editar ca#pos e'laces e' el 9ridVie0 ) 2etailsVie0 eti6uetas
Hi'telige'tes s1 res%ecti3a$e'te. AllB1 seleccio'e ca"a u'o "e los DoundField s ) haga clic
e' el Con!ertir este ca#po en un Te#plateField e'lace.
Figura 1 Con!ertir cada uno de los de 2etailsVie0 y 9ridVie0 DoundFields en
Te#plateFields
Co'3ersi!' "e u' DoundField e' u' Te#plateField a tra3-s "e la Ca#pos cua"ro "e
"i.logo ge'era u'Te#plateField 6ue ehi+e la $is$a "e s!lo lectura1 la e"ici!' ) la
i'serci!' "e las i'ter5aces co$o el DoundField sB $is$o. El $arca"o siguie'te se $uestra
la si'tais "eclarati3a %ara el Product/a#e "e ca$%o e' el 2etailsVie0"es%u-s "e 6ue
se ha co'3erti"o e' u' Te#plateField (
<asp:TemplateField HeaderText="ProductName" SortExpression="ProductName">
<EditItemTemplate>
<Asp: TextBox ID = "TextBox1" runat = "server"
Texto ='<%# Bind ("ProductName") %>'></ asp: TextBox>
</ EditItemTemplate>
<InsertItemTemplate>
<Asp: TextBox ID = "TextBox1" runat = "server"
Texto ='<%# Bind ("ProductName") %>'></ asp: TextBox>
</ InsertItemTemplate>
<ItemTemplate>
<Asp: ID Label = "Label1" runat = "server"
Texto ='<%# Bind ("ProductName") %>'></ asp: Label>
</ ItemTemplate>
</ Asp: TemplateField>
Te'ga e' cue'ta 6ue este Te#plateField te'Ba tres %la'tillas crea"as
auto$.tica$e'te( Ite#Te#plate 17ditIte#Te#plate ) InsertIte#Te#plate . El Ite#T
e#plate $uestra u' solo 3alor "e "atos "e ca$%o 8 Product/a#e: co' u'a etiBueta "e
co'trol "e &'ter'et1 $ie'tras 6ue el 7ditIte#Te#plate ) InsertIte#Te#plate %rese'tar
el 3alor "e los "atos "e ca$%o e' u' cuadro de texto "e co'trol *e+ 6ue asocie el
ca$%o "e "atos co' el cuadro de texto Msde texto co' la %ro%ie"a" "e "os 3Bas "e
e'lace "e "atos. La 6ue s!lo est. usa'"o el 2etailsVie0 e' esta %.gi'a %ara i'sertar1
%ue"e 6uitar el Ite#Te#plate ) 7ditIte#Te#plate "e los "os Te#plateField s1 au'6ue
'o ha) 'a"a "e $alo e' salir "e ellos.
Da"o 6ue el 9ridVie0 'o es co$%ati+le co' la i'cor%ora"a e' la i'serci!' "e las
caracterBsticas "e la 2etailsVie0 1 6ue co'3ierte el 9ridVie0 Ms Product/a#e "e ca$%o
e' u' Te#plateField resulta"os e' ta' s!lo u' Ite#Te#plate )7ditIte#Te#plate (
<asp:TemplateField HeaderText="ProductName" SortExpression="ProductName">
<EditItemTemplate>
<Asp: TextBox ID = "TextBox1" runat = "server"
Texto ='<%# Bind ("ProductName") %>'></ asp: TextBox>
</ EditItemTemplate>
<ItemTemplate>
<Asp: ID Label = "Label1" runat = "server"
Texto ='<%# Bind ("ProductName") %>'></ asp: Label>
</ ItemTemplate>
</ Asp: TemplateField>
Al hacer clic e' el Con!ertir este ca#po en un Te#plateField e'lace1 7isual Stu"io ha
crea"o u' Te#plateField cu)o %la'tillas "e i$itar la i'ter5a0 "e usuario "e los
co'3ersos DoundField . >ste" %ue"e 3eri5icar esto 3isita'"o esta %.gi'a a tra3-s "e u'
'a3ega"or. >ste" e'co'trar. 6ue la a%arie'cia ) el co$%orta$ie'to "el Te#plateField s
es i"-'tica a la e%erie'cia cua'"o DoundField s se utili0aro' e' su lugar.
/ota: No "u"e e' %erso'ali0ar las i'ter5aces "e e"ici!' "e las %la'tillas cua'"o sea
'ecesario. Por e#e$%lo1 %ue"e 6uerer te'er el cuadro de texto e'
el Precio$nidad Te#plateField s re%rese'ta co$o u' cua"ro "e teto $.s %e6ue=o 6ue
el Product/a#e cua"ro "e teto. Para lograr esto se %ue"e esta+lecer el cuadro de
texto Ms colu#nas "e %ro%ie"a" a u' 3alor a"ecua"o o %ro%orcio'ar u' a'cho a+soluto a
tra3-s "el anc"o de la %ro%ie"a". E' el siguie'te tutorial1 3ere$os c!$o %erso'ali0ar
total$e'te la i'ter5a0 "e e"ici!' $e"ia'te la sustituci!' "el cuadro de texto co' u'
co'trol "e *e+ alter'ati3o "e e'tra"a "e "atos.
Paso 1: .gregar los controles de !alidacin de
7ditIte#Te#plates el 9ridVie0
Cua'"o la co'strucci!' "e 5or$as "e e'tra"a "e "atos1 es i$%orta'te 6ue los usuarios
i'tro"uce' to"os los ca$%os re6ueri"os1 ) 6ue to"as las a%ortacio'es so' legales1 co' el
5or$ato a"ecua"o los 3alores. Para a)u"ar a asegurar 6ue las a%ortacio'es "e los usuarios
so' 3.li"as1 ASP.NET %ro%orcio'a ci'co i'cor%ora"o e' los co'troles "e 3ali"aci!' 6ue
est.' "ise=a"os %ara ser utili0a"os %ara 3ali"ar el 3alor "e u' co'trol "e e'tra"a <'ica(
Re6uire"Eiel"7ali"ator ( Asegura 6ue u' 3alor ha si"o sie$%re
Co$%are7ali"ator I7ali"a u' 3alor co' otro 3alor "e co'trol *e+ o u' 3alor
co'sta'te1 o se asegura "e 6ue el 5or$ato "el 3alor es legal %ara u' ti%o "e "atos
es%eci5ica"o
Ra'ge7ali"ator IAsegura 6ue u' 3alor est. "e'tro "e u' ra'go "e 3alores
RegularE%ressio'7ali"ator I7ali"a u' 3alor e' co'tra "e u'a e%resi!' regular
Custo$7ali"ator I7ali"a u' 3alor co' u' $-to"o %erso'ali0a"o1 "e5i'i"o %or el
usuario
Para $.s i'5or$aci!' so+re estos ci'co co'troles1 echa u' 3ista0o a la secci!' "e co'troles
"e 3ali"aci!' "e lostutoriales "e i'icio r.%i"o "e ASP.NET .
Para 'uestro tutorial1 te'"re$os 6ue usar u' FeBuiredFieldValidator 1 ta'to e'
el 2etailsVie0 ) 9ridVie0 MsProduct/a#e Te#plateField s )
u' FeBuiredFieldValidator e'
el 2etailsVie0 Ms Precio$nidad Te#plateField .A"e$.s1 te'"re$os 6ue a=a"ir
u' Co#pareValidator a a$+os co'troles H Precio$nidad Te#plateField s 6ue asegura
6ue el %recio "e e'tra"a tie'e u' 3alor $a)or o igual a 0 ) se %rese'ta e' u' 5or$ato "e
$o'e"a 3.li"a.
/ota: Au'6ue ASP.NET 1. te'i"o estos $is$os ci'co co'troles "e 3ali"aci!'1 ASP.NET 2.0
ha a=a"i"o u'a serie "e $e#oras1 las "os %ri'ci%ales 6ue "el la"o "el clie'te a"$ite
secue'cias "e co$a'"os %ara los 'a3ega"ores 6ue 'o sea' Microso5t &'ter'et E%lorer ) la
ca%aci"a" "e los co'troles "e 3ali"aci!' "e %artici!' e' u'a %.gi'a e' gru%os "e
3ali"aci!'. Para $.s i'5or$aci!' so+re el 'ue3o co'trol "e 3ali"aci!' caracterBsticas e'
2.01 co'sulte la "isecci!' "e los co'troles "e 3ali"aci!' e' ASP.NET 2.0 .
7a$os a e$%e0ar %or la a"ici!' "e los co'troles "e 3ali"aci!' 'ecesarios %ara
la 7ditIte#Te#plate s e' el 9ridVie0Ms Te#plateField s. Para lograr esto1 haga clic e'
el 7ditar plantillas de e'lace "es"e el 9ridVie0 tag Ms i'telige'te %ara 6ue a%are0ca la
i'ter5a0 "e e"ici!' "e %la'tilla. A %artir "e a6uB1 %ue"e seleccio'ar la %la'tilla 6ue "esea
e"itar e' la lista "es%lega+le. Da"o 6ue 6uere$os e'ri6uecer la i'ter5a0 "e e"ici!'1
te'e$os 6ue a=a"ir los co'troles "e 3ali"aci!' a
la Product/a#e ) Precio$nidad Ms 7ditIte#Te#plate s.
Figura 3 Tene#os Bue extender la Product/a#e y 7ditIte#Te#plates
Precio$nidad es
E' el Product/a#e 7ditIte#Te#plate 1 agregue
u' FeBuiredFieldValidator arrastr.'"olo "es"e la ca#a "e herra$ie'tas e' la i'ter5a0 "e
e"ici!' "e %la'tillas1 "es%u-s "e la colocaci!' "e cuadro de texto .
Figura - .5adir un FeBuiredFieldValidator a la 7ditIte#Te#plate Product/a#e
To"os los co'troles "e 3ali"aci!' "e tra+a#o $e"ia'te la 3ali"aci!' "e la e'tra"a "e u'
co'trol ASP.NET *e+ <'ica. Por lo ta'to1 te'e$os 6ue i'"icar 6ue
el FeBuiredFieldValidator 6ue aca+a "e agregar "e+e 3ali"ar co'tra el cuadro de
texto e' el 7ditIte#Te#plate 1 esto se logra $e"ia'te el esta+leci$ie'to "el co'trol "e
3ali"aci!' "e la %ro%ie"a" Co'trolTo7ali"ate a la I2 "el co'trol *e+
corres%o'"ie'te. El cuadro de texto e' la actuali"a" tie'e el $.s
a'o"i'o I2"e TextDox1 1 %ero 3a$os a ca$+iar a algo $.s a%ro%ia"o. Haga clic e'
el cuadro de texto e' la %la'tilla )1 a co'ti'uaci!'1 "es"e la 3e'ta'a Pro%ie"a"es1 ca$+ie
el I2 "e TextDox1 a 7ditProduct/a#e .
Figura 8 Ca#biar el I2 del cuadro de texto para 7ditProduct/a#e
A co'ti'uaci!'1 esta+le0ca
el FeBuiredFieldValidator Ms ControlToValidate %ro%ie"a" 7ditProduct/a#e . Por
<lti$o1 esta+le0ca la %ro%ie"a" ErrorMessage a H>ste" "e+e %ro%orcio'ar el 'o$+re "el
%ro"uctoH ) la %ro%ie"a" "e teto a H_H. El texto 3alor "e la %ro%ie"a"1 si la ha)1 es el teto
6ue se $uestra e' el co'trol "e 3ali"aci!' si el error e' la
3ali"aci!'. El 7rror&essage 3alor "e la %ro%ie"a"1 6ue se re6uiere1 es utili0a"o %or
el Validation(u##ary "e co'trol1 si el texto 3alor "e la %ro%ie"a" se o$ite1
el 7rror&essage 3alor "e la %ro%ie"a" es ta$+i-' el teto $ostra"o %or el co'trol "e
3ali"aci!' e' la e'tra"a 'o 3.li"a.
Des%u-s "e esta+lecer estas tres %ro%ie"a"es "e la FeBuiredFieldValidator 1 la %a'talla
"e+e ser si$ilar a la Eigura Z.
Figura : 7stablecer el FeBuiredFieldValidator ControlToValidate es>
7rror&essage> y las propiedades de texto
Co' el FeBuiredFieldValidator a=a"i"o a la Product/a#e 7ditIte#Te#plate 1 to"o lo
6ue 6ue"a es a=a"ir la 3ali"aci!' 'ecesaria %ara
la Precio$nidad 7ditIte#Te#plate . Des"e 6ue he$os "eci"i"o 6ue1 %ara esta %.gi'a1
elPrecio$nidad es o%cio'al la hora "e e"itar u' "isco1 'o es 'ecesario agregar
u' FeBuiredFieldValidator . Nosotros1 si' e$+argo1 6ue a=a"ir
u' Co#pareValidator %ara asegurar 6ue el Precio por unidad 1 si 5ue su$i'istra"o1
tie'e el 5or$ato correcto co$o $o'e"a ) es $a)or o igual a 0.
A'tes "e a=a"ir el Co#pareValidator a la Precio$nidad 7ditIte#Te#plate 1 %ri$ero
3a$os a ca$+iar el cuadro de texto 4e+ "e co'trol
"e identi'icacin "e TextDox+ a 7dit$nitPrice . Des%u-s "e hacer este ca$+io1 agrega
elCo#pareValidator 1 esta+lecie'"o su ControlToValidate %ro%ie"a" 7dit$nitPrice 1
su 7rror&essage %ro%ie"a" "e HEl %recio "e+e ser $a)or o igual a cero ) 'o %ue"e i'cluir
el sB$+olo "e la $o'e"aH1 ) su texto a la %ro%ie"a" H_H.
Para i'"icar 6ue el Precio$nidad 3alor "e+e ser $a)or o igual a 01 el
co'#u'to Co#pareValidator Ms %ro%ie"a" "el o%era"or "e 9reaterT"an7Bual 1
su %ro%ie"a" 7alueToCo$%are a H0H1 ) su %ro%ie"a" "e ti%o "e di!isas . 9a si'tais
"eclarati3a siguie'te $uestra
la Precio$nidad Te#plateField Ms 7ditIte#Te#plate "es%u-s "e estos ca$+ios se ha'
hecho(
<EditItemTemplate>
<Asp: TextBox ID = "EditUnitPrice" runat = "server"
Texto ='<%# Bind ("Precio por unidad", "{0: c}")%> '
Columnas = "6"> </ asp: TextBox>
<Asp: CompareValidator ID = "CompareValidator1" runat = "server"
ControlToValidate = "EditUnitPrice"
ErrorMessage = "El precio debe ser mayor o igual a cero y
no puede incluir el smbolo de la moneda "
Operador = "GreaterThanEqual" type = "Moneda"
ValueToCompare = "0 ">*</ asp: CompareValidator>
</ EditItemTemplate>
Des%u-s "e hacer estos ca$+ios1 a+ra la %.gi'a e' u' 'a3ega"or. Si i'te'ta o$itir el
'o$+re o i'tro"u0ca u' 3alor "e %recio 3.li"o "ura'te la e"ici!' "e u' %ro"ucto1 a%arece
u' asterisco #u'to al cua"ro "e teto. Co$o $uestra la Eigura P se $uestra u' 3alor "e
%recio 6ue i'clu)e el sB$+olo "e la $o'e"a1 tales co$o ^ 1K.K2Ise co'si"era
3.li"o. ElCo#pareValidator Ms de di!isas tipo %er$ite se%ara"ores "e "Bgitos 8%or
e#e$%lo1 co$as o %u'tos1 "e%e'"ie'"o "e la co'5iguraci!' "e la cultura: ) u' sig'o i'icial
$.s o $e'os1 %ero no %er$itir 6ue u' sB$+olo "e $o'e"a. Este co$%orta$ie'to %ue"e
"e#ar %er%le#o co$o los usuarios "e la i'ter5a0 "e e"ici!' e' la actuali"a" hace 6ue
el Precio por unidad co' el 5or$ato "e $o'e"a.
/ota: Recuer"e 6ue e' el Tutorial 1Z( Ea$e' "e los aco'teci$ie'tos relacio'a"os co' la
i'serci!'1 actuali0aci!' ) eli$i'aci!' 1 se esta+lece
el DoundField Ms 2ataFor#at(tring %ro%ie"a" S,: cT co' el 5i' "e "arle 5or$ato co$o
$o'e"a. A"e$.s1 se esta+lece el .pplyFor#atIn7dit&ode %ro%ie"a" real 1 hacie'"o
6ue el 9ridVie0 i'ter5a0 Ms "e e"ici!' %ara "ar 5or$ato al Precio$nidad co$o $o'e"a. Al
co'3ertir el DoundField e' u' Te#plateField 1 7isual Stu"io to$! 'ota "e estos a#ustes )
el 5or$ato "elcuadro de texto Ms de texto "e %ro%ie"a" co$o u'a $o'e"a co' la si'tais
"e e'lace "e "atos PW # Dind (@Precio por unidad@> @S,: cT@)WQ .
Figura ; .parece un asterisco 6unto a los cuadros de texto con la entrada no es
!=lida
Mie'tras 6ue la 3ali"aci!' "e las o+ras tal cual1 el usuario tie'e 6ue 6uitar $a'ual$e'te el
sB$+olo "e la $o'e"a cua'"o se e"ita u' registro1 6ue 'o es ace%ta+le. Para re$e"iar
esto1 te'e$os tres o%cio'es(
1. Co'5igurar el 7ditIte#Te#plate %ara 6ue el Precio$nidad 3alor 'o est.
5or$atea"o co$o $o'e"a.
2. Per$itir 6ue el usuario i'tro"u0ca u' sB$+olo "e $o'e"a $e"ia'te la eli$i'aci!' "e
la Co#pareValidator ) su sustituci!' %or u' Fegular7xpressionValidator 6ue
co$%rue+a correcta$e'te %or u' 3alor "e la $o'e"a co' el 5or$ato a"ecua"o. El
%ro+le$a a6uB es 6ue la e%resi!' regular %ara 3ali"ar u' 3alor "e la $o'e"a 'o es
+asta'te ) se re6uiere escri+ir c!"igo si 6uerBa$os i'cor%orar a#ustes "e la cultura.
,. Eli$i'ar %or co$%leto el co'trol "e 3ali"aci!' ) se +asa' e' la l!gica "e 3ali"aci!'
e' el ser3i"or e' el 9ridVie0Ms Fo0$pdating co'trola"or "e e3e'tos.
7a$os a ir co' la o%ci!' # 1 %ara este e#ercicio. E' la actuali"a"1 la Precio$nidad tie'e el
5or$ato "e u'a $o'e"a "e+i"o a la e%resi!' "e e'lace "e "atos %ara el cuadro de
texto e' el 7ditIte#Te#plate ( PW # Dind (@Precio por unidad@> @S,: cT@)
WQ Ca$+iar la !inculacin "eclaraci!' a Dind (@ Precio por unidad @>@ S,: /+T @) 1
6ue "a 5or$ato al resulta"o co$o u' '<$ero co' "os "Bgitos "e %recisi!'. Esto se %ue"e
hacer "irecta$e'te a tra3-s "e la si'tais "eclarati3a o hacie'"o clic e' el 7ditar
2ataDinding e'lace "e la 7dit$nitPrice TextDox e'
el Precio$nidadTe#plateField Ms 7ditIte#Te#plate 83er Eiguras K ) 10:.
Figura < Aaga clic en el enlace 7ditar del cuadro de texto 2ataDindings
Figura 1, 7speci'iBue el especi'icador de 'or#ato en la declaracin de enlace
Co' este ca$+io1 el %recio "e 5or$ato e' la i'ter5a0 "e e"ici!' i'clu)e la co$a co$o
se%ara"or "e gru%o ) u' %u'to co$o se%ara"or "eci$al1 %ero "e#a 5uera el sB$+olo "e
$o'e"a.
/ota: El Precio por unidad 7ditIte#Te#plate 'o i'clu)e u' FeBuiredFieldValidator 1
lo 6ue %er$ite la "e3oluci!' "e "atos a %ro"ucirse ) la l!gica "e actuali0aci!' "e
co$e'0ar. Si' e$+argo1 el Fo0$pdatingco'trola"or "e e3e'tos co%ia"o "e Tutorial 1Z(
Ea$e' "e los aco'teci$ie'tos relacio'a"os co' la i'serci!'1 actuali0aci!' )
eli$i'aci!' i'clu)e u' che6ue "e %rogra$aci!' 6ue asegura 6ue elPrecio$nidad se
%ro%orcio'a. Si-'tase li+re %ara eli$i'ar esta l!gica1 lo "e#e e' co$o est.1 o a=a"ir
u'FeBuiredFieldValidator a la Precio$nidad 7ditIte#Te#plate .
Paso 3: Fesu#en de los proble#as de entrada de
datos
A"e$.s "e los ci'co co'troles "e 3ali"aci!'1 ASP.NET i'clu)e el co'trol
7ali"atio'Su$$ar) 1 6ue $uestra el7rror&essage s "e los co'troles "e 3ali"aci!' 6ue
"etecta' "atos 'o 3.li"os. Este resu$e' "e los "atos se %ue"e' $ostrar co$o teto e' la
%.gi'a 4e+ oa tra3-s "e u' $o"al1 cua"ro "e $e'sa#e e' el clie'te. 7a$os a $e#orar este
tutorial %ara i'cluir u' cua"ro "e $e'sa#e e' el clie'te 6ue resu$e los %ro+le$as "e
3ali"aci!'.
Para lograr esto1 arrastre u' Validation(u##ary el co'trol "el cua"ro "e herra$ie'tas
hasta el "ise=a"or. 9a u+icaci!' "e la !alidacin "e co'trol e' reali"a" 'o i$%orta1 )a 6ue
3a$os a co'5igurar %ara $ostrar s!lo el resu$e' co$o u' cua"ro "e $e'sa#e. Des%u-s "e
agregar el co'trol1 esta+le0ca su %ro%ie"a" Sho4Su$$ar) a 'alsos ) su%ro%ie"a"
Sho4Message;o "e !erdad . Co' esta a"ici!'1 los errores "e 3ali"aci!' se resu$e' e'
u' cua"ro "e $e'sa#e e' el clie'te.
Figura 11 *os errores de !alidacin se resu#en en un cuadro de #ensa6e en el
cliente
Paso -: .gregar los controles de !alidacin a la
InsertIte#Te#plate 2etailsVie0 de
To"o lo 6ue 6ue"a "e este tutorial es a=a"ir los co'troles "e 3ali"aci!' a
la 2etailsVie0 i'ter5a0 Ms la i'serci!'. El %roceso "e a=a"ir co'troles "e 3ali"aci!' %ara
el 2etailsVie0 %la'tillas Ms es i"-'tica a la 6ue se ea$i'aro' e' el %aso ,1 %or lo ta'to1
3a$os a %asar r.%i"a$e'te %or la tarea e' este %aso. Co$o lo hici$os co'
el 9ridVie0 Ms7ditIte#Te#plate s1 os a'i$o a ca$+iar el 'o$+re "el I2 s "e
la TextDox es el
i'"escri%ti+le TextDox1 ) TextDox+ aInsertProduct/a#e ) Insert$nitPrice .
A=a"ir u' FeBuiredFieldValidator a la Product/a#e InsertIte#Te#plate . Esta+lecer
el ControlToValidate a laidenti'icacin "e los TextDox e' la %la'tilla1 el texto "e la
%ro%ie"a" H_H ) su 7rror&essage %ro%ie"a" HDe+e %ro%orcio'ar el 'o$+re "el %ro"uctoH.
Des"e el Precio$nidad se re6uiere %ara esta %.gi'a cua'"o se a=a"e u' 'ue3o registro1
agregar u'FeBuiredFieldValidator a la Precio$nidad InsertIte#Te#plate 1
esta+lecie'"o su ControlToValidate 1 texto 1 )7rror&essage %ro%ie"a"es
a"ecua"a$e'te. Ei'al$e'te1 agregue u'a Co#pareValidator a
la Precio$nidadInsertIte#Te#plate asB1 la co'5iguraci!' "e
su ControlToValidate 1 texto 1 7rror&essage 1 Tipo 1 operador 1
)ValueToCo#pare %ro%ie"a"es al igual 6ue hici$os co'
el Precio$nidad Ms Co#pareValidator e' el 9ridVie0 Ms7ditIte#Te#plate .
Des%u-s "e la a"ici!' "e estos co'troles "e 3ali"aci!'1 u' 'ue3o %ro"ucto 'o se %ue"e
a=a"ir al siste$a si su 'o$+re 'o se su$i'istra o si su %recio es u' '<$ero 'egati3o o co'
5or$ato "e $a'era ilegal.
Figura 1+ *a lgica de !alidacin "a sido a5adido a la inter'a% de la insercin de
la 2etailsVie0 es
Paso 8: Particin de los controles de !alidacin en
grupos de !alidacin
Nuestra %.gi'a se co$%o'e "e "os co'#u'tos l!gica$e'te "is%ares "e los co'troles "e
3ali"aci!'( las 6ue corres%o'"e' a la 9ridVie0 Ms i'ter5a0 "e e"ici!' ) las 6ue
corres%o'"e' a la 2etailsVie0 Ms i'ter5a0 "e i'serci!'. Por "e5ecto1 cua'"o se %ro"uce
u'a "e3oluci!' "e "atos todos los co'troles "e 3ali"aci!' "e la %.gi'a se co$%rue+a'. Si'
e$+argo1 cua'"o se e"ita u' registro1 'o 6uere$os 6ue el 2etailsVie0 3ali"aci!' "e la
i'ter5a0 Ms la i'serci!' "e los co'troles %ara 3ali"ar. 9a 5igura 1, $uestra 'uestro "ile$a
actual( Cua'"o u' usuario est. e"ita'"o u' %ro"ucto co' 3alores %er5ecta$e'te legal1
haga clic e' .ctuali%acin de las causas "e u' error "e 3ali"aci!' "e+i"o a 6ue el
'o$+re ) los 3alores "e %recios e' la i'ter5a0 "e i'serci!' est.' e' +la'co.
Figura 11 *a actuali%acin de un producto pro!oca una !alidacin de la inter'a%
de la insercin de los controles a los incendios
9os co'troles "e 3ali"aci!' e' ASP.NET 2.0 %ue"e' "i3i"irse e' gru%os "e 3ali"aci!' a
tra3-s "e sus Validation9roup%ro%ie"a". Para asociar u' co'#u'to "e co'troles "e
3ali"aci!' e' u' gru%o1 +asta co' esta+lecer su Validation9roup%ro%ie"a" co' el $is$o
3alor. Para el tutorial1 esta+le0ca la Validation9roup %ro%ie"a"es "e los co'troles "e
3ali"aci!' e' el 9ridVie0 Ms Te#plateField s "e 7ditValidationControls )
el Validation9roup %ro%ie"a"es "e la2etailsVie0 Ms Te#plateField s
"e InsertValidationControls . Estos ca$+ios se %ue"e' hacer "irecta$e'te e' el
$arca"o "eclarati3o oa tra3-s "e la 3e'ta'a Pro%ie"a"es cua'"o se utili0a el Dise=a"or "e
e"ici!' "e la %la'tilla "e i'ter5a0.
A"e$.s "e los co'troles "e 3ali"aci!'1 el botn ) el botn relacio'a"as co' los co'troles
e' ASP.NET 2.0 ta$+i-' i'clu)e u'a Validation9roup %ro%ie"a". 7ali"a"ores "e u' gru%o
"e 3ali"aci!' se co$%rue+a su 3ali"e0 s!lo cua'"o u'a "e3oluci!' "e "atos es i'"uci"a
%or u' botn 6ue tie'e el $is$o Validation9roup 3alor "e la %ro%ie"a". Por e#e$%lo1
%ara 6ue el 2etailsVie0 Ms Insertar +ot!' %ara acti3ar
el InsertValidationControls gru%o "e 3ali"aci!' 6ue 'ecesita' %ara esta+lecer
la Co##andField Ms Validation9roup %ro%ie"a" InsertValidationControls 83er Eigura
1/:.A"e$.s1 esta+lecer
el 9ridVie0 Ms Co##andField Ms Validation9roup %ro%ie"a" 7ditValidationControls .
Figura 13 7stablecer el 2etailsVie0 de Co##andField de propiedad
Validation9roup InsertValidationControls
Des%u-s "e estos ca$+ios1 el 2etailsVie0 ) 9ridVie0 Ms Te#plateField s
) Co##andField s "e+e ser si$ilar a lo siguie'te.
Te#plateFields el 2etailsVie0 y Co##andField:
<Asp: TemplateField HeaderText = "ProductName"
SortExpression = "ProductName">
<InsertItemTemplate>
<Asp: TextBox ID = "InsertProductName" runat = "server"
Texto ='<%# Bind ("ProductName") %>'></ asp: TextBox>
<Asp: RequiredFieldValidator ID = "RequiredFieldValidator2"
runat = "server" ControlToValidate = "InsertProductName"
ErrorMessage = "Usted debe proporcionar el nombre del producto"
ValidationGroup = "InsertValidationControls"> *
</ Asp: RequiredFieldValidator>
</ InsertItemTemplate>
</ Asp: TemplateField>
<asp:TemplateField HeaderText="UnitPrice" SortExpression="UnitPrice">
<InsertItemTemplate>
<Asp: TextBox ID = "InsertUnitPrice" runat = "server"
Texto ='<%# Bind ("Precio por unidad")%> 'Columnas = "6">
</ Asp: TextBox>
<Asp: RequiredFieldValidator ID = "RequiredFieldValidator3"
runat = "server" ControlToValidate = "InsertUnitPrice"
ErrorMessage = "Usted debe proporcionar el precio del producto"
ValidationGroup = "InsertValidationControls"> *
</ Asp: RequiredFieldValidator>
<Asp: CompareValidator ID = "CompareValidator2" runat = "server"
ControlToValidate = "InsertUnitPrice"
ErrorMessage = "El precio debe ser mayor o igual a cero y
no puede incluir el smbolo de la moneda "
Operador = "GreaterThanEqual" type = "Moneda" ValueToCompare = "0"
ValidationGroup = "InsertValidationControls"> *
</ Asp: CompareValidator>
</ InsertItemTemplate>
</ Asp: TemplateField>
<Asp: CommandField ShowInsertButton = "True"
ValidationGroup = "InsertValidationControls" />
7l 9ridVie0 Co##andField y Te#plateFields:
<Asp: CommandField ShowEditButton = "True"
ValidationGroup = "EditValidationControls" />
<Asp: TemplateField HeaderText = "ProductName"
SortExpression = "ProductName">
<EditItemTemplate>
<Asp: TextBox ID = "EditProductName" runat = "server"
Texto ='<%# Bind ("ProductName")%> '>
</ Asp: TextBox>
<Asp: RequiredFieldValidator ID = "RequiredFieldValidator1"
runat = "server" ControlToValidate = "EditProductName"
ErrorMessage = "Usted debe proporcionar el nombre del producto"
ValidationGroup = "EditValidationControls"> *
</ Asp: RequiredFieldValidator>
</ EditItemTemplate>
<ItemTemplate>
<Asp: ID Label = "Label1" runat = "server"
Texto ='<%# Bind ("ProductName") %>'></ asp: Label>
</ ItemTemplate>
</ Asp: TemplateField>
<asp:TemplateField HeaderText="UnitPrice" SortExpression="UnitPrice">
<EditItemTemplate>
<Asp: TextBox ID = "EditUnitPrice" runat = "server"
Texto ='<%# Bind ("Precio por unidad", "{0: N2}")%> 'Columnas = "6"> </ asp:
TextBox>
<Asp: CompareValidator ID = "CompareValidator1" runat = "server"
ControlToValidate = "EditUnitPrice"
ErrorMessage = "El precio debe ser mayor o igual a cero y
no puede incluir el smbolo de la moneda "
Operador = "GreaterThanEqual" type = "Moneda"
ValueToCompare = "0"
ValidationGroup = "EditValidationControls"> *
</ Asp: CompareValidator>
</ EditItemTemplate>
<ItemTemplate>
<Asp: ID Label = "Label2" runat = "server"
Texto ='<%# Bind ("Precio por unidad", "{0: c}")%> '>
</ Asp: Label>
</ ItemTemplate>
</ Asp: TemplateField>
E' este %u'to1 la 3ali"aci!' e"itar co'troles es%ecB5icos "e 5uego sola$e'te cua'"o
el 9ridVie0 Ms de actuali%acin se hace clic e' el +ot!' ) la 3ali"aci!' "e i'sertar
co'troles es%ecB5icos "e 5uego sola$e'te cua'"o el 2etailsVie0 MsInserte %ulsa el +ot!'1
la soluci!' "el %ro+le$a 6ue resalta la 5igura 1,. Si' e$+argo1 co' este ca$+io "e
'uestraValidation(u##ary "e co'trol )a 'o se $uestra cua'"o se i'tro"uce' "atos 'o
3.li"os. El Validation(u##aryco'trol ta$+i-' co'tie'e u'a Validation9roup %ro%ie"a"
) s!lo $uestra i'5or$aci!' "e resu$e' "e los co'troles "e 3ali"aci!' e' su gru%o "e
3ali"aci!'. Por lo ta'to1 es 'ecesario te'er "os co'troles "e 3ali"aci!' e' esta %.gi'a( u'a
%ara el InsertValidationControls gru%o "e 3ali"aci!' ) u'o "e 7ditValidationControls .
<Asp: ValidationSummary ID = "ValidationSummary1" runat = "server"
ShowMessageBox = "True" ShowSummary = "false"
ValidationGroup = "EditValidationControls" />
<Asp: ValidationSummary ID = "ValidationSummary2" runat = "server"
ShowMessageBox = "True" ShowSummary = "false"
ValidationGroup = "InsertValidationControls" />
Co' esta a"ici!'1 el tutorial es co$%letoC
Conclusin
Mie'tras DoundField s %ue"e %ro%orcio'ar u'a i'serci!' ) e"ici!' "e i'ter5a01 la i'ter5a0
'o es %erso'ali0a+le. Por lo ge'eral1 6uere$os a=a"ir co'troles "e 3ali"aci!' %ara la
i'ter5a0 "e e"ici!' e i'serci!' %ara asegurarse "e 6ue el usuario i'tro"uce los i'su$os
re6ueri"os e' u' 5or$ato legal. Para lograr esto1 "e+e co'3ertir el DoundField s
e'Te#plateField s ) a=a"ir los co'troles "e 3ali"aci!' "e la %la'tilla corres%o'"ie'te
8s:. E' este tutorial1 he$os a$%lia"o el e#e$%lo "e Tutorial 1Z( Ea$e' "e los
aco'teci$ie'tos relacio'a"os co' la i'serci!'1 actuali0aci!' ) eli$i'aci!' 1 la a"ici!' "e
los co'troles "e 3ali"aci!' ta'to a la 2etailsVie0 Ms i'ter5a0 "e i'serci!' ) el 9ridVie0 Ms
i'ter5a0 "e e"ici!'. Por otra %arte1 he$os 3isto c!$o $ostrar la i'5or$aci!' "e resu$e' "e
3ali"aci!' co' elValidation(u##ary el co'trol ) la 5or$a "e %artici!' "e los co'troles "e
3ali"aci!' e' la %.gi'a "e 3ali"aci!' e' gru%os "isti'tos.
Co$o he$os 3isto e' este tutorial1 Te#plateField s %er$ite las i'ter5aces "e e"ici!' e
i'serci!' %ara ser a$%lia"o %ara i'cluir co'troles "e 3ali"aci!'. Te#plateField s ta$+i-'
se %ue"e a$%liar %ara i'cluir otros co'troles *e+ "e e'tra"a1 %er$itie'"o 6ue el cuadro
de texto %ara ser ree$%la0a"o %or u' co'trol "e *e+ $.s a"ecua"o. E' 'uestro %r!i$o
ca%Btulo1 3ere$os c!$o ree$%la0ar el cuadro de texto co' u' co'trol "e e'lace "e
"atos 2rop2o0n*istco'trol1 lo cual es i"eal cua'"o se e"ita u'a cla3e eter'a
8co$o IdCategorCa o IdPro!eedor e' los productos "e $esa:.
Tutorial +,: Personali%acin de la inter'a% de
#odi'icacin de datos

Scott Mitchell
0, 200Z
Fesu#en: Este es el Visual C # tutorial. 8 Ca$+ie al tutorial "e 7isual ;asic .: E' este
tutorial1 3a$os a 3er c!$o %erso'ali0ar la i'ter5a0 "e u' e"ita+le 9ridVie0 1 $e"ia'te la
sustituci!' "e la 'or$a TextDox ) C"ecJDox co' co'troles alter'ati3os co'troles "e
e'tra"a *e+. 81K %.gi'as i$%resas:
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial +, (Visual C #)
&'tro"ucci!'
Paso 1( Creaci!' "e la so+recarga a"ecua"a >%"atePro"uct
Paso 2( Ela+oraci!' "e la Dri"7ie4 e"ita+le
Paso ,( >sar u' Dro%Do4'9ist %ara la categorBa "e Pro3ee"or "e e"ici!' e i'ter5aces
A=a"ie'"o las categorBas ) Dro%Do4'9ists Pro3ee"ores
E'la0ar el Dro%Do4'9ists a los ca$%os "e "atos Categor)&D ) &"Pro3ee"or
Trata$ie'to "e 3alores N>99
Paso / ( El uso "e co$%o'e'tes Ra"io;utto' %ara el esta"o i'terru$%i"as
Co'clusi!'
Introduccin
El DoundField s ) C"ecJDoxField s utili0a"os %or el 9ridVie0 ) 2etailsVie0 co'troles
si$%li5icar el %roceso "e $o"i5icaci!' "e los "atos "e+i"o a su ca%aci"a" %ara hacer "e
s!lo lectura1 e"ita+le1 ) las i'ter5aces i'serta+les. Estas i'ter5aces %ue"e' ser %resta"os si'
'ecesi"a" "e a=a"ir 'i'g<' c!"igo a"icio'al "eclarati3a o c!"igo. Si' e$+argo1
elDoundField ) C"ecJDoxField i'ter5aces Ms carece' "e la ca%aci"a" "e %erso'ali0aci!'
a $e'u"o 'ecesaria e' esce'arios "el $u'"o real. Co' el 5i' "e %erso'ali0ar la i'ter5a0 "e
e"itar o i'serta+le e' u' 9ridVie0 o 2etailsVie0 1 te'e$os 6ue usar e' su lugar
u' Te#plateField .
E' el tutorial a'terior 1 3i$os c!$o %erso'ali0ar las i'ter5aces "e $o"i5icaci!' "e "atos
$e"ia'te la a"ici!' "e los co'troles "e 3ali"aci!' 4e+. E' este tutorial1 3a$os a 3er c!$o
%erso'ali0ar la actual recogi"a "e "atos "e co'troles *e+1 e' sustituci!' "e
la DoundField ) C"ecJDoxField Ms est.'"ar TextDox ) C"ecJDox co'troles co'
alter'ati3as "e co'troles "e e'tra"a *e+. E' %articular1 3a$os a co'struir u'
e"ita+le 9ridVie0 6ue %er$ita el 'o$+re "el %ro"ucto1 categorBa1 %ro3ee"or1 ) el esta"o
sus%e'"i! a ser actuali0a"o. Al e"itar u'a 5ila e' %articular1 la categorBa ) ca$%os "e
%ro3ee"or se re%rese'ta' co$o 2rop2o0n*ist s1 6ue co'tie'e el co'#u'to "e las
categorBas "is%o'i+les ) los %ro3ee"ores %ara elegir. A"e$.s1 3a$os a ree$%la0ar
el C"ecJDoxField Ms %or "e5ecto C"ecJDox co' u'FadioDutton*ist "e co'trol 6ue o5rece
"os o%cio'es( HActi3oH ) Hi'terru$%i"asH.
Figura 1 *a inter'a% del 9ridVie0 edicin incluye 2rop2o0n*ists y FadioDutton
Paso 1: Creacin de la sobrecarga adecuada
$pdateProduct
E' este tutorial1 3a$os a co'struir u' e"ita+le 9ridVie0 6ue %er$ita la e"ici!' "el
'o$+re "e u' %ro"ucto1 categorBa1 %ro3ee"or1 ) el esta"o sus%e'"i"o. Por lo ta'to1
'ecesita$os u' $pdateProduct so+recarga 6ue ace%ta ci'co %ar.$etros "e e'tra"a(
estos cuatro 3alores "el %ro"ucto $.s el ProductI2 . Al igual 6ue e' 'uestro so+recargas
a'teriores1 -ste ser.(
1. Recu%erar la i'5or$aci!' "el %ro"ucto a %artir "e la +ase "e "atos co' el o+#eti3o
es%ecB5ico ProductI2 .
2. Actuali0ar
el Product/a#e 1 IdCategorCa 1 IdPro!eedor ) descatalogados ca$%os.
,. E'3iar la solicitu" "e actuali0aci!' a la DA9 a tra3-s "el Ta+leA"a%ter $pdate
() $-to"o.
Por ra0o'es "e +re3e"a"1 %or esta so+recarga e' %articular 6ue he o$iti"o la
co$%ro+aci!' "e los 'egocios la regla 6ue asegura 6ue u' %ro"ucto sea $arca"o co$o
"isco'ti'uas 'o es el <'ico %ro"ucto 6ue o5rece su %ro3ee"or.Si-'tase li+re "e agregar e'
si lo %re5iere1 o1 i"eal$e'te1 re5actori0ar la l!gica "e u' $-to"o "isti'to.
El siguie'te c!"igo $uestra el 'ue3o $pdateProduct so+recarga e'
el ProductsD** clase(
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Update, false)]
pblica UpdateProduct bool (productName cadena, int? IdCategora,
int? supplierID, bool interrumpido, int ProductID)
{
Northwind.ProductsDataTable productos =
Adapter.GetProductByProductID (ProductID);
if (products.Count == 0)
/ / Ningn registro coincidente, devuelva falso
return false;
Northwind.ProductsRow producto = productos [0];
product.ProductName = productName;
if (supplierID == null) product.SetSupplierIDNull ();
ms product.SupplierID = supplierID.Value;
if (IdCategora == null) product.SetCategoryIDNull ();
ms product.CategoryID = categoryID.Value;
product.Discontinued = interrumpidas;
/ / Actualizar el registro del producto
int = rowsAffected Adapter.Update (producto);
/ / Devuelve verdadero si, precisamente, una fila se ha actualizado, si no falsa
volver rowsAffected == 1;
}
Paso +: 7laboracin de la 9ridVie0 editable
Co' la $pdateProduct so+recarga a"icio'al1 esta$os listos %ara crear 'uestro
e"ita+le 9ridVie0 . A+ra elCusto#i%ed$Iaspx %.gi'a e' el 7ditInsert2elete car%eta )
agregar u' 9ridVie0 co'trol al "ise=a"or. A co'ti'uaci!'1 cree u'
'ue3o 4b6ect2ata(ource "es"e el 9ridVie0 tag Ms i'telige'te. Co'5igurar
el 4b6ect2ata(ource %ara recu%erar la i'5or$aci!' "el %ro"ucto a tra3-s "e
la ProductD** clase 9etProducts () $-to"o ) %ara actuali0ar los "atos "el %ro"ucto
utili0a'"o la $pdateProduct so+recarga 6ue aca+a$os "e crear. De
la I/(7FT.F ) D4FF.F las %esta=as1 seleccio'e (/inguno) "e las listas "es%lega+les.
Figura + Con'igurar el 4b6ect2ata(ource para utili%ar la sobrecarga
$pdateProduct acaba de crear
Co$o he$os 3isto a lo largo "e los tutoriales "e $o"i5icaci!' "e "atos1 la si'tais
"eclarati3a %ara el4b6ect2ata(ource crea"o %or Microso5t 7isual Stu"io asig'a
el 4ldValuesPara#eterFor#at(tring %ro%ie"a"originalZ S,T . Esto1 %or su%uesto1 'o
3a a 5u'cio'ar co' 'uestra ca%a "e l!gica "e 'egocio )a 6ue 'uestros $-to"os 'o es%era'
6ue el origi'al ProductI2 3alor a %asar %ulg Por lo ta'to1 co$o lo he$os hecho e' los
tutoriales a'teriores1 to$e u' $o$e'to %ara eli$i'ar esta asig'aci!' "e la %ro%ie"a" "e la
si'tais "eclarati3a o1 e' su lugar1 esta+lecer el 3alor "e esta %ro%ie"a" a S,T .
Des%u-s "e este ca$+io1 el 4b6ect2ata(ource $arca"o Ms "eclarati3o "e+e te'er el
siguie'te as%ecto(
<Asp: ObjectDataSource ID = "ObjectDataSource1" runat = "server"
SelectMethod = "GetProducts" TypeName = "ProductsBLL"
UpdateMethod = "UpdateProduct">
<UpdateParameters>
<asp:Parameter Name="productName" tipo="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>
Te'ga e' cue'ta 6ue la 4ldValuesPara#eterFor#at(tring %ro%ie"a" se ha eli$i'a"o )
6ue 'o ha) u' par=#etro e' el$pdatePara#eters colecci!' %ara ca"a u'o "e los
%ar.$etros "e e'tra"a 6ue es%era' 'uestros $pdateProductso+recarga.
Mie'tras 6ue el 4b6ect2ata(ource est. co'5igura"o %ara actuali0ar s!lo u' su+co'#u'to
"e los 3alores "el %ro"ucto1 el9ridVie0 actual$e'te $uestra todos los %ro"uctos "e los
ca$%os. To$e u' $o$e'to %ara e"itar el 9ridVie0 "e $o"o 6ue(
S!lo i'clu)e el Product/a#e 1 (upplier/a#e 1 Category/a#e DoundField s )
el interru#pidas C"ecJDoxField.
El Category/a#e ) (upplier/a#e ca$%os a%are0ca' a'tes 8a la i06uier"a "e:
el interru#pidas C"ecJDoxField.
El Category/a#e ) (upplier/a#e DoundField s M AeaderText %ro%ie"a" se
esta+lece e' HCategorBaH ) HPro3ee"orH1 res%ecti3a$e'te.
So%orte "e e"ici!' est. acti3a"o 8co'sulte la edicin .cti!ar casilla "e 3eri5icaci!'
e' el 9ridVie0 tag Ms i'telige'te:.
Des%u-s "e estos ca$+ios1 el "ise=o ser. si$ilar a la Eigura ,1 co' el 9ridVie0 si'tais Ms
"eclarati3o se $uestra a co'ti'uaci!'.
Figura 1 )uitar los ca#pos Bue no sean necesarios desde el 9ridVie0
<Asp: GridView ID = "GridView1" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1">
<columnas>
<Asp: BoundField DataField = "ProductName"
HeaderText = "ProductName" SortExpression = "ProductName" />
<Asp: BoundField DataField = "CategoryName" HeaderText = "Categora"
ReadOnly = "True"
SortExpression = "CategoryName" />
<Asp: BoundField DataField = "SupplierName" HeaderText = "Proveedor"
ReadOnly = "True"
SortExpression = "SupplierName" />
<Asp: CheckBoxField DataField = "interrumpidas"
HeaderText = "interrumpidas" SortExpression = "interrumpidas" />
</ Columns>
</ Asp: GridView>
E' este %u'to1 el 9ridVie0 Ms "e s!lo lectura co$%orta$ie'to se ha co$%leta"o. Al
3isuali0ar los "atos1 ca"a %ro"ucto se re%rese'ta co$o u'a 5ila e' el 9ridVie0 1
$ostra'"o el 'o$+re "el %ro"ucto1 categorBa1 %ro3ee"or1 ) el esta"o sus%e'"i"o.
Figura 3 7l 9ridVie0 de slo lectura de la inter'a% se "a co#pletado
/ota: Co$o se e%lica e' Tutorial 16( >'a 3isi!' ge'eral "e &'serci!'1 actuali0aci!' )
eli$i'aci!' "e "atos1 es "e 3ital i$%orta'cia 6ue el 9ridVie0 Ms el esta"o "e 3ista est-
acti3a"o 8%or "e5ecto:. Si se esta+lece el 9ridVie0 Ms 7nableVie0(tate %ro%ie"a"
a 'also 1 se corre el riesgo "e te'er usuarios co'curre'tes si' 6uerer +orrar o e"itar
registros. 87er AD7ERTENC&A( %u'to "e co'curre'cia co' ASP.NET 2.0 Dri"7ie4s A
Details7ie4 A Eor$7ie4s 6ue la e"ici!' "e a%o)o ) A o eli$i'ar ) cu)a 3isi!' "el Esta"o
est. "esha+ilita"o%ara $.s i'5or$aci!'.:
Paso 1: $sar un 2rop2o0n*ist para la categorCa de
Pro!eedor de edicin e inter'aces
Recor"e$os 6ue el ProductsFo0 o+#eto
co'tie'e CategoryI2 1 Category/a#e 1 IdPro!eedor ) (upplier/a#e%ro%ie"a"es1 6ue
co'stitu)e' la actual cla3e eter'a "e los 3alores "e &D e' el los productos "e las ta+las )
el corres%o'"ie'te no#bre de los 3alores "e
la categorCas ) pro!eedores ta+las. El ProductFo0 Ms CategoryI2 )IdPro!eedor %ue"
e ser ta'to leer ) escri+ir1 $ie'tras 6ue el Category/a#e ) (upplier/a#e %ro%ie"a"es
est.' $arca"os "e s!lo lectura.
De+i"o a la co'"ici!' "e s!lo lectura "e la Category/a#e ) (upplier/a#e %ro%ie"a"es1
el corres%o'"ie'teDoundField s ha' te'i"o su Fead4nly %ro%ie"a" esta+leci"a
e' !erdad 1 la %re3e'ci!' "e estos 3alores 6ue se $o"i5i6ue cua'"o u'a 5ila est.
e"ita"o. A %esar "e 6ue %ue"e esta+lecer el Fead4nly %ro%ie"a" 'alsos 1 hacie'"o 6ue
el Category/a#e ) (upplier/a#e DoundField s co$o TextDox es "ura'te la e"ici!'1
este e'5o6ue "ar. lugar a u'a ece%ci!' cua'"o el usuario i'te'ta actuali0ar el %ro"ucto
)a 6ue 'o ha) $pdateProduct so+recarga 6ue to$a
e'Category/a#e ) (upplier/a#e e'tra"as. De hecho1 'o 6uere$os crear co$o u'a
so+recarga1 %or "os ra0o'es(
9os productos de la ta+la 'o tie'e (upplier/a#e o Category/a#e ca$%os1
%ero IdPro!eedor ) CategoryI2 .Por lo ta'to1 6uere$os 6ue 'uestro $-to"o %ara
%asar los 3alores "e &D e' %articular 'o1 sus 3alores "e las ta+las "e +<s6ue"a.
Re6uiere 6ue el usuario escri+a el 'o$+re "el %ro3ee"or o "e u'a categorBa 'o es la
i"eal1 )a 6ue re6uiere 6ue el usuario co'o0ca las categorBas "is%o'i+les ) los
%ro3ee"ores ) su ortogra5Ba correcta.
El %ro3ee"or ) los ca$%os "e categorBa "e+e $ostrar la categorBa ) los 'o$+res "e los
%ro3ee"ores1 cua'"o e' $o"o "e s!lo lectura 8co$o lo hace ahora: ) u'a lista "es%lega+le
"e o%cio'es "e a%licaci!' cua'"o se est. e"ita'"o. >so "e u'a lista "es%lega+le1 el usuario
5i'al %ue"e 3er r.%i"a$e'te cu.les so' las categorBas ) los %ro3ee"ores est.' "is%o'i+les
%ara elegir e'tre $.s 5.cil$e'te ) %ue"e hacer su selecci!'.
Para %ro%orcio'ar este co$%orta$ie'to1 te'e$os 6ue co'3ertir
el (upplier/a#e ) Category/a#e DoundField s e'Te#plateField s
cu)a Ite#Te#plate e$ite la (upplier/a#e ) Category/a#e 3alores )
cu)a 7ditIte#Te#plate utili0a u' 2rop2o0n*ist "e co'trol a la lista "e las categorBas
"is%o'i+les ) %ro3ee"ores.
.dicin de las categorCas y 2rop2o0n*ists
Pro!eedores
Co$ie'ce %or la co'3ersi!' "e la (upplier/a#e ) Category/a#e DoundField s
e' Te#plateField s hacie'"o clic e' el7ditar colu#nas e'lace "es"e el 9ridVie0 tag Ms
i'telige'te1 seleccio'a'"o el DoundField "e la lista e' la %arte i'5erior i06uier"a1 ) haga
clic e' el Con!ertir este ca#po en un Te#plateField e'lace. El %roceso "e co'3ersi!'
se crear. u'Te#plateField ta'to co' u' Ite#Te#plate ) u' 7ditIte#Te#plate 1 co$o
se $uestra e' la si'tais "eclarati3a a co'ti'uaci!'(
<asp:TemplateField HeaderText="Category" SortExpression="CategoryName">
<EditItemTemplate>
<Asp: ID Label = "Label1" runat = "server"
Texto ='<%# Eval ("NombreCategora") %>'></ asp: Label>
</ EditItemTemplate>
<ItemTemplate>
<Asp: ID Label = "Label1" runat = "server"
Texto ='<%# Bind ("NombreCategora") %>'></ asp: Label>
</ ItemTemplate>
</ Asp: TemplateField>
Des"e el DoundField se ha $arca"o co$o "e s!lo lectura1 ta'to e'
el Ite#Te#plate ) 7ditIte#Te#plate co'tie'e u'aetiBueta "e co'trol *e+
cu)o texto la %ro%ie"a" est. 3i'cula"a al ca$%o "e "atos a%lica+le 8 Category/a#e 1 e'
la si'tais $.s arri+a:. Te'e$os 6ue $o"i5icar el 7ditIte#Te#plate 1 e' sustituci!' "e
la etiBueta "e co'trol *e+ co' u'2rop2o0n*ist co'trol.
Co$o he$os 3isto e' tutoriales a'teriores1 la %la'tilla %ue"e ser e"ita"o %or el "ise=a"or o
"irecta$e'te "e la si'tais "eclarati3a. Para e"itar a tra3-s "el "ise=o1 haga clic e'
el 7ditar plantillas de e'lace "es"e el 9ridVie0 tag Ms i'telige'te ) "eci"e tra+a#ar co'
la categorCa "e ca$%o "e 7ditIte#Te#plate . @uite la etiBueta "e co'trol *e+ )
ree$%la0arlo co' u' 2rop2o0n*ist "e co'trol1 el esta+leci$ie'to "e
la 2rop2o0n*ist Ms I2 %ro%ie"a" "e las categorCas .
Figura - )uitar el cuadro de texto y agregar un 2rop2o0n*ist a la
7ditIte#Te#plate
A co'ti'uaci!' 'ecesita lle'ar el 2rop2o0n*ist co' las categorBas "is%o'i+les. Haga clic
e' el 7legir origen de datose'lace "e la 2rop2o0n*ist tag Ms i'telige'tes ) la o%ci!' "e
crear u' 'ue3o 4b6ect2ata(ource lla$a"oCategories2ata(ource .
Figura 8 Crear un nue!o control 4b6ect2ata(ource lla#ado
Categories2ata(ource
Para te'er esta 4b6ect2ata(ource retor'o "e to"as las categorBas1 se u'e' a
la CategoriesD** clase 9etCategories ()$-to"o.
Figura : 4bligar a la 4b6ect2ata(ource para 9etCategories la CategoriesD** ()
del #?todo
Por <lti$o1 co'5igure el 2rop2o0n*ist a#ustes Ms "e $o"o 6ue el Category/a#e ca$%o
se $uestra e' ca"a2rop2o0n*ist *istIte# co' el CategoryI2 "e ca$%o se utili0a co$o
3alor.
Figura ; )ue el ca#po Category/a#e en pantalla y el CategoryI2 se utili%a
co#o !alor
Des%u-s "e reali0ar estos ca$+ios1 el $arca"o "eclarati3o %ara la 7ditIte#Te#plate e'
el Category/a#eTe#plateField i'cluir. ta'to u' 2rop2o0n*ist )
u' 4b6ect2ata(ource (
<asp:TemplateField HeaderText="Category" SortExpression="CategoryName">
<EditItemTemplate>
<Asp: DropDownList ID = "Categoras" 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: ID Label = "Label1" runat = "server"
Texto ='<%# Bind ("NombreCategora") %>'></ asp: Label>
</ ItemTemplate>
</ Asp: TemplateField>
/ota: El 2rop2o0n*ist e' el 7ditIte#Te#plate "e+e te'er ha+ilita"a su esta"o "e
3ista. Pro'to se su$ar. "e e'lace "e "atos "e si'tais %ara el 2rop2o0n*ist si'tais Ms
"eclarati3a ) "e e'lace "e "atos co$a'"os co$o 7!al () ) Dind () s!lo %ue"e a%arecer e'
los co'troles 6ue el esta"o "e 3ista est. ha+ilita"o.
Re%ita estos %asos %ara agregar u' 2rop2o0n*ist lla$a"o Pro!eedores "e
la (upplier/a#e Te#plateField Ms7ditIte#Te#plate . Esto su%o'"r. la a"ici!' "e
u' 2rop2o0n*ist a la 7ditIte#Te#plate ) la creaci!' "e
otro4b6ect2ata(ource . 9os pro!eedores 2rop2o0n*ist Ms 4b6ect2ata(ource 1 si'
e$+argo1 se "e+e co'5igurar %ara i'3ocar la (uppliersD** clase 9et(uppliers
() $-to"o. A"e$.s1 co'5igurar los pro!eedores 2rop2o0n*ist %ara $ostrar
el Co#pany/a#e ca$%o ) el uso "e la IdPro!eedor ca$%o co$o el 3alor "e
su *istIte# s.
Des%u-s "e a=a"ir el 2rop2o0n*ist s "e las "os 7ditIte#Te#plate s1 la carga "e la
%.gi'a e' u' 'a3ega"or ) haga clic e' el 7ditar +ot!' %ara el %ro"ucto "el che5 A'to'
co'"i$e'to "e Ca#u'. Co$o $uestra la Eigura K $uestra1 la categorBa "el %ro"ucto ) el
%ro3ee"or "e las colu$'as se re%rese'ta' co$o listas "es%lega+les 6ue co'tie'e' las
categorBas "is%o'i+les ) los %ro3ee"ores %ara elegir. Si' e$+argo1 te'ga e' cue'ta 6ue
el rimero los ele$e'tos "e a$+as listas "es%lega+les se seleccio'a' %or "e5ecto 8co$o la
categorBa "e ;e+i"as ) lB6ui"os e!ticos co$o el %ro3ee"or:1 a %esar "e Ca#u' "el che5
A'to' co'"i$e'to es u' co'"i$e'to su$i'istra"a %or Ne4 Grlea's Ca#u' Delicias.
Figura < 7l pri#er ele#ento de la lista desplegable est= seleccionada por
de'ecto
A"e$.s1 si hace clic e' .ctuali%ar 1 uste" e'co'trar. 6ue el %ro"ucto
es CategoryI2 ) IdPro!eedor 3alores se esta+lece' e' /$** . A$+os "e estos
co$%orta$ie'tos 'o "esea"os se "e+e' a 6ue el 2rop2o0n*ist s e'
el7ditIte#Te#plate s 'o est.' 3i'cula"os a los ca$%os "e "atos a %artir "e los "atos "el
%ro"ucto su+)ace'te.
7nla%ar el 2rop2o0n*ists a los ca#pos de datos
CategoryI2 y IdPro!eedor
Co' el 5i' "e te'er la categorBa "e %ro"ucto e"ita"o ) %ro3ee"or listas "es%lega+les
esta+lece' e' los 3alores a"ecua"os ) 6ue estos 3alores e'3ia"os "e 3uelta a la ;99
es $pdateProduct $-to"o al hacer clic e' .ctuali%ar 1 te'e$os 6ue o+ligar a
la 2rop2o0n*ist s M (electedValue %ro%ie"a"es a
la CategoryI2 ) IdPro!eedor ca$%os "e "atos utili0a'"o "os 3Bas "e e'lace "e
"atos. Para lograr esto co' la CategorCas 2rop2o0n*ist 1 %ue"e agregar(electedValue
VLPW# Dind (@CategoryI2@)WQ L "irecta$e'te a la si'tais "eclarati3a.
Alter'ati3a$e'te1 se %ue"e esta+lecer el 2rop2o0n*ist Ms e'laces "e "atos $e"ia'te la
e"ici!' "e la %la'tilla a tra3-s "el "ise=o ) haga clic e' el 7ditar 2ataDindings e'lace
"es"e el 2rop2o0n*ist Ms eti6ueta i'telige'te. A co'ti'uaci!'1 i'"ica' 6ue
el (electedValue %ro%ie"a" "e+e estar 3i'cula"o a la CategoryI2 ca$%o utili0a'"o "os
3Bas "e e'lace "e "atos 83er Eigura 10:. Re%ita el %roceso sea "eclarati3o o el Dise=a"or "e
o+ligar a la IdPro!eedor ca$%o "e "atos alPro!eedores 2rop2o0n*ist .
Figura 1, 4bligar a la CategoryI2 a la propiedad del 2rop2o0n*ist
(electedValue utili%ando dos !Cas de enlace de datos
>'a 3e0 6ue los e'laces se ha' a%lica"o a la (electedValue %ro%ie"a"es "e los
"os 2rop2o0n*ist s1 la categorBa "el %ro"ucto e"ita"o ) colu$'as %ro3ee"or %or "e5ecto
a los 3alores "el %ro"ucto actual. Al hacer clic e' .ctuali%ar 1
elCategoryI2 ) IdPro!eedor 3alores "el ele$e'to "e lista "es%lega+le seleccio'a"o se
%asa a la $pdateProduct$-to"o. 9a 5igura 11 $uestra el tutorial "es%u-s "e las
"eclaracio'es "e e'lace "e "atos se ha' agrega"o1 'ota c!$o el "es%lega+le seleccio'a"o
ele$e'tos "e la lista "e Ca#u' "el che5 A'to' co'"i$e'to co'"i$e'tos correcta$e'te )
"elicias "e Nue3a Grlea's Ca#u'.
Figura 11 CategorCa actual del producto editado y los !alores de los pro!eedores
son seleccionados por de'ecto
Trata#iento de !alores /$**
El CategoryI2 ) IdPro!eedor colu$'as "e la Productos "e $esa %ue"e ser /$** 1 %ero
el 2rop2o0n*ist s e' el7ditIte#Te#plate s 'o i'clu)e' u' ele$e'to "e la lista %ara
re%rese'tar a u' /$** el 3alor. Esto tie'e "os co'secue'cias(
>suario 'o %ue"e utili0ar 'uestra i'ter5a0 %ara ca$+iar "e categorBa "e u' %ro"ucto
o %ro3ee"or "e u' 'oI/$** a u' 3alor /$** u'o.
Si u' %ro"ucto tie'e u' /$** CategoryI2 o IdPro!eedor 1 haga clic e'
el 7ditar +ot!' te'"r. co$o resulta"o u'a ece%ci!'. Esto es %or6ue el nulo 3alor
"e3uelto %or CategoryI2 8o IdPro!eedor : e' el Dind () "eclaraci!' 'o se asig'a a
u' 3alor e' el 2rop2o0n*ist 8el 2rop2o0n*ist %ro"uce u'a ece%ci!' cua'"o
su (electedValue%ro%ie"a" se esta+lece e' u' 3alor no e' su colecci!' "e
ele$e'tos "e la lista :.
A 5i' "e a%o)ar /$** CategoryI2 ) IdPro!eedor 3alores1 te'e$os 6ue a=a"ir
otro *istIte# a ca"a 2rop2o0n*ist%ara re%rese'tar el !alor /$** 3alor. E' Tutorial Z(
Maestro A Detalle "e 5iltra"o co' u' Dro%Do4'9ist 1 3i$os c!$o agregar u' a"icio'al
"e *istIte# a u' e'lace "e "atos 2rop2o0n*ist 1 6ue i$%lic! la colocaci!'
"e 2rop2o0n*ist Ms.ppend2ataDoundIte#s %ro%ie"a" real ) agregar $a'ual$e'te
los a"icio'ales *istIte# . E' ese tutorial a'terior1 si' e$+argo1 he$os a=a"i"o
u' *istIte# co' u' !alor "e K1 . 9a l!gica "e e'lace "e "atos e' ASP.NET1 si' e$+argo1 se
co'3ertir. auto$.tica$e'te e' u'a ca"e'a e' +la'co a u' /$** el 3alor ) 3ice3ersa. Por
lo ta'to1 %ara este tutorial1 6uere$os 6ue el *istIte# Ms !alor a u'a ca"e'a 3acBa.
Co$ie'ce %or esta+lecer "os 2rop2o0n*ist s
M .ppend2ataDoundIte#s %ro%ie"a" real . A co'ti'uaci!'1 agregue
el/$** *istIte# $e"ia'te la a"ici!' "e las siguie'tes Pasp:*istIte#Q ele$e'to a
ca"a 2rop2o0n*ist %ara 6ue el $arca"o "eclarati3o se %arece a lo siguie'te(
<Asp: DropDownList ID = "Categoras" runat = "server"
DataSourceID = "CategoriesDataSource" DataTextField = "CategoryName"
DataValueField = "CategoryID" SelectedValue ='<%# Bind ("CategoryID")%> '
AppendDataBoundItems = "True">
<asp:ListItem value=""> (Ninguno) </ asp: ListItem>
</ Asp: DropDownList>
He o%ta"o %or utili0ar H8'i'gu'o:H co$o el texto "e este 3alor *istIte# 1 %ero se %ue"e
ca$+iar %ara ser ta$+i-' u'a ca"e'a e' +la'co si lo "esea.
/ota: Co$o 3i$os e' el Tutorial Z( Maestro A Detalle "e 5iltra"o co' u'
Dro%Do4'9ist 1 *istIte# s se %ue"e agregar a u' 2rop2o0n*ist $e"ia'te el "ise=a"or1
haga clic e' el 2rop2o0n*ist Ms ele#entos de la %ro%ie"a" e' la 3e'ta'a "e
Pro%ie"a"es 86ue $uestra la *istIte# E"itor "e la colecci!': . Si' e$+argo1 aseg<rese "e
agregar el /$** *istIte# %ara este tutorial a tra3-s "e la si'tais "eclarati3a. Si utili0a
el *istIte# E"itor "e la colecci!'1 la si'tais "eclarati3a ge'era"o o$itir el !alor a#uste
%or co$%leto cua'"o se asig'a u'a ca"e'a e' +la'co1 la creaci!' "e $arca"o "eclarati3o
co$oPasp:*istIte#Q (/inguno) PI asp: *istIte#Q . Si +ie' esto %ue"e %arecer
i'o5e'si3a1 la 5alta de !alorhace 6ue el 2rop2o0n*ist %ara utili0ar el texto 3alor "e la
%ro%ie"a" e' su lugar. Eso sig'i5ica 6ue si esta /$** *istIte# est. seleccio'a"o1 el 3alor
H8'i'gu'o:H se i'te'tar. 6ue se asig'ar. a la CategoryI2 1 lo 6ue resultar. e' u'a
ece%ci!'. Esta+lecie'"o e%lBcita$e'te !alue V @@ 1 u' /$** el 3alor ser. asig'a"o
a CategoryI2 cua'"o el /$** *istIte# est. seleccio'a"o.
Re%ita estos %asos %ara los Pro3ee"ores 2rop2o0n*ist .
Co' este a"icio'al *istIte# 1 la i'ter5a0 "e e"ici!' Ahora %ue"e asig'ar /$** a los 3alores
"e u' Pro"ucto CategoryI2) IdPro!eedor ca$%os1 co$o se $uestra e' la Eigura 12.
Figura 1+ (eleccionar (/inguno) para asignar un !alor /$** para la categorCa de
un producto o pro!eedor
Paso 3: $so de co#ponentes FadioDutton para el
estado interru#pidas
E' la actuali"a"1 los %ro"uctos discontinuados ca$%o "e "atos se e%resa co'
u' C"ecJDoxField 1 6ue re%rese'ta u'a casilla "e 3eri5icaci!' "esacti3a"a %ara las 5ilas
"e s!lo lectura ) u'a casilla "e 3eri5icaci!' ha+ilita"o %ara la 5ila 6ue est. sie'"o
e"ita"a. Au'6ue esta i'ter5a0 "e usuario es a $e'u"o a"ecua"a1 %o"e$os %erso'ali0ar si
es 'ecesario utili0ar u' Te#plateField . Para este tutorial1 3a$os a ca$+iar
la C"ecJDoxField e' u' Te#plateField 6ue utili0a u'FadioDutton*ist "e co'trol co'
"os o%cio'es1 HActi3oH ) Hi'terru$%i"asH1 "e la cual el usuario %ue"e es%eci5icar 6ue el
%ro"ucto est. descatalogado 3alor.
Co$ie'ce %or la co'3ersi!' "e la interru#pidas C"ecJDoxField e' u' Te#plateField 1
lo 6ue crear. u' Te#plateFieldco' u' Ite#Te#plate ) 7ditIte#Te#plate . A$+os
$o"elos i'clu)e' u' C"ecJDox co' su C"eBueado %ro%ie"a" liga"a a
la interru#pidas ca$%o "e "atos1 la <'ica "i5ere'cia e'tre los "os es 6ue
el Ite#Te#plate Ms C"ecJDox Ms.cti!ado %ro%ie"a" est. esta+leci"a e' 'also .
7uel3a a colocar el C"ecJDox 1 ta'to e' el Ite#Te#plate ) 7ditIte#Te#plate co'
u' FadioDutton*ist "e co'trol1 el esta+leci$ie'to "e los FadioDutton*ist s
M I2 %ro%ie"a"es 2iscontinuedC"oice . A co'ti'uaci!'1 i'"ica' 6ue elFadioDutton*ist s
6ue co'tie'e' ca"a u'o "os +oto'es1 u'o lla$a"o Hacti3oH co' u' 3alor "e H5alsasH ) u'a
eti6ueta Hi'terru$%i"asH co' u' 3alor "e HTrueH. Para lograr esto1 uste" %ue"e e'trar e'
el Pasp:*istIte#Q ele$e'tos "irecta$e'te a tra3-s "e la si'tais "eclarati3a o utili0ar
el *istIte# E"itor "e la colecci!' "e la "ise=a"ora. 9a 5igura 1, $uestra el *istIte# E"itor
"e la colecci!' "es%u-s "e las "os o%cio'es "e +ot!' "e ra"io se ha' es%eci5ica"o.
Figura 11 .5adir @.cti!o@ y opciones @interru#pidas@ al FadioDutton*ist
Des"e el FadioDutton*ist e' el Ite#Te#plate 'o "e+e ser e"ita+le1 esta+le0ca
su .cti!ado %ro%ie"a" a 'also 1 "e#a'"o a los "abilitados "e %ro%ie"a" "e !erdad 8%or
"e5ecto: %ara los FadioDutton*ist e' el 7ditIte#Te#plate .Esto har. 6ue los +oto'es
"e ra"io e' la 5ila 'o e"ita"os co$o "e s!lo lectura1 %ero %er$itir. al usuario ca$+iar
elFadioDutton los 3alores "e la 5ila e"ita"a.
To"a3Ba te'e$os 6ue asig'ar el FadioDutton*ist co'troles H (electedValue %ro%ie"a"es
"e $a'era 6ue el +ot!' "e ra"io se seleccio'a +as.'"ose e' el
%ro"ucto descatalogado ca$%o "e "atos. Al igual 6ue co' el 2rop2o0n*ist s ea$i'!
a'terior$e'te e' este tutorial1 esta si'tais "e e'lace "e "atos se %ue"e' a=a"ir
"irecta$e'te e' el $arca"o "eclarati3o o %or $e"io "e la edicin 2ataDindings e'lace
e' el FadioDutton*ist s Meti6uetas i'telige'tes.
Des%u-s "e agregar los "os FadioDutton*ist s ) su co'5iguraci!'1
el interru#pidas Te#plateField $arca"o Ms "eclarati3o "e+e te'er el siguie'te as%ecto(
<asp:TemplateField HeaderText="Discontinued" SortExpression="Discontinued">
<ItemTemplate>
<Asp: RadioButtonList ID = "DiscontinuedChoice" runat = "server"
Enabled = "false" SelectedValue ='<%# Bind ("interrumpidas")%> '>
<asp:ListItem Value="False"> activo </ asp: ListItem>
<asp:ListItem value="true"> interrumpidas </ asp: ListItem>
</ Asp: RadioButtonList>
</ ItemTemplate>
<EditItemTemplate>
<Asp: RadioButtonList ID = "DiscontinuedChoice" runat = "server"
SelectedValue ='<%# Bind ("interrumpidas")%> '>
<asp:ListItem Value="False"> activo </ asp: ListItem>
<asp:ListItem value="true"> interrumpidas </ asp: ListItem>
</ Asp: RadioButtonList>
</ EditItemTemplate>
</ Asp: TemplateField>
Co' estos ca$+ios1 los descatalogados colu$'a se ha tra's5or$a"o "e u'a lista "e
casillas "e 3eri5icaci!' a u'a lista "e %ares "e +oto'es "e o%ci!' 83er 5igura 1/:. Al e"itar
u' %ro"ucto1 el +ot!' "e ra"io est. seleccio'a"o ) el esta"o sus%e'"i! el %ro"ucto se
%ue"e actuali0ar seleccio'a'"o el +ot!' "e ra"io ) hacie'"o clic e' .ctuali%ar .
Figura 13 *as casillas de !eri'icacin interru#pidas "an sido sustituidos por
pares botn de radio
/ota: Da"o 6ue el interru#pidas e' la colu$'a "e productos de +ase "e "atos 'o
%ue"e te'er /$**3alores1 'o tie'e 6ue %reocu%arse acerca "e la
ca%tura /$** i'5or$aci!' e' la i'ter5a0. Si' e$+argo1 siinterru#pidas colu$'a %ue"e
co'te'er /$** los 3alores 6ue 'os gustarBa a=a"ir u' +ot!' "e ra"io tercero e' la lista co'
su !alor esta+leci"o e' u'a ca"e'a 3acBa 8 !alor V @@ :1 al igual 6ue co' la categorBa ) el
%ro3ee"or 2rop2o0n*ist s.
Conclusin
Mie'tras 6ue el DoundField ) C"ecJDoxField auto$.tica$e'te 6ue "e s!lo lectura1 la
e"ici!' ) la i'serci!' "e las i'ter5aces1 6ue carece' "e la ca%aci"a" "e %erso'ali0aci!'. A
$e'u"o1 si' e$+argo1 te'"re$os 6ue %erso'ali0ar la i'ter5a0 "e e"ici!' o i'serci!'1 tal
3e0 a=a"ie'"o co'troles "e 3ali"aci!' 8co$o 3i$os e' el tutorial a'terior: o $e"ia'te la
%erso'ali0aci!' "e la i'ter5a0 "e usuario "e reco%ilaci!' "e "atos 8co$o he$os 3isto e'
este tutorial:.Perso'ali0aci!' "e la i'ter5a0 co' u' Te#plateField se %ue"e resu$ir e' los
siguie'tes %asos(
1. A=a"ir u' Te#plateField o co'3ertir u' DoundField o C"ecJDoxField e'
u' Te#plateField .
2. E'ri6uecer la i'ter5a01 seg<' sea 'ecesario.
,. Se u'e' los ca$%os "e "atos a%ro%ia"os a los co'troles *e+ 6ue aca+a "e agregar
el uso "e "os 3Bas "e e'lace "e "atos.
A"e$.s "e utili0ar el i'cor%ora"o e' los co'troles ASP.NET *e+1 ta$+i-' %ue"e
%erso'ali0ar las %la'tillas "e u'Te#plateField co' la costu$+re1 co$%ila"o co'troles "e
ser3i"or ) co'troles "e usuario.
EN ESTE CAPITULO SALIO: Error de servidor en '/'
Application.
S&N T>TGR&A9 N>MERG( 21 CS ` 7isual C#
Tutorial ++: .dicin del lado del cliente la
con'ir#acin al eli#inar

Scott Mitchell
0/ 200Z
Fesu#en: Este es el Visual C # tutorial. 8 Ca$+ie al tutorial "e 7isual ;asic .: E' las
i'ter5aces 6ue he$os crea"o hasta ahora1 u' usuario %ue"e acci"e'tal$e'te eli$i'ar los
"atos hacie'"o clic e' el 7li#inar +ot!' cua'"o la i'te'ci!' "e hacer clic e'
el 7ditar +ot!'. E' este tutorial1 3a$os a a=a"ir u' cua"ro "e co'5ir$aci!' "el la"o "el
clie'te "e "i.logo 6ue a%arece cua'"o el 7li#inar +ot!' es %ulsa"o. 8Z %.gi'as i$%resas:
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial ++ (Visual C #)
&'tro"ucci!'
Paso 1( Creaci!' "e u' Eor$7ie4 6ue a"$ite la eli$i'aci!'
Paso 2( 9la$ar al co'5ir$ar 8ca"e'a: 9a 5u'ci!' "el e3e'to o'clic? "el la"o "el clie'te "e
u' +ot!' Eli$i'ar
Paso ,( Co'5iguraci!' "e la Pro%ie"a" G'Clie'tClic? %ara el +ot!' Eli$i'ar e' u'
Co$$a'"Eiel"
Co' Te$%lateEiel"s
Co'clusi!'
Introduccin
A tra3-s "e los tutoriales "e 3arios a=os1 he$os 3isto c!$o utili0ar la ar6uitectura "e
a%licacio'es1 4b6ect2ata(ource 1 ) los co'troles *e+ "e "atos e' co'#u'to %ara
%ro%orcio'ar la i'serci!'1 e"ici!' ) eli$i'aci!' "e las ca%aci"a"es. 9as i'ter5aces "e +orrar
6ue he$os ea$i'a"o hasta ahora ha' si"o co$%uesta %or u' 7li#inar +ot!' 6ue1
cua'"o se hace clic1 %ro"uce u'a "e3oluci!' "e "atos e i'3oca
el 4b6ect2ata(ource Ms 7li#inar () $-to"o. 9a 7li#inar () $-to"o se i'3oca el $-to"o
"e co'5iguraci!' "e la ca%a "e l!gica e$%resarial1 6ue se %ro%aga la lla$a"a hasta la ca%a
"e acceso a "atos1 la e$isi!' "e la actual 27*7T7 "eclaraci!' a la +ase "e "atos.
Au'6ue esta i'ter5a0 "e usuario %er$ite a los 3isita'tes %ara eli$i'ar los registros a tra3-s
"el 9ridVie0 1 2etailsVie0o For#Vie0 co'trol1 carece "e cual6uier ti%o "e co'5ir$aci!'
cua'"o el usuario hace clic e' el 7li#inar +ot!'. Si u' usuario hace clic e' el
acci"e'te 7li#inar el +ot!' cua'"o se %rete'"e hacer clic e' 7ditar 1 el registro se
re5erBa' al "Ba e' 3e0 ser.' +orra"os. Para e3itar esto1 e' este tutorial1 3a$os a a=a"ir u'
cua"ro "e co'5ir$aci!' "el la"o "el clie'te "e "i.logo 6ue a%arece cua'"o
el 7li#inar +ot!' es %ulsa"o.
El Ya3aScri%t con'ir#ar ( cadena ) 5u'ci!' $uestra su %ar.$etro "e e'tra"a co$o la
ca"e'a "e teto "e'tro "e u' cua"ro "e "i.logo $o"al 6ue 3ie'e e6ui%a"o co' "os
+oto'es( .ceptar ) Cancelar 83er Eigura 1:. 9a con'ir#acin (cadena ) "e3uel3e u'
3alor +oolea'o1 "e%e'"ie'"o "e lo 6ue se hace clic e' el +ot!' 8 cierto 1 si el usuario hace
clic e'.ceptar 1 ) 'alsa 1 si el usuario hace clic e' Cancelar :.
Figura 1 7l Ga!a(cript con'ir#ar ( cadena ) #uestra un #?todo #odal> del lado
del cliente cuadro de #ensa6e
Dura'te u'a %rese'taci!' 5or$a1 si u' 3alor "e 'also se "e3uel3e "es"e u' co'trola"or "e
e3e'tos "el la"o "el clie'te1 el e'3Bo "el 5or$ulario se ha ca'cela"o. Co' esta 5u'ci!'1
%o"e$os te'er la 7li#inacin "el +ot!' "el la"o "el clie'teonclicJ co'trola"or "e
e3e'tos "e3uel3e el 3alor "e u'a lla$a"a a con'ir#ar (@]7st= seguro Bue desea
eli#inar este producto^@) . Si el usuario hace clic e' Cancelar 1 con'ir#ar
( cadena ) "e3ol3er. 5alse1 lo 6ue %ro3oca el e'3Bo "el 5or$ulario %ara ca'celar. Si'
"e3oluci!'1 el %ro"ucto cu)a 7li#inar +ot!' se hi0o clic 'o se eli$i'ar.'. Si' e$+argo1 si
el usuario hace clic e' .ceptar e' el cua"ro "e "i.logo "e co'5ir$aci!'1 la "e3oluci!' "e
"atos seguir. su curso ) el %ro"ucto ser.' eli$i'a"os. Co'sulte >so "e Ya3aScri%t
co'5ir$ar 8: "el $-to"o "e co'trol "e e'3Bo "e 5or$ularios %ara o+te'er $.s i'5or$aci!'
so+re esta t-c'ica.
A=a"ir la 'ecesaria scri%t "e clie'te "i5iere ligera$e'te1 si el uso "e %la'tillas1 "e cua'"o
se utili0a u' Co##andField .Por lo ta'to1 e' este tutorial1 3a$os a 3er ta'to
u' For#Vie0 ) 9ridVie0 e#e$%lo.
/ota: Co' el la"o "el clie'te t-c'icas "e co'5ir$aci!'1 co$o los 6ue e' este tutorial1 se
su%o'e 6ue los usuarios lo 3isite' co' 'a3ega"ores 6ue so%orta' Ya3aScri%t ) 6ue tie'e' el
c!"igo Ya3aScri%t ha+ilita"o.Si cual6uiera "e estos su%uestos 'o se a%lica a u' usuario e'
%articular1 haga clic e' el 7li#inar +ot!' i'$e"iata$e'te har. u'a "e3oluci!' "e "atos
8'o se $uestra u' $e'sa#e "e co'5ir$aci!':.
Paso 1: Creacin de un For#Vie0 Bue ad#ite la
eli#inacin
Co$ie'ce %or la a"ici!' "e u' For#Vie0 a la %.gi'a "e Co'5ir$atio'G'Delete.as% e' la
car%eta E"it&'sertDelete1 6ue 3i'cule a u' 'ue3o 4b6ect2ata(ource 6ue tira "e la
i'5or$aci!' "el %ro"ucto a tra3-s "e la ProductsD** clase9etProducts
() $-to"o. A"e$.s1 co'5igurar el 4b6ect2ata(ource 1 %or lo 6ue
el ProductsD** clase 2eleteProduct (ProductI2) $-to"o se asig'a a
la 4b6ect2ata(ource Ms 7li#inar () $-to"o. Aseg<rese "e 6ue
la I/(7FT.F ).CT$.*IX.F "es%lega+le %esta=as Mlistas se esta+lece'
e' (/inguno) . Por <lti$o1 co$%rue+e la paginacin .cti!arcasilla "e 3eri5icaci!' e'
el For#Vie0 tag Ms i'telige'te.
Des%u-s "e estos %asos1 el 'ue3o 4b6ect2ata(ource $arca"o Ms "eclarati3a se 3er.
co$o la siguie'te(
<Asp: ObjectDataSource ID = "ObjectDataSource1" runat = "server"
DeleteMethod = "DeleteProduct" OldValuesParameterFormatString = "original_ {0}"
SelectMethod = "GetProducts" TypeName = "ProductsBLL">
<DeleteParameters>
<asp:Parameter Name="productID" Type="Int32" />
</ DeleteParameters>
</ Asp: ObjectDataSource>
Co$o e' los e#e$%los "el %asa"o 6ue 'o utili0aro' la co'curre'cia o%ti$ista1 to$e u'
$o$e'to %ara li$%iar
el4b6ect2ata(ource Ms 4ldValuesPara#eterFor#at(tring %ro%ie"a".
La 6ue se ha u'i"o a u' 4b6ect2ata(ource "e co'trol 6ue s!lo es co$%ati+le co' la
eli$i'aci!'1 el For#Vie0 MsIte#Te#plate o5rece s!lo la 7li#inacin "e la 5alta "e
+oto'es /ue!o ) actuali%acin de los +oto'es. El For#Vie0$arca"o Ms "eclarati3a1 si'
e$+argo1 i'clu)e u'a su%er5lua 7ditIte#Te#plate ) InsertIte#Te#plate 1 6ue se
%ue"e 6uitar. T!$ese u' $o$e'to %ara %erso'ali0ar el Ite#Te#plate 1 %ara 6ue $uestre
s!lo u' su+co'#u'to "e los "atos "el %ro"ucto ca$%os. He co'5igura"o la $i'a %ara
$ostrar el 'o$+re "el %ro"ucto e' u' P"1Q tBtulo %or e'ci$a "e su %ro3ee"or ) los
'o$+res "e categorBa 8#u'to co' el 7li#inar +ot!':.
<Asp: FormView ID = "FormView1" AllowPaging = "True" DataKeyNames = "ProductID"
DataSourceID = "ObjectDataSource1" runat = "server">
<ItemTemplate>
<h3> <i> <% # Eval ("ProductName")%> </ i> </ h3>
<b> Categora: </ b>
<Asp: Label = ID "CategoryNameLabel" runat = "server"
Texto ='<%# Eval ("NombreCategora")%> '>
</ Asp: Label> <br />
<b> Proveedor: </ b>
<Asp: Label = ID "SupplierNameLabel" runat = "server"
Texto ='<%# Eval ("SupplierName")%> '>
</ Asp: Label> <br />
<Asp: LinkButton ID = "DeleteButton" runat = "server"
CausesValidation = "false"
CommandName = "Delete" Text = "Eliminar">
</ Asp: LinkButton>
</ ItemTemplate>
</ Asp: FormView>
Co' estos ca$+ios1 te'e$os u'a %.gi'a 4e+ co$%leta$e'te 5u'cio'al 6ue %er$ite al
usuario alter'ar e'tre los %ro"uctos u'o a la 3e01 co' la ca%aci"a" "e eli$i'ar u' %ro"ucto
co' s!lo hacer clic e' el 7li#inar +ot!'. 9a 5igura 2 $uestra u'a ca%tura "e %a'talla "e
'uestro %rogreso hasta ahora cua'"o se 3e a tra3-s "e u' 'a3ega"or.
Figura + 7l For#Vie0 #uestra in'or#acin sobre un solo producto
Paso +: *la#ar al con'ir#ar ( cadena ) *a 'uncin del
e!ento onclicJ del lado del cliente de un botn de
7li#inar
Co' el For#Vie0 crea"o1 el <lti$o %aso es co'5igurar el 7li#inar +ot!' "e tal $a'era
6ue cua'"o se hace clic e' -l %or el 3isita'te1 el c!"igo Ya3aScri%t con'ir#ar
( cadena ) se i'3oca la 5u'ci!'. A"ici!' "e scri%t "e clie'te %ara el la"o "el
clie'te onclicJ caso "e u' botn 1 *inJDutton o I#ageDutton se %ue"e lograr a tra3-s
"el uso "e la %ro%ie"a" G'Clie'tClic? 1 6ue es 'ue3o e' ASP.NET 2.0. Por6ue 6uere$os
te'er el 3alor "e la con'ir#acin ( cadena ) "e3uel3e la 5u'ci!'1 s!lo esta+lece esta
%ro%ie"a" e'( !ol!er con'ir# (L]7st= seguro Bue desea eli#inar este producto^L)_
Des%u-s "e este ca$+io1 el 7li#inar *inJDutton si'tais Ms "eclarati3a "e+erBa ser algo
co$o lo siguie'te(
<Asp: LinkButton ID = "DeleteButton" runat = "server" CausesValidation = "false"
CommandName = "Delete" Text = "Eliminar"
OnClientClick = "return confirm ('Est seguro que desea eliminar este
producto ?');">
</ Asp: LinkButton>
Eso es to"o lo 6ue ha) 6ue hacerC 9a Eigura , $uestra u'a ca%tura "e %a'talla "e esta
co'5ir$aci!' "e la acci!'. Al hacer clic e' el 7li#inar +ot!' a+re el cua"ro "e "i.logo "e
co'5ir$aci!'. Si el usuario hace clic e' Cancelar 1 se ca'cela la "e3oluci!' "e "atos ) el
%ro"ucto 'o se eli$i'a. Si' e$+argo1 si el usuario hace clic e' .ceptar 1 la "e3oluci!' "e
"atos co'ti'<a ) el 4b6ect2ata(ource Ms 7li#inar () es lla$a"o1 el 6ue cul$i'! e' el
registro "e la +ase "e ser eli$i'a"os.
/ota: 9a ca"e'a %as! a con'ir#ar ( cadena ) "e Ya3aScri%t se "eli$ita co' a%!stro5es
8e' lugar "e las co$illas:. E' Ya3aScri%t1 las ca"e'as se %ue"e' "eli$itar co' cual6uier
%erso'a#e. >tili0a$os a%!stro5es a6uB1 %ara 6ue los "eli$ita"ores "e la ca"e'a %as!
a con'ir#ar ( cadena ) 'o i'tro"uce' u'a a$+igSe"a" co' los "eli$ita"ores utili0a"os
%ara la 4nClientClicJ 3alor "e la %ro%ie"a".
Figura 1 *a con'ir#acin se #uestra a"ora al "acer clic en el botn 7li#inar
Paso 1: Con'iguracin de la Propiedad 4nClientClicJ
para el botn 7li#inar en un Co##andField
Cua'"o se tra+a#a co' u' botn 1 *inJDutton o I#ageDutton "irecta$e'te e' u'a
%la'tilla1 u' cua"ro "e "i.logo "e co'5ir$aci!' se %ue"e asociar co' ella s!lo %or la
co'5iguraci!' "e su 4nClientClicJ %ro%ie"a" %ara "e3ol3er los resulta"os "e la
Ya3aScri%t con'ir#ar ( cadena ) la 5u'ci!'. Si' e$+argo1 el Co##andField 1 6ue agrega
u' ca$%o "e7li#inar +oto'es a u' 9ridVie0 o 2etailsVie0 1 'o tie'e
u' 4nClientClicJ %ro%ie"a"es 6ue %ue"e' esta+lecerse $e"ia'te "eclaraci!'. E' su
lugar1 "e+e hacer re5ere'cia a la %rogra$aci!' 7li#inar +ot!' e'
el 9ridVie0 o2etailsVie0 Ms a%ro%ia"o 2ataDound co'trola"or "e e3e'tos1 ) luego
"e5i'ir su 4nClientClicJ %ro%ie"a" allB.
/ota: Al esta+lecer el 7li#inar +ot!' 4nClientClicJ %ro%ie"a" e' la
corres%o'"ie'te 2ataDoundco'trola"or "e e3e'tos1 te'e$os acceso a los "atos 6ue te'Ba
6ue el registro actual. Esto sig'i5ica 6ue se %ue"e ete'"er el $e'sa#e "e co'5ir$aci!'
%ara i'cluir "etalles so+re el registro e' %articular1 co$o %or e#e$%lo1 HJEst. seguro 6ue
"esea eli$i'ar el %ro"ucto ChaiRH Perso'ali0aci!'1 ta$+i-' es %osi+le e' las %la'tillas "e
e'lace "e "atos utili0a'"o la si'tais.
Para %racticar el a#uste 4nClientClicJ %ro%ie"a" %ara el 7li#inar +ot!' 8s: e'
u' Co##andField 1 3a$os a agregar u'9ridVie0 a la %.gi'a. Co'5igurar
este 9ridVie0 %ara utili0ar el $is$o 4b6ect2ata(ource co'trol 6ue
el For#Vie0utili0a. Por otra %arte1 li$itar el 9ridVie0 Ms DoundField s %ara i'cluir s!lo el
'o$+re "el %ro"ucto1 categorBa1 ) el %ro3ee"or. Por <lti$o1 co$%rue+e el Aabilitar
eli#inacin "e la casilla "e 3eri5icaci!' 9ridVie0 tag Ms i'telige'te. Esto agregar.
u'a Co##andField a la 9ridVie0 Ms colu#nas "e recogi"a1 co'
su ("o02eleteDutton %ro%ie"a" esta+leci"a e' !erdad .
Des%u-s "e reali0ar estos ca$+ios1 el 9ridVie0 $arca"o "eclarati3o Ms "e+e' te'er el
siguie'te as%ecto(
<Asp: GridView ID = "GridView1" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1">
<columnas>
<asp:CommandField ShowDeleteButton="True" />
<Asp: BoundField DataField = "ProductName" HeaderText = "Producto"
SortExpression = "ProductName" />
<Asp: BoundField DataField = "CategoryName" HeaderText = "Categora"
ReadOnly = "True"
SortExpression = "CategoryName" />
<Asp: BoundField DataField = "SupplierName" HeaderText = "Proveedor"
ReadOnly = "True"
SortExpression = "SupplierName" />
</ Columns>
</ Asp: GridView>
El Co##andField co'tie'e u' <'ico 7li#inar *inJDutton e#e$%lo 6ue se %ue"e acce"er
$e"ia'te %rogra$aci!' a %artir "e la 9ridVie0 Ms Fo02ataDound co'trola"or "e
e3e'tos. Ta' %ro'to co$o se le hace re5ere'cia1 se %ue"e esta+lecer
su 4nClientClicJ %ro%ie"a" e' co'secue'cia. Crear u' co'trola"or "e e3e'tos %ara
el Fo02ataDounde3e'to $e"ia'te el siguie'te c!"igo(
protected void GridView1_RowDataBound (object sender, GridViewRowEventArgs e)
{
si (== e.Row.RowType DataControlRowType.DataRow)
{
/ / Eliminar la referencia del LinkButton
LinkButton db = (LinkButton) e.Row.Cells [0] Controles [0].;
/ / Obtener informacin sobre el producto vinculado a la fila
Northwind.ProductsRow producto =
(Northwind.ProductsRow) ((System.Data.DataRowView)
. e.Row.DataItem) la fila;
db.OnClientClick = String.Format (
"Return confirm ('Est seguro que desea eliminar el {0}
producto ?');",
product.ProductName.Replace ("'", @ "\'"));
}
}
Este co'trola"or "e e3e'tos tra+a#a co' las lB'eas "e "atos 8los 6ue tie'e'
el 7li#inar +ot!': ) co$ie'0a co' la re5ere'cia a la %rogra$aci!' 7li#inar +ot!'. E'
ge'eral1 utilice el siguie'te %atr!'(
ButtonType obj = (ButtonType)
e.Row.Cells [commandFieldIndex] Controles [controlIndex].;
DuttonType es el ti%o "e +ot!' 6ue se utili0a %or
el Co##andField ( botn 1 *inJDutton o I#ageDutton . Por "e5ecto1
el Co##andField utili0a *inJDutton s1 %ero esto %ue"e ser %erso'ali0a"o a tra3-s "e
la Co##andField Ms%ro%ie"a" ;utto'T)%e . El co##andFieldIndex es el B'"ice or"i'al
"e la Co##andField e' el 9ridVie0 Ms colu#nas"e recogi"a1 $ie'tras 6ue
el controlIndex es el B'"ice "e la 7li#inacin "e +ot!' "e'tro "e
la Co##andField Mscontroles colecci!'. El controlIndex 3alor "e%e'"e "e la %osici!' e'
relaci!' co' otros +oto'es e' el el +ot!' "eCo##andField . Por e#e$%lo1 si el +ot!' s!lo
se $uestra e' la Co##andField es el 7li#inar +ot!'1 se utili0a u' B'"ice "e 0. Si'
e$+argo1 si ha) u'a edicin 6ue %rece"e al +ot!' 7li#inar +ot!'1 se utili0a u' B'"ice "e
2. 9a ra0!' se utili0a u' B'"ice "e 2 es 6ue los "os co'troles se agrega' %or
el Co##andField a'tes "e 6ue el 7li#inar +ot!'( la7dicin de +ot!'1 )
u' *iteralControl 6ue se utili0a %ara a=a"ir u' %oco "e es%acio e'tre
la edicin ) 7li#inar+oto'es.
Para 'uestro e#e$%lo %articular1 la Co##andField utili0a *inJDutton s )1 "e ser el
ca$%o $.s a la i06uier"a1 tie'e u'co##andFieldIndex "e 0. Por6ue 'o ha) otros
+oto'es1 %ero el 7li#inar +ot!' "e la Co##andField 1 se utili0a u'controlIndex "e 0.
Des%u-s "e hacer re5ere'cia a la Dorrar +ot!' e' el Co##andField 1 el %r!i$o coger
i'5or$aci!' so+re el %ro"ucto liga"o a la actual 9ridVie0 5ila. Ei'al$e'te1 se esta+lece
el 7li#inar +ot!' 4nClientClicJ %ro%ie"a" a la a"ecua"a Ya3aScri%t1 el cual i'clu)e el
'o$+re "el %ro"ucto. De+i"o a 6ue la ca"e'a "e Ya3aScri%t %as! a con'ir#ar
( cadena )es la 5u'ci!' "eli$ita"a utili0ar los %ro'o$+res1 ha) 6ue esca%ar a to"a
a%!stro5es 6ue a%arece' e' el 'o$+re "el %ro"ucto. E' %articular1 los a%!stro5es e' el
'o$+re "el %ro"ucto se esca%! co' H ` L H.
Co' estos ca$+ios co$%leta1 hacer clic e' u' 7li#inar +ot!' e' el 9ridVie0 $uestra u'
cua"ro "e "i.logo "e co'5ir$aci!' %erso'ali0a"a 83er Eigura /:. Al igual 6ue co' el
$e'sa#e "e co'5ir$aci!' "e la For#Vie0 1 si el usuario hace clic e' Cancelar 1 se ca'cela
la "e3oluci!' "e "atos1 lo 6ue i$%i"e la eli$i'aci!' "e ocurrir.
/ota: Esta t-c'ica ta$+i-' se %ue"e utili0ar %ara acce"er a la 7li#inar +ot!' "e
%rogra$aci!' e' elCo##andField e' u' 2etailsVie0 . Para el 2etailsVie0 1 si'
e$+argo1 se crearBa u' co'trola"or "e e3e'tos %ara el 2ataDound caso1 "e+i"o a 6ue
el 2etailsVie0 'o tie'e Fo02ataDound e3e'to.
Figura 3 .l "acer clic en el botn 7li#inar 9ridVie0 #uestra un cuadro de
di=logo de con'ir#acin personali%ado
$tili%ando Te#plateFields
>'a "e las "es3e'ta#as "e la Co##andField es 6ue los +oto'es se acce"e $e"ia'te la
i'"eaci!'1 ) el o+#eto resulta'te se "e+e co'3ertir e' el ti%o "e +ot!' a"ecua"o
8 botones 1 *inJDutton o I#ageDutton :. El uso "e H'<$eros $.gicosH ) los ti%os e' el
c!"igo i'3ita a los %ro+le$as 6ue 'o %ue"e' ser "escu+iertos hasta 6ue el tie$%o "e
e#ecuci!'. Por e#e$%lo1 si uste" 8u otro "esarrolla"or: a=a"ir 'ue3os +oto'es a
la Co##andField e' alg<' $o$e'to e' el 5uturo 8co$o u'a edicin el +ot!': o ca$+iar
el DuttonType %ro%ie"a"1 el c!"igo eiste'te seguir. co$%ilar si' errores1 %ero 3isita'"o
la %.gi'a "e la causa %ue"e u'a ece%ci!' o u' co$%orta$ie'to i'es%era"o1 "e%e'"ie'"o
"e c!$o el c!"igo 5ue escrito ) lo 6ue se ha' reali0a"o ca$+ios.
>' e'5o6ue alter'ati3o co'siste e' co'3ertir
el 9ridVie0 ) 2etailsVie0 Ms Co##andField s e' Te#plateField s. Esto ge'erar.
u' Te#plateField co' u' Ite#Te#plate 6ue tie'e
u' *inJDutton 8o botn o I#ageDutton : a ca"a +ot!' e' el Co##andField . Estos
+oto'es M 4nClientClicJ %ro%ie"a"es %ue"e' asig'arse "e 5or$a "eclarati3a1 co$o he$os
3isto co' el For#Vie0 1 o %ue"e ser 3isita"a e' la %rogra$aci!'
a"ecua"a 2ataDound co'trola"or "e e3e'tos utili0a'"o el siguie'te %atr!'(
ButtonType obj = (ButtonType) e.Row.FindControl ("controlID");
A6uB1 controlI2 es el 3alor "el +ot!' "e I2 "e %ro%ie"a". Au'6ue este %atr!' to"a3Ba
re6uiere u' ti%o "e har"Ico"e" %ara el ele'co1 6ue eli$i'a la 'ecesi"a" "e i'"eaci!' 6ue
%er$ite el "ise=o "e ca$+iar1 si' "ar lugar a u' error e' tie$%o "e e#ecuci!'.
Conclusin
El Ya3aScri%t con'ir#ar ( cadena ) la 5u'ci!' es u'a t-c'ica usa"a co$<'$e'te %ara
co'trolar la 5or$a "e %rese'taci!' "e 5lu#o "e tra+a#o. Cua'"o se e#ecuta1 la 5u'ci!'
$uestra u'a $o"al1 "el la"o "el clie'te el cua"ro "e "i.logo 6ue i'clu)e "os
+oto'es( .ceptar ) Cancelar . Si el usuario hace clic e' .ceptar 1 la con'ir#acin
( cadena ) "e3uel3e!erdadero 1 hacie'"o clic e' Cancelar 3uel3e 'alsa . Esta
5u'cio'ali"a"1 #u'to co' el co$%orta$ie'to "e u' 'a3ega"or %ara ca'celar el e'3Bo "el
5or$ulario1 si u' co'trola"or "e e3e'tos "ura'te el %roceso "e %rese'taci!' "e
"eclaracio'es'alsas se %ue"e' utili0ar %ara $ostrar u' $e'sa#e "e co'5ir$aci!' al
eli$i'ar u' registro.
9a con'ir#acin ( cadena ) 5u'ci!' %ue"e ser asocia"a a u' botn "e co'trol "el la"o
"el clie'te *e+ onclicJco'trola"or "e e3e'tos a tra3-s "el
co'trol 4nClientClicJ %ro%ie"a". Cua'"o se tra+a#a co' u' 7li#inar +ot!' e' u'a
%la'tilla1 )a sea e' u'o "e los For#Vie0 %la'tillas Ms1 o e' u' Te#plateField e'
el 2etailsVie0 o 9ridVie0 1 esta %ro%ie"a" se %ue"e esta+lecer $e"ia'te "eclaraci!' o
$e"ia'te %rogra$aci!'1 co$o he$os 3isto e' este tutorial.
Tutorial +1: *i#itacin de #odi'icacin de
datos 'uncionalidad basada en el usuario

Scott Mitchell
0/ 200Z
Fesu#en: Este es el Visual C # tutorial. 8 Ca$+ie al tutorial "e 7isual ;asic .: E' u'a
a%licaci!' *e+ 6ue %er$ite a los usuarios e"itar los "atos1 "i5ere'tes cue'tas "e usuario
%ue"e' te'er "i5ere'tes %ri3ilegios "e e"ici!' "e "atos. E' este tutorial1 3a$os a estu"iar
la $a'era "e a#ustar "e 5or$a "i'.$ica la ca%aci"a" "e $o"i5icaci!' "e "atos +asa"o e'
el usuario 6ue 3isita. 821 %.gi'as i$%resas:
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial +1 (Visual C #)
&'tro"ucci!'
Paso 1( Per$itir a los usuarios es%eci5icar su "erechos "e acceso
Paso 2( Agregar u' co'trol Details7ie4
Paso ,( $uestra s!lo la i'5or$aci!' "el %ro3ee"or seleccio'a"o e'
el Paso /( 9ista"o "e los %ro"uctos "e los %ro3ee"ores e' u' Dri"7ie4 e"ita+le
Paso 2( E"ici!' No %er$itir %ara %ro"uctos "escataloga"os cua'"o HMostrar A e"itar to"os
los %ro3ee"ores H'o est. seleccio'a"o
Co$%ro+aci!' "e los "erechos "e acceso e' el 'egocio "e la ca%a "e l!gica
Co'clusi!'
Introduccin
>'a serie "e a%licacio'es 4e+ "e so%orte "e cue'tas "e usuario ) o5recer o%cio'es
"i5ere'tes1 i'5or$es1 ) la 5u'cio'ali"a" +asa"a e' el usuario co'ecta"o. Por e#e$%lo1 co'
'uestros tutoriales1 6ue %ue"e ser 6ue "esee %ara 6ue los usuarios "e las e$%resas
%ro3ee"oras %ara i'iciar sesi!' e' el sitio ) actuali0ar la i'5or$aci!' ge'eral so+re sus
%ro"uctos1 su 'o$+re ) la ca'ti"a" %or u'i"a"1 tal 3e01 #u'to co' i'5or$aci!' "e los
%ro3ee"ores1 co$o su 'o$+re "e la e$%resa 1 "irecci!'1 i'5or$aci!' "e la %erso'a "e
co'tacto1 ) asB sucesi3a$e'te. A"e$.s1 %o"rBa$os i'cluir algu'as cue'tas "e usuario %ara
las %erso'as "e 'uestra e$%resa1 %ara 6ue %ue"a' i'gresar ) actuali0ar la i'5or$aci!' "e
%ro"ucto co$o u'i"a"es e' stoc?1 'i3el "e %e"i"o1 ) asB sucesi3a$e'te. Nuestra a%licaci!'
*e+ ta$+i-' %o"rBa %er$itir a los usuarios a'!'i$os %ara 3isitar 8%erso'as 6ue 'o ha'
i'icia"o la sesi!':1 si'o 6ue los lB$ites %ara 6ue s!lo 3ea' los "atos. Co' u' siste$a "e
cue'ta "e usuario e' su lugar1 'os gustarBa 6ue los co'troles 4e+ "e "atos e' 'uestras
%.gi'as ASP.NET %ara o5recer al i'sertar1 e"itar ) eli$i'ar las ca%aci"a"es a"ecua"as %ara
el actual usuario registra"o.
E' este tutorial1 3a$os a estu"iar la $a'era "e a#ustar "e 5or$a "i'.$ica la ca%aci"a" "e
$o"i5icaci!' "e "atos +asa"o e' el usuario 6ue 3isita. E' %articular1 3a$os a crear u'a
%.gi'a 6ue $uestra i'5or$aci!' "e los %ro3ee"ores e' u' e"ita+le 2etailsVie0 co'
u' 9ridVie0 6ue las listas "e los %ro"uctos su$i'istra"os %or el %ro3ee"or. Si el usuario
3isita la %.gi'a "e 'uestra e$%resa1 %ue"e' 3er la i'5or$aci!' "el %ro3ee"or1 $o"i5icar su
"irecci!'1 ) e"itar la i'5or$aci!' "e cual6uier %ro"ucto %ro%orcio'a"o %or el %ro3ee"or. Si'
e$+argo1 si el usuario es "e u'a e$%resa %articular1 6ue %ue"e' 3er ) e"itar su
i'5or$aci!' "e la "irecci!' %ro%ia ) s!lo %ue"e' e"itar sus %ro"uctos 6ue 'o ha' si"o
$arca"os co$o i'terru$%i"as.
Figura 1 $n usuario de nuestra co#pa5Ca puede editar la in'or#acin del
pro!eedor
Figura + $n usuario de un deter#inado pro!eedor puede !er y editar la
in'or#acin de Bue slo pro!eedor
7a$os a e$%e0arC
/ota: El siste$a "e suscri%cio'es "e ASP.NET 2.0 %ro%orcio'a u'a %lata5or$a
esta'"ari0a"a ) ete'si+le %ara la creaci!'1 gesti!' ) 3ali"aci!' "e cue'tas "e
usuario. De+i"o a 6ue u' ea$e' "el siste$a "e a5iliaci!' est. 5uera "el alca'ce "e estos
tutoriales1 este tutorial e' lugar "e H5alsi5icacio'esH la a"hesi!' al %er$itir 6ue los
3isita'tes a'!'i$os "e elegir si so' "e u' "eter$i'a"o %ro3ee"or o "e 'uestra e$%resa.
8Para $.s i'5or$aci!' so+re $e$+resBa1 se re5iere' a $i $e$+resBa ea$e' "e ASP.NET
2.0 Ms1 5u'cio'es ) %er5il serie "e artBculos.:
Paso 1: Per#itir Bue los usuarios especi'iBuen sus
derec"os de acceso
E' u'a a%licaci!' *e+ e' el $u'"o real1 la i'5or$aci!' "e u' usuario "e la cue'ta se
i'clu)e' si tra+a#a+a' %ara la e$%resa o "e u' %ro3ee"or e' %articular1 ) esta i'5or$aci!'
serBa accesi+le $e"ia'te %rogra$aci!' "e 'uestras %.gi'as ASP.NET "es%u-s "e 6ue el
usuario ha i'icia"o sesi!' e' el sitio. Esta i'5or$aci!' %ue"e ser ca%tura"a %or el siste$a
"e roles "e ASP.NET 2.01 co$o i'5or$aci!' "e la cue'ta a 'i3el "e usuario a tra3-s "el
siste$a "e %er5iles1 oa tra3-s "e algu'os $e"ios %erso'ali0a"os.
De+i"o a 6ue el o+#eti3o "e este tutorial es %ara "e$ostrar el a#uste "e las ca%aci"a"es "e
$o"i5icaci!' "e "atos +asa"o e' el usuario co'ecta"o1 ) 'o est. %e'sa"o %ara $ostrar la
co$%osici!'1 5u'cio'es ) siste$as "e %er5iles "e ASP.NET 2.01 3a$os a utili0ar u'
$eca'is$o si$%le %ara "eter$i'ar las ca%aci"a"es %ara el usuario 3isita la %.gi'a(
u'2rop2o0n*ist "es"e "o'"e el usuario %ue"e i'"icar si "e+e ser ca%a0 "e 3er ) e"itar
cual6uier i'5or$aci!' "el %ro3ee"or o1 alter'ati3a$e'te1 lo 6ue la i'5or$aci!' "el
%ro3ee"or e' %articular se %ue"e 3er ) e"itar. Si el usuario i'"ica 6ue se %ue"e 3er ) e"itar
to"a la i'5or$aci!' "el %ro3ee"or 8%or "e5ecto:1 se %ue"e e'3iar u' $e'sa#e a tra3-s "e
to"os los %ro3ee"ores1 e"itar la i'5or$aci!' "el %ro3ee"or "e "ireccio'es ) $o"i5icar el
'o$+re ) la ca'ti"a" %or u'i"a" "e cual6uier %ro"ucto %ro%orcio'a"o %or el %ro3ee"or
seleccio'a"o. Si el usuario i'"ica 6ue se %ue"e 3er ) e"itar s!lo u' %ro3ee"or e' %articular1
si' e$+argo1 s!lo %ue"e' 3er los "etalles ) los %ro"uctos "e "icho %ro3ee"or ) u'o %ue"e
actuali0ar s!lo el 'o$+re ) la ca'ti"a" %or u'i"a" "e i'5or$aci!' %ara a6uellos %ro"uctos
6ue no sei'terru$%i!.
Nuestro %ri$er %aso e' este tutorial1 e'to'ces1 es la creaci!' "e este 2rop2o0n*ist )
relle'arla co' los %ro3ee"ores e' el siste$a. A+ra la %.gi'a >ser9e3elAccess.as% e' la
car%eta E"it&'sertDelete1 agregar u' 2rop2o0n*ist cu)a I2%ro%ie"a" se esta+lece e' los
pro!eedores 1 ) e'la0ar este 2rop2o0n*ist a u'
'ue3o 4b6ect2ata(ource lla$a"o.ll(uppliers2ata(ource .
Figura 1 Crear un nue!o lla#ado 4b6ect2ata(ource .ll(uppliers2ata(ource
Por6ue 6uere$os 6ue este 2rop2o0n*ist %ara i'cluir a to"os los %ro3ee"ores1 co'5igurar
el 4b6ect2ata(ource %ara i'3ocar la (uppliersD** clase 9et(uppliers
() $-to"o. Aseg<rese ta$+i-' "e 6ue el 4b6ect2ata(ource Ms $pdate ()$-to"o se
asig'a a la (uppliersD** clase $pdate(upplier.ddress $-to"o1 )a
6ue 4b6ect2ata(ource se utili0ar. ta$+i-' %or el 2etailsVie0 se ir.' su$a'"o e' el
%aso 2.
Des%u-s "e co$%letar el Asiste'te %ara G+#ectDataSource1 siga los %asos "e la
co'5iguraci!' "e la Pro!eedores2rop2o0n*ist "e tal 5or$a 6ue $uestra
el Co#pany/a#e ca$%o "e "atos ) utili0a el IdPro!eedor ca$%o "e "atos co$o el 3alor
"e ca"a *istIte# .
Figura 3 Con'igurar el 2rop2o0n*ist pro!eedores a utili%ar el Co#pany/a#e y
ca#pos de datos (upplierI2
E' este %u'to1 el 2rop2o0n*ist se e'u$era' los 'o$+res "e e$%resas "e los
%ro3ee"ores e' la +ase "e "atos. Si' e$+argo1 ta$+i-' "e+e i'cluir u' HSho4 A E"itar
to"os los %ro3ee"oresH a la o%ci!' 2rop2o0n*ist . Para lograr esto1 el co'#u'to
"e pro!eedores 2rop2o0n*ist Ms .ppend2ataDoundIte#s %ro%ie"a" real ) luego
a=a"ir u' *istIte# cu)aTexto caracterBstica HMostrar A E"itar to"os los %ro3ee"oresH )
cu)o 3alor es K1 . Esto se %ue"e agregar "irecta$e'te a tra3-s "el $arca"o "eclarati3o o
%or el Dise=a"or "e ir a la 3e'ta'a Pro%ie"a"es ) haga clic e' los %u'tos sus%e'si3os e'
el 2rop2o0n*ist Ms ele#entos de la %ro%ie"a".
/ota: Re5i-rase a las "e 5iltra"o %ri'ci%al A "etalle co' u' Dro%Do4'9ist tutorial %ara u'a
"iscusi!' $.s "etalla"a so+re c!$o agregar u'a HSeleccio'ar to"oH a u' ele$e'to "e
e'lace "e "atos 2rop2o0n*ist .
Des%u-s "e la .ppend2ataDoundIte#s %ro%ie"a" se ha esta+leci"o )
el *istIte# agreg!1 el 2rop2o0n*ist $arca"o Ms "eclarati3o "e+e te'er el siguie'te
as%ecto(
<Asp: DropDownList ID = "Proveedores" runat = "server" AppendDataBoundItems = "True"
DataSourceID = "AllSuppliersDataSource" DataTextField = "CompanyName"
DataValueField = "IdProveedor">
<asp:ListItem Value="-1"> Mostrar / Editar todos los proveedores </ asp: ListItem>
</ Asp: DropDownList>
9a Eigura 2 $uestra u'a ca%tura "e %a'talla "e 'uestro %rogreso actual1 3ista a tra3-s "e
u' 'a3ega"or.
Figura - 7l 2rop2o0n*ist Pro!eedores contiene una @&ostrar todo@ *istIte#>
#=s uno por cada pro!eedor
Por6ue 6uere$os actuali0ar la i'ter5a0 "e usuario i'$e"iata$e'te "es%u-s "e 6ue el
usuario ha ca$+ia"o su selecci!'1 esta+le0ca
la Pro!eedores 2rop2o0n*ist Ms .utoPostDacJ %ro%ie"a" !erdadera . E' el %aso 21
3a$os a crear u'2etailsVie0 "e co'trol 6ue se $ostrar. la i'5or$aci!' "el %ro3ee"or 8s:1
+asa"o e' el 2rop2o0n*ist "e selecci!'.9uego1 e' el %aso ,1 3a$os a crear u'
co'trola"or "e e3e'tos %ara este 2rop2o0n*ist Ms (electedIndexC"anged caso1 e' el
6ue 3a$os a a=a"ir el c!"igo 6ue se u'e la i'5or$aci!' "e los %ro3ee"ores a%ro%ia"os
%ara el 2etailsVie0+asa"o e' el %ro3ee"or seleccio'a"o.
Paso +: .gregar un control 2etailsVie0
7a$os a usar u' 2etailsVie0 %ara $ostrar la i'5or$aci!' "el %ro3ee"or. Para el usuario
6ue %ue"e 3er ) e"itar to"os los %ro3ee"ores1 el 2etailsVie0 se a"$ite la %agi'aci!'1 6ue
%er$ite al usuario %aso a tra3-s "el registro "el %ro3ee"or u'a i'5or$aci!' a la 3e0. Si el
usuario tra+a#a %ara u' %ro3ee"or "eter$i'a"o1 si' e$+argo1 el 2etailsVie0$ostrar. s!lo
la i'5or$aci!' "el %ro3ee"or e' %articular ) 'o i'clu)e' u'a i'ter5a0 "e %agi'aci!'. E'
cual6uier caso1 el2etailsVie0 "e+e %er$itir al usuario e"itar la "irecci!' "el %ro3ee"or1
"e la ciu"a"1 ) los ca$%os "e %aBs.
A=a"ir u' 2etailsVie0 a la %.gi'a "e+a#o "e la Pro!eedores 2rop2o0n*ist 1 esta+le0ca
su identi'icacin de la %ro%ie"a" "e (upplier2etails 1 ) se u'e' a
la .ll(uppliers2ata(ource 4b6ect2ata(ource crea"o e' el %aso a'terior. A
co'ti'uaci!'1 co$%rue+e la paginacin .cti!ar ) Aabilitar edicin casillas "e
3eri5icaci!' "e la 2etailsVie0 tag Ms i'telige'te.
/ota: Si uste" 'o 3e u'a Aabilitar edicin o%ci!' e' el 2etailsVie0 Ms eti6ueta
i'telige'te1 es %or6ue 'o $a%a "el 4b6ect2ata(ource Ms $pdate () $-to"o %ara
la (uppliersD** clase $pdate(upplier.ddress$-to"o. T!$ese u' $o$e'to %ara
3ol3er atr.s ) hacer este ca$+io "e co'5iguraci!'1 "es%u-s "e 6ue laedicin
Aabilitar o%ci!' "e+erBa a%arecer e' el 2etailsVie0 tag Ms i'telige'te.
De+i"o a 6ue el (uppliersD** clase $pdate(upplier.ddress $-to"o s!lo ace%ta cuatro
%ar.$etrosI supplierI2 1direccin 1 ciudad ) paCs de $o"i5icar
el 2etailsVie0 Ms DoundField s1 %or lo 6ue el Co#pany/a#e ) Tel?'onoDoundField s
so' "e s!lo lectura. A"e$.s1 6uitar el IdPro!eedor DoundField %or co$%leto. Por <lti$o1
el.ll(uppliers2ata(ource 4b6ect2ata(ource e' la actuali"a" tie'e
su 4ldValuesPara#eterFor#at(tring %ro%ie"a" esta+leci"a e' originalZ S,T . T!$ese
u' $o$e'to %ara eli$i'ar este 3alor "e la %ro%ie"a" "e la si'tais "eclarati3a "el to"o1 o
se esta+lece e' el 3alor %re"eter$i'a"o1 6ue es S,T .
Des%u-s "e co'5igurar
el (upplier2etails 2etailsVie0 ) .ll(uppliers2ata(ource 4b6ect2ata(ource 1
3a$os a te'er el $arca"o "eclarati3o siguie'te(
<Asp: ObjectDataSource ID = "AllSuppliersDataSource" runat = "server"
SelectMethod = "GetSuppliers" TypeName = "SuppliersBLL"
UpdateMethod = "UpdateSupplierAddress">
<UpdateParameters>
<asp:Parameter Name="supplierID" Type="Int32" />
<asp:Parameter Name="address" tipo="String" />
<asp:Parameter Name="city" tipo="String" />
<asp:Parameter Name="country" tipo="String" />
</ UpdateParameters>
</ Asp: ObjectDataSource>
<Asp: DetailsView ID = "SupplierDetails" runat = "server" AllowPaging = "True"
AutoGenerateRows = "false" DataKeyNames = "IdProveedor"
DataSourceID = "AllSuppliersDataSource">
<Fields>
<Asp: BoundField DataField = "CompanyName" HeaderText = "Compaa"
ReadOnly = "True" SortExpression = "CompanyName" />
<Asp: BoundField DataField = "Direccin" HeaderText = "Direccin"
SortExpression = "Direccin" />
<Asp: BoundField DataField = "Ciudad" HeaderText = "Ciudad"
SortExpression = "Ciudad" />
<Asp: BoundField DataField = "Pas" HeaderText = "Pas"
SortExpression = "Pas" />
<Asp: BoundField DataField = "Telfono" HeaderText = "Telfono" ReadOnly = "True"
SortExpression = "Telfono" />
<asp:CommandField ShowEditButton="True" />
</ Campos>
</ Asp: DetailsView>
E' este %u'to1 el 2etailsVie0 %ue"e %agi'ar a tra3-s "e la i'5or$aci!' ) el %ro3ee"or
seleccio'a"o "e "ireccio'es %ue"e ser actuali0a"a1 i'"e%e'"ie'te$e'te "e la selecci!'
hecha e' el Pro!eedores 2rop2o0n*ist 83er Eigura 6:.
Figura 8 In'or#acin del pro!eedor puede ser !isto> y actuali%ada su direccin
Paso 1: Visuali%acin de la in'or#acin slo es el
pro!eedor seleccionado
Nuestra %.gi'a actual$e'te $uestra la i'5or$aci!' %ara to"os los %ro3ee"ores1
i'"e%e'"ie'te$e'te "e si u' "eter$i'a"o %ro3ee"or ha si"o seleccio'a"o
"e pro!eedores 2rop2o0n*ist . Para $ostrar s!lo la i'5or$aci!' "e los %ro3ee"ores
%ara el %ro3ee"or seleccio'a"o1 ha) 6ue a=a"ir otro 4b6ect2ata(ource a 'uestra %.gi'a1
6ue recu%era i'5or$aci!' acerca "e u' %ro3ee"or e' %articular.
A=a"ir u' 'ue3o 4b6ect2ata(ource a la %.gi'a1 ".'"ole el
'o$+re (ingle(upplier2ata(ource . Des"e sus eti6uetas i'telige'tes1 haga clic e'
la con'iguracin de orCgenes de datos "e e'lace ) tie'e' 6ue utili0ar
el (uppliersD** clase9et(upplierDy(upplierI2 (supplierI2) $-to"o. Al igual 6ue co'
el .ll(uppliers2ata(ource 4b6ect2ata(ource 1 tie'e'
la (ingle(upplier2ata(ource 4b6ect2ata(ource Ms $pdate () $-to"o asig'a a
la (uppliersD** clase$pdate(upplier.ddress $-to"o.
Figura : Con'igurar el (ingle(upplier2ata(ource 4b6ect2ata(ource para utili%ar
el 9et(upplierDy(upplierI2 (supplierI2) #?todo
A co'ti'uaci!'1 se le %e"ir. 6ue es%eci5i6ue el orige' "e los %ar.$etros "e
la 9et(upplierDy(upplierI2 (supplierI2)$-to"o supplierI2 %ar.$etro "e
e'tra"a. Por6ue 6uere$os $ostrar la i'5or$aci!' %ara el %ro3ee"or seleccio'a"o
"el 2rop2o0n*ist 1 utilice el Pro!eedores 2rop2o0n*ist Ms (electedValue %ro%ie"a"
co$o la 5ue'te "e los %ar.$etros.
Figura ; $tilice el 2rop2o0n*ist pro!eedores co#o 'uente de par=#etros
supplierI2
&'cluso co' esta segu'"a 4b6ect2ata(ource a=a"i"o1 el 2etailsVie0 "e co'trol est.
co'5igura"o %ara utili0ar sie$%re el .ll(uppliers2ata(ource 4b6ect2ata(ource . Ha)
6ue agregar l!gica %ara a#ustar la 5ue'te "e "atos utili0a"a %or el2etailsVie0 e' 5u'ci!'
"e los pro!eedores 2rop2o0n*ist ele$e'to seleccio'a"o. Para lograr esto1 cree
u'(electedIndexC"anged co'trola"or "e e3e'tos %ara los
%ro3ee"ores 2rop2o0n*ist . Esto se %ue"e crear 5.cil$e'te hacie'"o "o+le clic e'
el 2rop2o0n*ist e' el "ise=a"or. Este co'trola"or "e e3e'tos "e+e "eter$i'ar 6u-
5ue'te "e "atos %ara utili0ar ) "e+e 3ol3er a e'la0ar los "atos a la 2etailsVie0 . Esto se
logra usa'"o el siguie'te c!"igo(
protected void Suppliers_SelectedIndexChanged (object sender, EventArgs e)
{
if (Suppliers.SelectedValue == "1")
{
/ / La opcin "Mostrar / Editar todos" ha seleccionado la opcin
SupplierDetails.DataSourceID = "AllSuppliersDataSource";
/ / Restablecer el ndice de la pgina para mostrar el primer registro
SupplierDetails.PageIndex = 0;
}
ms
/ / El usuario elegido un proveedor en particular
SupplierDetails.DataSourceID = "SingleSupplierDataSource";
/ / Asegrese de que el DetailsView est en modo de slo lectura
SupplierDetails.ChangeMode (DetailsViewMode.ReadOnly);
/ / Necesidad de "refrescar" el DetailsView
SupplierDetails.DataBind ();
}
El co'trola"or "e e3e'tos co$ie'0a co' la "eter$i'aci!' "e si la o%ci!' HMostrar A E"itar
to"os los %ro3ee"oresH1 se seleccio'! la o%ci!'. Si lo 5uera1 se esta+lece
el (upplier2etails 2etailsVie0 Ms 2ata(ourceI2 a.ll(uppliers2ata(ource ) "e3uel3e
al usuario al %ri$er registro e' el co'#u'to "e %ro3ee"ores $e"ia'te el esta+leci$ie'to "e
la PageIndex %ro%ie"a" a , . Si' e$+argo1 si el usuario ha seleccio'a"o u' %ro3ee"or e'
%articular "e la 2rop2o0n*ist 1 el 2etailsVie0 Ms 2ata(ourceI2 se asig'a
a (ingle(uppliers2ata(ource . &'"e%e'"ie'te$e'te "e lo 6ue la 5ue'te "e "atos es
usa"a1 el (uppliers2etails $o"o se re3ierte "e 'ue3o al $o"o "e s!lo lectura ) los "atos
"e re+ote a la 2etailsVie0 $e"ia'te u'a lla$a"a a
la (uppliers2etails co'trol 2ataDind () $-to"o.
Co' este co'trola"or "e e3e'tos e' el lugar1 el 2etailsVie0 co'trol ahora $uestra el
%ro3ee"or seleccio'a"o1 a $e'os 6ue la o%ci!' HMostrar A E"itar to"os los %ro3ee"oresH1 se
seleccio'! la o%ci!'1 e' cu)o caso to"os los %ro3ee"ores se %ue"e' 3er a tra3-s "e la
i'ter5a0 "e %agi'aci!'. 9a Eigura K $uestra la %.gi'a co' la o%ci!' HMostrar A E"itar to"os
los %ro3ee"oresH seleccio'a"a1 te'ga e' cue'ta 6ue la i'ter5a0 "e %agi'aci!' est.
%rese'te1 lo 6ue %er$ite al usuario a 3isitar ) actuali0ar cual6uier %ro3ee"or. 9a 5igura 10
$uestra la %.gi'a co' el %ro3ee"or seleccio'a"o Ma Maiso'1 la i'5or$aci!' s!lo Maiso' "e
Ma se %ue"e 3er ) e"itar1 e' este caso.
Figura < Toda la in'or#acin de los pro!eedores se pueden !er y editar
Figura 1, (lo la in'or#acin del pro!eedor seleccionado se puede !er y editar
/ota: Para este tutorial1 ta'to e'
el 2rop2o0n*ist ) 2etailsVie0 co'trol 7nableVie0(tate "e+e esta+lecerse
e' !erdadero 8%or "e5ecto:1 "e+i"o a 6ue el 2rop2o0n*ist Ms (electedIndex )
el2etailsVie0 Ms 2ata(ourceI2 ca$+ios "e %ro%ie"a" "e+e ser recor"a"o a tra3-s "e
%ostI+ac?s.
Paso 3: *istado de los productos de los pro!eedores
en un 9ridVie0 editable
Co' el 2etailsVie0 co$%leta1 el siguie'te %aso es i'cluir u'a e"ita+le 9ridVie0 6ue
$uestra los %ro"uctos %ro%orcio'a"os %or el %ro3ee"or seleccio'a"o. Este 9ridVie0 "e+e
%er$itir e"icio'es a s!lo el Product/a#e )CantidadPor$nidad ca$%os. Por otra %arte1
si el usuario 3isita la %.gi'a "e u' %ro3ee"or e' %articular1 s!lo se "e+e %er$itir 6ue las
actuali0acio'es "e los %ro"uctos 6ue est.' no i'terru$%i"o. Para lograr esto1 %ri$ero
te'"r. 6ue agregar u'a so+recarga "e la ProductsD** clase $pdateProducts $-to"o
6ue to$a e' ta' s!lo el ProductI2 1Product/a#e ) CantidadPor$nidad ca$%os co$o
e'tra"as. He$os i'te'si5ica"o a tra3-s "e este %roceso "e a'te$a'o e' 'u$erosos
tutoriales1 asB 6ue 3a$os a $irar el c!"igo a6uB1 6ue ha) 6ue a=a"ir a ProductsD** (
[System.ComponentModel.DataObjectMethodAttribute (
System.ComponentModel.DataObjectMethodType.Update, false)]
pblica UpdateProduct bool (cadena productName, CantidadPorUnidad cadena, int
productID)
{
Northwind.ProductsDataTable productos =
Adapter.GetProductByProductID (ProductID);
if (products.Count == 0)
/ / Ningn registro coincidente, devuelva falso
return false;
Northwind.ProductsRow producto = productos [0];
product.ProductName = productName;
if (CantidadPorUnidad == null)
product.SetQuantityPerUnitNull ();
ms
product.QuantityPerUnit = CantidadPorUnidad;
/ / Actualizar el registro del producto
int = rowsAffected Adapter.Update (producto);
/ / Devuelve verdadero si, precisamente, una fila se ha actualizado, si no falsa
volver rowsAffected == 1;
}
Co' esta so+recarga crea"o1 esta$os listos %ara agregar el 9ridVie0 "e co'trol ) sus
asocia"os 4b6ect2ata(ource .A=a"ir u' 'ue3o 9ridVie0 a la %.gi'a1 co'5igurar su I2 "e
%ro%ie"a" "e ProductsDy(upplier 1 ) co'5igurarlo %ara usar u'
'ue3o 4b6ect2ata(ource lla$a"o ProductsDy(upplier2ata(ource . Por6ue 6uere$os
6ue este 9ridVie0 a la lista "e los %ro"uctos %or %arte "el %ro3ee"or seleccio'a"o1 utilice
el ProductsD** clase 9etProductsDy(upplierI2 (supplierI2) $-to"o. A"e$.s1 el
$a%a "e la actuali%acin () $-to"o %ara la 'ue3a $pdateProduct so+recarga 6ue
aca+a$os "e crear.
Figura 11 Con'igurar el 4b6ect2ata(ource para utili%ar la sobrecarga
$pdateProduct acaba de crear
Nos %e"ir. 6ue seleccio'e la 5ue'te "e %ar.$etros %ara el 9etProductsDy(upplierI2
(supplierI2) $-to"o supplierI2%ar.$etro "e e'tra"a. Por6ue 6uere$os $ostrar los
%ro"uctos %ara el %ro3ee"or seleccio'a"o e' el 2etailsVie0 1 utilice
el (uppliers2etails 2etailsVie0 co'trol (electedValue %ro%ie"a" co$o la 5ue'te "e los
%ar.$etros.
Figura 1+ $tilice la propiedad (uppliers2etails 2etailsVie0 de (electedValue
co#o la 'uente de los par=#etros
7ol3ie'"o a la 9ridVie0 1 eli$i'ar to"os los 9ridVie0 ca$%os
ece%to Product/a#e 1 CantidadPor$nidad )descatalogados 1 $arca'"o
el interru#pidas C"ecJDoxField co$o "e s!lo lectura. A"e$.s1 re3ise la Aabilitar
edicino%ci!' "el 9ridVie0 tag Ms i'telige'te. Des%u-s "e estos ca$+ios se ha' hecho1 el
$arca"o "eclarati3o "el 9ridVie0 )4b6ect2ata(ource "e+e ser si$ilar a lo siguie'te(
<Asp: GridView ID = "ProductsBySupplier" runat = "server"
AutoGenerateColumns = "False"
DataKeyNames = "ProductID" DataSourceID = "ProductsBySupplierDataSource">
<columnas>
<asp:CommandField ShowEditButton="True" />
<Asp: BoundField DataField = "ProductName" HeaderText = "Producto"
SortExpression = "ProductName" />
<Asp: BoundField DataField = "CantidadPorUnidad" HeaderText = "Cantidad / Unidad"
SortExpression = "CantidadPorUnidad" />
<Asp: CheckBoxField DataField = "interrumpidas" HeaderText = "interrumpidas"
ReadOnly = "True" SortExpression = "interrumpidas" />
</ Columns>
</ Asp: GridView>
<Asp: ObjectDataSource ID = "ProductsBySupplierDataSource" runat = "server"
OldValuesParameterFormatString = "original_ {0}" TypeName = "ProductsBLL"
SelectMethod = "GetProductsBySupplierID" UpdateMethod = "UpdateProduct">
<UpdateParameters>
<asp:Parameter Name="productName" tipo="String" />
<asp:Parameter Name="quantityPerUnit" tipo="String" />
<asp:Parameter Name="productID" Type="Int32" />
</ UpdateParameters>
<SelectParameters>
<Asp: ControlParameter ControlID = "SupplierDetails" Name = "supplierID"
PropertyName = "SelectedValue" Type = "Int32" />
</ SelectParameters>
</ Asp: ObjectDataSource>
Al igual 6ue co' 'uestro a'terior 4b6ect2ata(ource s1 este
es 4ldValuesPara#eterFor#at(tring %ro%ie"a" se esta+lece e' originalZ S,T 1 lo 6ue
causar. %ro+le$as al i'te'tar actuali0ar el 'o$+re "el %ro"ucto o la ca'ti"a" %or
u'i"a". @uitar esta %ro%ie"a" "e la si'tais "eclarati3a "el to"o o se esta+lece e' su
"e5ecto1 6ue es S,T .
Co' esta co'5iguraci!' co$%leta1 ahora a 'uestra %.gi'a "e las listas "e los %ro"uctos
su$i'istra"os %or el %ro3ee"or seleccio'a"o e' el 9ridVie0 83er 5igura 1,:. E' la
actuali"a"1 cual/uier 'o$+re "e %ro"ucto o la ca'ti"a" %or u'i"a" se %ue"e actuali0ar. Si'
e$+argo1 "e+e$os actuali0ar 'uestra l!gica "e la %.gi'a1 "e $o"o 6ue la 5u'cio'ali"a"
est. %rohi+i"a %ara %ro"uctos "escataloga"os %ara los usuarios asocia"os a u'
"eter$i'a"o %ro3ee"or. 7a$os a hacer 5re'te a esta <lti$a %ie0a e' el %aso 2.
Figura 11 *os productos o'recidos por el pro!eedor seleccionado
/ota: Co' la a"ici!' "e este
e"ita+le 9ridVie0 los pro!eedores 2rop2o0n*ist Ms(electedIndexC"anged co'trola"
or "e e3e'tos "e+e ser actuali0a"o %ara "e3ol3er el 9ridVie0 a u' esta"o "e s!lo
lectura. De lo co'trario1 si u' %ro3ee"or "i5ere'te es seleccio'a"o1 $ie'tras 6ue e' el
$e"io "e la e"ici!' "e i'5or$aci!' "e %ro"uctos1 el B'"ice corres%o'"ie'te e'
el 9ridVie0 %ara el 'ue3o %ro3ee"or ta$+i-' ser. e"ita+le. Para e3itar esto1 aca+a "e
esta+lecer el 9ridVie0 Ms 7ditIndex%ro%ie"a" a K1 e'
el (electedIndexC"anged co'trola"or "e e3e'tos.
Asi$is$o1 recuer"e 6ue es i$%orta'te 6ue el 9ridVie0 Ms el esta"o "e 3ista est- acti3a"o
8%or "e5ecto:. Si se esta+lece el 9ridVie0 Ms 7nableVie0(tate %ro%ie"a" a 'also 1 se
corre el riesgo "e te'er usuarios co'curre'tes si' 6uerer +orrar o e"itar
registros. 87er AD7ERTENC&A( %u'to "e co'curre'cia co' ASP.NET 2.0 Dri"7ie4s A
Details7ie4 A Eor$7ie4s 6ue la e"ici!' "e a%o)o ) A o eli$i'ar ) cu)a 3isi!' "el Esta"o
est. "esha+ilita"o %ara $.s i'5or$aci!'.:
Paso -: 7dicin /o per#itir para productos
descatalogados en @Ver I 7ditar todos los
pro!eedores@ no est= seleccionado
Mie'tras 6ue el ProductsDy(upplier 9ridVie0 es co$%leta$e'te 5u'cio'al1 6ue
actual$e'te %er$ite el acceso "e$asia"o a los usuarios 6ue %ro3ie'e' "e u' %ro3ee"or
e' %articular. Seg<' las reglas "e 'uestro 'egocio1 los usuarios 'o "e+erBa ser ca%a0 "e
actuali0ar los %ro"uctos "esco'ti'ua"os. Para cu$%lir esto1 %o"e$os ocultar 8o "esacti3ar:
la 7dicin de +ot!' e' los 9ridVie0 5ilas co' %ro"uctos "esco'ti'ua"os cua'"o la %.gi'a
est. sie'"o 3isita"a %or u' usuario "e u' %ro3ee"or.
Crear u' co'trola"or "e e3e'tos %ara el 9ridVie0 Ms Fo02ataDound e3e'to. E' este
co'trola"or "e e3e'tos1 "e+e$os "eter$i'ar si el usuario est. asocia"o co' u'
"eter$i'a"o %ro3ee"or1 6ue1 %ara este tutorial1 se %ue"e "eter$i'ar $e"ia'te la
co$%ro+aci!' "e los Pro3ee"ores 2rop2o0n*ist Ms (electedValue %ro%ie"a". Si se trata
"e algo "isti'to "e I11 el usuario se asocia co' u' %ro3ee"or e' %articular. Para estos
usuarios1 se "e+e "eter$i'ar si el %ro"ucto est. "escataloga"o. Po"e$os to$ar u'a
re5ere'cia a la actual ProductFo0 i'sta'cia e'la0a"a a la 9ridVie0 5ila a tra3-s "e
la eFo02ataIte# %ro%ie"a"1 co$o se i'"ica e' el Resu$e' "e la &'5or$aci!' e' el %ie
"e %.gi'a 7ie'"o el Dri"7ie4tutorial. Si el %ro"ucto est. "escataloga"o1 %o"e$os coger
u'a re5ere'cia %rogra$.tica a la edicin e' el
+ot!'9ridVie0 Ms Co##andField utili0a'"o las t-c'icas e%lica"as e' el tutorial
a'terior1 A"ici!' "el la"o "el clie'te co'5ir$aci!' cua'"o se eli$i'a' . Ta' %ro'to co$o
te'e$os u'a re5ere'cia1 %o"e$os ocultar o "esha+ilitar el +ot!'.
protected void ProductsBySupplier_RowDataBound (object sender,
GridViewRowEventArgs e)
{
si (== e.Row.RowType DataControlRowType.DataRow)
{
/ / Se trata de un proveedor especfico de usuario?
if (Suppliers.SelectedValue! = "-1")
{
/ / Obtener una referencia a la ProductRow
Northwind.ProductsRow producto =

(Northwind.ProductsRow) ((System.Data.DataRowView) e.Row.DataItem) Fila.;
/ / Es esto producto descontinuado?
if (product.Discontinued)
{
/ / Obtener una referencia a la LinkButton Editar
LinkButton editbutton =
(LinkButton) e.Row.Cells [0] Controles [0].;
/ / Ocultar el botn Editar
editButton.Visible = false;
}
}
}
}
Co' este co'trola"or "e e3e'tos e' el lugar1 al 3isitar esta %.gi'a co$o u' usuario "e u'
%ro3ee"or es%ecB5ico1 a6uellos %ro"uctos 6ue so' "isco'ti'uas 'o so' $o"i5ica+les1 co$o
la edicin +ot!' se oculta "e estos %ro"uctos. Por e#e$%lo1 Me0cla Du$+o "el che5 A'to'
es u' %ro"ucto "esco'ti'ua"o %or el Ca#u' "e Nue3a Grlea's Delicias %ro3ee"or. Al 3isitar
la %.gi'a "e este %ro3ee"or e' %articular1 la 7dicin de +ot!' "e este %ro"ucto est.
oculto a la 3ista 83er 5igura 1/:. Si' e$+argo1 cua'"o se 3isita usa'"o la o%ci!' HMostrar A
E"itar to"os los %ro3ee"oresH "e la7dicin +ot!' est. "is%o'i+le 83er Eigura 12:.
Figura 13 2e pro!eedores y usuarios especC'icos> en el botn 7ditar para &e%cle
9u#bo del c"e' .nton se oculta
Figura 1- Para @&ostrar I 7ditar todos los pro!eedores@ los usuarios> el botn
7ditar para &e%cle 9u#bo del c"e' .nton se #uestra
Co#probacin de los derec"os de acceso en la capa
de lgica de negocios
E' este tutorial1 la %.gi'a "e ASP.NET co'trola to"a la l!gica co' res%ecto a la i'5or$aci!'
6ue el usuario %ue"e 3er ) 6u- %ro"uctos se %ue"e' actuali0ar. &"eal$e'te1 esta l!gica
ta$+i-' estarBa %rese'te e' la ca%a "e l!gica "e 'egocios.Por e#e$%lo1
el (uppliersD** clase 9et(uppliers () $-to"o 86ue "e3uel3e to"os los %ro3ee"ores:
%o"rBa' i'cluir u'a 3eri5icaci!' %ara asegurarse "e 6ue ha)a i'icia"o la sesi!' e' el usuario
es no asocia"os a u' "eter$i'a"o %ro3ee"or.Asi$is$o1
el $pdate(upplier.ddress $-to"o %o"rBa i'cluir u' co'trol %ara asegurarse "e 6ue ha)a
i'icia"o la sesi!' e' el usuario o +ie' tra+a#a+a' %ara la e$%resa 8) %or lo ta'to1 %ue"e
actuali0ar la i'5or$aci!' "e to"os los %ro3ee"ores "e "ireccio'es: o se asocia co' el
%ro3ee"or cu)os "atos se est. actuali0a'"o.
No i'cluB co$o ;99Ica%a co$%rue+a a6uB1 %or6ue e' 'uestro tutorial "e los "erechos "e los
usuarios so' "eter$i'a"os %or u' 2rop2o0n*ist e' la %.gi'a1 6ue las clases ;99 'o
%ue"e' acce"er. Cua'"o se utili0a el siste$a "e suscri%cio'es o u'o "e los 5uera "e los
es6ue$as "e aute'ticaci!' ca#a %ro%orcio'a"a %or ASP.NET 8%or e#e$%lo1 la aute'ticaci!'
"e Microso5t *i'"o4s:1 ha i'icia"o la sesi!' e' la i'5or$aci!' "el usuario ) las 5u'cio'es
"e i'5or$aci!' se %ue"e acce"er "es"e la to$a "e ;99IasB co$o acceso a los "erechos
%osi+les co'troles1 ta'to e' la %rese'taci!' ) las ca%as "e %lo$o e' sa'gre.
Conclusin
9a $a)orBa "e los sitios 6ue o5rece' cue'tas "e usuario "e+e %erso'ali0ar la i'ter5a0 "e
$o"i5icaci!' "e "atos +asa"o e' el usuario ha i'icia"o sesi!'. 9os usuarios a"$i'istrati3os
%ue"e' ser ca%aces "e eli$i'ar ) e"itar cual6uier "ocu$e'to1 $ie'tras 6ue los usuarios 'o
a"$i'istrati3os %ue"e' estar li$ita"os a s!lo actuali0ar o eli$i'ar registros 6ue ellos
$is$os crearo'. Sea cual sea el esce'ario 6ue sea1 los co'troles 4e+ "e
"atos1 4b6ect2ata(ource 1 ) las clases "e 'egocios Ca%a "e l!gica se %ue"e ete'"er
%ara agregar o 'egar "eter$i'a"as 5u'cio'es so+re la +ase "e 6ue el usuario ha i'icia"o
sesi!'. E' este tutorial1 he$os 3isto c!$o li$itar los "atos 3isi+les ) e"ita+les e' 5u'ci!'
"e si el usuario se asoci! co' u' "eter$i'a"o %ro3ee"or o si tra+a#a+a' %ara la co$%a=Ba.
E' este tutorial se co'clu)e el ea$e' "e i'sertar1 actuali0ar ) eli$i'ar "atos $e"ia'te
el 9ridVie0 1 2etailsVie0 )For#Vie0 co'troles. Co$e'0a'"o co' el siguie'te tutorial1
3a$os a "irigir 'uestra ate'ci!' a la a"ici!' "e %agi'aci!' ) la clasi5icaci!' "e a%o)o.
Paginacin y clasi'icacin
Tutorial +3: Paging y ordenar datos de
in'or#e

Scott Mitchell
0/ 200Z
Fesu#en: Este es el Visual C # tutorial. 8 Ca$+ie al tutorial "e 7isual ;asic .: %agi'aci!'
) la clasi5icaci!' so' "os caracterBsticas $u) co$u'es al $ostrar "atos e' u'a a%licaci!'
e' lB'ea. E' este tutorial1 3a$os a echar u' %ri$er 3ista0o a la a"ici!' "e la clasi5icaci!' )
locali0aci!' "e 'uestros i'5or$es1 6ue luego se +asar. e' 5uturos tutoriales. 821 %.gi'as
i$%resas:
Descargar el c!"igo "e la $uestra .
Contenido del Tutorial +3 (Visual C #)
&'tro"ucci!'
Paso 1( Agregar la %agi'aci!' ) la clasi5icaci!' *e+ Tutorial P.gi'as
Paso 2( 7isuali0aci!' "e i'5or$aci!' "el %ro"ucto e' u' Dri"7ie4
Paso ,( A"ici!' "e co$%ati+ili"a" "e %agi'aci!'
El usuario "e %agi'aci!' e%erie'cia
"e %agi'aci!' "el la"o "el ser3i"or "e 5lu#o "e tra+a#o
Paso /( Perso'ali0ar la e%erie'cia "e %agi'aci!'
Paso 2( Agregar A%o)o Clasi5icaci!' +i"ireccio'al
ea$i'ar el 5lu#o "e tra+a#o Clasi5icaci!'
Clasi5icaci!' "el Dri"7ie4 $e"ia'te %rogra$aci!'
Co'clusi!'
Introduccin
Pagi'aci!' ) la clasi5icaci!' so' "os caracterBsticas $u) co$u'es al $ostrar "atos e' u'a
a%licaci!' e' lB'ea. Por e#e$%lo1 e' la +<s6ue"a "e li+ros "e ASP.NET e' u'a li+rerBa e'
lB'ea1 %ue"e ha+er cie'tos "e li+ros1 %ero el i'5or$e 6ue e'u$era los resulta"os "e
+<s6ue"a s!lo e'u$era 10 resulta"os %or %.gi'a. Por otra %arte1 los resulta"os %ue"e' ser
or"e'a"os %or tBtulo1 %recio1 '<$ero "e %.gi'as1 el 'o$+re "el autor1 ) asB
sucesi3a$e'te. Mie'tras 6ue e' los <lti$os 2, tutoriales ha' ea$i'a"o c!$o co'struir
u'a 3arie"a" "e i'5or$es1 i'clu)e'"o las i'ter5aces 6ue %er$ite' agregar1 e"itar ) eli$i'ar
"atos 'oIhe$os 3isto c!$o or"e'ar los "atos1 ) los e#e$%los "e %agi'aci!' <'ico 6ue
he$os 3isto ha' si"o co' el 2etailsVie0 ) For#Vie0 co'troles.
E' este tutorial1 3a$os a 3er c!$o agregar or"e'aci!' ) %agi'aci!' "e 'uestros i'5or$es1
6ue se %ue"e lograr si$%le$e'te $arca'"o u'a casilla "e 3eri5icaci!' %ocos. Por
"esgracia1 esta i$%le$e'taci!' si$%lista tie'e sus i'co'3e'ie'tes( 9a i'ter5a0 "e la
clasi5icaci!' "e#a u' %oco 6ue "esear1 ) las ruti'as "e +<s6ue"a 'o est.' "ise=a"os %ara
u'a e5icie'te locali0aci!' a tra3-s "e co'#u'tos "e resulta"os gra'"es. Tutoriales 5uturo se
estu"iar. la 5or$a "e su%erar las li$itacio'es "e la %agi'aci!' 5uera "e la ca#a ) las
solucio'es "e or"e'aci!'.
Paso 1: .gregar la paginacin y la clasi'icacin
P=ginas Web Tutorial
A'tes "e e$%e0ar este tutorial1 %ri$ero to$e u' $o$e'to %ara agregar las %.gi'as
ASP.NET 6ue 'ecesitare$os %ara este tutorial ) los tres siguie'tes. Co$ie'ce %or crear u'a
'ue3a car%eta lla$a"a Pagi'gA'"Sorti'g e' el %ro)ecto. A co'ti'uaci!'1 agregue los
siguie'tes ci'co %.gi'as ASP.NET e' esta car%eta1 te'ie'"o to"os ellos co'5igura"os %ara
utili0ar el Site.$aster %.gi'a $aestra(
De5ault.as%
Si$%lePagi'gSorti'g.as%
E55icie'tPagi'g.as%
SortPara$eter.as%
Custo$Sorti'g>&.as%
Figura 1 Cree una carpeta Paging.nd(orting y a5adir las p=ginas .(P/7T
tutorial
A co'ti'uaci!'1 a+ra la %.gi'a De5ault.as% ) arrastre el co'trol "e usuario
Sectio'9e3elTutorial9isti'g.asc "e la car%eta >serCo'trols e' la su%er5icie "e "ise=o. Este
co'trol "e usuario 6ue he$os crea"o e' la %.gi'as %ri'ci%ales ) "e e%loraci!' "el
sitio tutorial1 e'u$era el $a%a "el sitio ) $uestra los tutoriales "e la secci!' actual e' u'a
lista co' 3i=etas.
Figura + .gregar el control de usuario (ection*e!elTutorial*istingascx a
2e'aultaspx
Co' el 5i' "e te'er la lista co' 3i=etas $ostrar la %agi'aci!' ) la clasi5icaci!' tutoriales 6ue
esta$os crea'"o1 ha) 6ue a=a"ir al $a%a "el sitio. A+ra el archi3o *e+.site$a% ) agregue
el $arca"o siguie'te "es%u-s "e la HE"ici!'1 i'sertar ) eli$i'arH "el $a%a "el sitio 'o"o
$arca"o(
<SiteMapNode title = "paginacin y la clasificacin", url = "~ / PagingAndSorting /
Default.aspx"
description = "Ejemplos de informes que proporcionan paginacin y la clasificacin
Capacidades ">
<SiteMapNode url = "~ / PagingAndSorting / SimplePagingSorting.aspx"
title = "Ejemplos simples de paginacin y ordenacin"
description = "Examina cmo agregar paginacin simple y clasificacin
apoyo. "/>
<SiteMapNode url = "~ / PagingAndSorting / EfficientPaging.aspx"
title = "de manera eficiente Paginar a travs de grandes conjuntos de resultados"
description = "Aprender de manera eficiente a travs de la pgina de resultados
grande
establece. "/>
<SiteMapNode url = "~ / PagingAndSorting / SortParameter.aspx"
title = "ordenar datos en el BLL o DAL"
description = "Muestra cmo realizar la lgica de la clasificacin en el
Lgica de Negocio
Capa o de acceso a datos. "/>
<SiteMapNode url = "~ / PagingAndSorting / CustomSortingUI.aspx"
title = "Personalizacin de la interfaz de usuario de ordenacin"
description = "Aprenda a personalizar y mejorar la ordenacin de usuario
interfaz. "/>
</ SiteMapNode>
Figura 1 .ctuali%ar el #apa del sitio para incluir las nue!as p=ginas .(P/7T
Paso +: Visuali%acin de in'or#acin del producto en
un 9ridVie0
A'tes "e 6ue real$e'te %o'er e' %r.ctica las ca%aci"a"es "e %agi'aci!' ) la clasi5icaci!'1
%ri$ero 3a$os a crear u' est.'"ar 'o se %ue"e escri+ir1 'o %agi'a+le 9ridVie0 6ue
$uestra la i'5or$aci!' "el %ro"ucto. Esta es u'a tarea 6ue he$os hecho $uchas 3eces
a'tes e' to"a esta serie "e tutoriales1 asB1 estas $e"i"as "e+e' estar
5a$iliari0a"os.Co$ie'ce a+rie'"o la %.gi'a Si$%lePagi'gSorti'g.as% ) arrastre
u' control 9ridVie0 "e co'trol "e la ca#a "e herra$ie'tas e' el "ise=o1 co'5iguraci!' "e
su I2 "e %ro%ie"a" "e los productos . A co'ti'uaci!'1 cree u'
'ue3o4b6ect2ata(ource 6ue utili0a el ProductsD** clase 9etProducts () %ara "e3ol3er
to"a la i'5or$aci!' "el %ro"ucto.
Figura 3 Fecuperar in'or#acin acerca de todos los productos #ediante el uso
de la 9etProducts () #?todo
De+i"o a 6ue este i'5or$e es u' i'5or$e "e s!lo lectura1 'o ha) 'ecesi"a" "e tra0ar
el 4b6ect2ata(ource Ms Insert () 1$pdate () o 7li#inar () $-to"os a los
corres%o'"ie'tes ProductsD** $-to"os1 %or lo ta'to1 eli#a (/inguno) e' la lista
"es%lega+le %ara la .CT$.*IX.CIY/ 1 I/(7FT.F ) D4FF.F las 5ichas.
Figura - 7li6a la opcin (/inguno) en la lista desplegable en el $P2.T7> I/(7FT y
27*7T7 pesta5as
A co'ti'uaci!'1 3a$os a %erso'ali0ar el 9ridVie0 los ca$%os s1 "e $o"o 6ue s!lo los
%ro"uctos "e los 'o$+res1 %ro3ee"ores1 categorBas1 %recios1 ) los esta"os "e sus%e'"er se
$uestra'. Por otra %arte1 'o "u"e e' hacer cual6uier ca$+io "e 5or$ato a 'i3el "e ca$%o1
co$o el a#uste "el AeaderText %ro%ie"a"es o el 5or$ato "el %recio "e u'a
$o'e"a. Des%u-s "e estos ca$+ios1 el 9ridVie0 $arca"o "eclarati3o Ms "e+e ser si$ilar a
lo siguie'te(
<Asp: GridView ID = "Productos" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "ProductID" DataSourceID = "ObjectDataSource1"
EnableViewState = "false">
<columnas>
<Asp: BoundField DataField = "ProductName" HeaderText = "Producto"
SortExpression = "ProductName" />
<Asp: BoundField DataField = "CategoryName" HeaderText = "Categora"
ReadOnly = "True" SortExpression = "CategoryName" />
<Asp: BoundField DataField = "SupplierName" HeaderText = "Proveedor"
ReadOnly = "True" SortExpression = "SupplierName" />
<Asp: BoundField DataField = "UnitPrice" HeaderText = "Precio"
SortExpression = "UnitPrice" DataFormatString = "{0: C}"
HtmlEncode = "false" />
<Asp: CheckBoxField DataField = "interrumpidas" HeaderText = "interrumpidas"
SortExpression = "interrumpidas" />
</ Columns>
</ Asp: GridView>
9a 5igura 6 $uestra 'uestro %rogreso hasta ahora cua'"o se 3e a tra3-s "e u'
'a3ega"or. Te'ga e' cue'ta 6ue la %.gi'a se e'u$era' to"os los %ro"uctos e' u'a sola
%a'talla1 $ostra'"o el 'o$+re "e ca"a %ro"ucto1 categorBa1 %ro3ee"or1 %recio1 ) el esta"o
sus%e'"i"o.
Figura 8 Cada uno de los productos est= en la lista
Paso 1: .5adir soporte de paginacin
9ista"o "e todos los %ro"uctos e' u'a sola %a'talla %ue"e co'"ucir a u'a so+recarga "e
i'5or$aci!' %ara el usuario leer los "atos. Para a)u"ar a 6ue los resulta"os sea' $.s
$a'e#a+les1 %o"e$os "i3i"ir los "atos e' %.gi'as $.s %e6ue=as "e "atos ) %er$ite' al
usuario %aso a tra3-s "e los "atos "e u'a %.gi'a a la 3e0. Para lograr esto +asta co'
$arcar la paginacin .cti!ar casilla "e 3eri5icaci!' "e la 9ridVie0 Ms eti6ueta i'telige'te
8esto esta+lece el 9ridVie0 Ms%ro%ie"a" Allo4Pagi'g "e !erdad :.
Figura : &arBue la casilla de !eri'icacin Aabilitar paginacin para a5adir
soporte de paginacin
Acti3aci!' "e %agi'aci!' li$ita el '<$ero "e registros $ostra"os %or %.gi'a ) a=a"e
u'a interfaG de aginaci#n al9ridVie0 . 9a i'ter5a0 "e %agi'aci!' %or "e5ecto1 6ue se
$uestra e' la 5igura Z1 es u'a serie "e '<$eros "e %.gi'a1 6ue %er$ite al usuario 'a3egar
r.%i"a$e'te "e u'a %.gi'a "e "atos a otro. Esta i'ter5a0 "e %agi'aci!' "e+e resultarle
5a$iliar1 co$o lo he$os 3isto cua'"o se a=a"e el a%o)o "e %agi'aci!' %ara
el 2etailsVie0 ) For#Vie0 co'troles e' tutoriales a'teriores.
Ta'to el 2etailsVie0 ) For#Vie0 s!lo $uestra los co'troles "e u' solo registro %or
%.gi'a. El 9ridVie0 1 si' e$+argo1 co'sulte a su %ro%ie"a" PageSi0e %ara "eter$i'ar el
'<$ero "e registros a $ostrar %or %.gi'a 8%or "e5ecto esta %ro%ie"a" a u' 3alor "e 10:.
Este 9ridVie0 1 2etailsVie0 ) For#Vie0 i'ter5a0 Ms "e %agi'aci!' se %ue"e %erso'ali0ar
$e"ia'te el uso "e las siguie'tes %ro%ie"a"es(
Pager(tyle ( i'"ica la i'5or$aci!' "e estilo %ara la i'ter5a0 "e %agi'aci!'1 %ue"e
es%eci5icar la co'5iguraci!'
co$o DacJColor 1 ForeColor 1 CssClass 1 Aori%ontal.lign 1 ) asB sucesi3a$e'te.
Pager(ettings ICo'tie'e u' gru%o "e %ro%ie"a"es 6ue %ue"e %erso'ali0ar la
5u'cio'ali"a" "e la i'ter5a0 "e +<s6ue"aT PageDuttonCount i'"ica el '<$ero
$.i$o "e '<$eros "e %.gi'a 'u$-ricos $uestra' e' la i'ter5a0 "e %agi'aci!' 8%or
"e5ecto es 10:1 la %ro%ie"a" Mo"e i'"ica c!$o la i'ter5a0 "e %agi'aci!' 5u'cio'a )
se %ue"e esta+lece e'(
(iguiente.nterior Muestra u'a (iguiente ) .nterior +oto'es1 %er$itie'"o
al usuario %aso hacia "ela'te o hacia atr.s u'a %.gi'a a la 3e0.
/extPre!iousFirst*ast A"e$.s
"e (iguiente ) .nterior +oto'es1 Pri#ero ) alti#o +oto'es ta$+i-' est.'
i'clui"os1 lo 6ue %er$ite al usuario $o3erse r.%i"a$e'te a la %ri$era o <lti$a
%.gi'a "e "atos.
/u#?ricos Muestra u'a serie "e '<$eros "e %.gi'a1 6ue %er$ite al usuario
saltar a cual6uier %.gi'a "e i'$e"iato.
/u#ericFirst*ast A"e$.s "e los '<$eros "e %.gi'a1
i'clu)e pri#er ) Hlti#o +ot!'1 6ue %er$ite al usuario %asar r.%i"a$e'te a la
%ri$era o <lti$a %.gi'a "e "atos1 el Pri#er A alti#o +oto'es se $uestra'
s!lo si to"os los '<$eros "e %.gi'a 'u$-rico 'o %ue"e e'ca#ar.
Por otra %arte1 el 9ridVie0 1 2etailsVie0 ) For#Vie0 o5rece'
la PageIndex ) PageCount %ro%ie"a"es1 lo 6ue i'"ica la %.gi'a actual 6ue se est. 3ie'"o
) el '<$ero total "e %.gi'as "e "atos1 res%ecti3a$e'te. El PageIndex %ro%ie"a" est.
i'"ea"a a %artir "e las 0Ilo 6ue sig'i5ica 6ue1 al 3er la %ri$era %.gi'a "e los
"atos1 PageIndex ser. igual a 0.PageCount 1 %or otro la"o1 e$%ie0a a co'tar a 11 lo 6ue
sig'i5ica 6ue PageIndex se li$ita a los 3alores e'tre 0 )PageCount K 1 .
To$e$os u' $o$e'to %ara $e#orar la a%arie'cia %or "e5ecto "e
'uestro 9ridVie0 i'ter5a0 "e %agi'aci!' Ms. E' co'creto1 3a$os a te'er la i'ter5a0 "e
%agi'aci!' ali'ea"o a la "erecha co' u' 5o'"o gris claro. E' lugar "e esta+lecer
"irecta$e'te estas %ro%ie"a"es a tra3-s "el 9ridVie0 Ms Pager(tyle %ro%ie"a"1 3a$os a
crear u'a clase CSS e' st)les.css lla$a"o PagerFo0(tyle 1 a co'ti'uaci!'1 asig'ar
el Pager(tyle Ms CssClass %ro%ie"a" a tra3-s "e 'uestro te$a. Co$ie'ce a+rie'"o
st)les.css ) a=a"ir la siguie'te "e5i'ici!' "e clase CSS(
. PagerRowStyle
{
background-color: # ddd;
text-align: right;
}
A co'ti'uaci!'1 a+ra el archi3o e' la car%eta Dri"7ie4.s?i' Data*e+Co'trols "e'tro "e la
car%eta A%%_The$es. Co$o )a co$e'ta$os e' la %.gi'as %ri'ci%ales ) "e e%loraci!' "el
sitio tutorial1 los archi3os "e la %iel se %ue"e utili0ar %ara es%eci5icar el 3alor "e la
%ro%ie"a" %re"eter$i'a"a "e u' co'trol *e+. Por lo ta'to1 au$e'tar las o%cio'es
eiste'tes %ara i'cluir el esta+leci$ie'to "e
la Pager(tyle Ms CssClass %ro%ie"a" PagerFo0(tyle . A"e$.s1 3a$os a co'5igurar la
i'ter5a0 "e %agi'aci!' %ara $ostrar u' $.i$o "e ci'co +oto'es "e %.gi'a 'u$-ricos
utili0a'"o el /u#ericFirst*asti'ter5a0 "e %agi'aci!'.
<asp:GridView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
<FooterStyle CssClass="FooterStyle" />
<SelectedRowStyle CssClass="SelectedRowStyle" />
<PagerStyle CssClass="PagerRowStyle" />
<PagerSettings Mode="NumericFirstLast" PageButtonCount="5" />
</ Asp: GridView>
*a experiencia de usuario de paginacin
9a 5igura P $uestra la %.gi'a *e+ cua'"o se acce"a a tra3-s "e u' 'a3ega"or "es%u-s "e
6ue el 9ridVie0 Ms de paginacin .cti!ar casilla "e 3eri5icaci!' ha si"o co$%ro+a"o )
el Pager(tyle ) Pager(ettings co'5iguracio'es se ha' hecho a tra3-s "e
la 9ridVie0sJin archi3o. Te'ga e' cue'ta c!$o s!lo 10 se $uestra' los registros1 ) la
i'ter5a0 "e %agi'aci!' %ue"e i'"icar 6ue esta$os 3ie'"o la %ri$era %.gi'a "e los "atos.
Figura ; Cuando acti!e la paginacin> slo un subcon6unto de los registros se
#uestra a la !e%
Cua'"o el usuario hace clic e' u'o "e los '<$eros "e %.gi'a e' la i'ter5a0 "e +<s6ue"a1
u'a "e3oluci!' "e "atos sigue ) 3uel3e a cargar la %.gi'a1 6ue $uestra los registros 6ue la
%.gi'a solicita"a. 9a Eigura K $uestra los resulta"os "es%u-s "e o%tar %ara 3er la <lti$a
%.gi'a "e "atos. Te'ga e' cue'ta 6ue la <lti$a %.gi'a tie'e s!lo u' registro1 esto es asB1
%or6ue ha) P1 registros e' total1 6ue se tra"uce e' ocho %.gi'as "e 10 registros %or
%.gi'a1 $.s u'a %.gi'a co' u' registro <'ico.
Figura < .l "acer clic en un nH#ero de p=gina "ace una de!olucin de datos y
#uestra el subcon6unto apropiado de registros
Paginacin del lado del ser!idor de 'lu6o de traba6o
Cua'"o el usuario 5i'al hace clic e' u' +ot!' e' la i'ter5a0 "e +<s6ue"a1 u'a "e3oluci!' "e
"atos sigue ) co$ie'0a el siguie'te ser3i"or "e 5lu#o "e tra+a#o(
1. El 9ridVie0 Ms 8o 2etailsVie0 o For#Vie0 : PageIndexC"anging acti3a el
e3e'to.
2. El 4b6ect2ata(ource reIsolicitu"es "e todos los "atos "e la ;991
el 9ridVie0 Ms PageIndex ) Page(i%e 3alores "e las %ro%ie"a"es se utili0a' %ara
"eter$i'ar 6u- registros "e3ueltos "es"e la ;99 se "e+e $ostrar e' el 9ridVie0.
,. El 9ridVie0 Ms PageIndexC"anged acti3a el e3e'to.
E' el %aso 21 el 4b6ect2ata(ource reIsolicitu"es "e to"os los "atos "e la 5ue'te "e
"atos. Este estilo "e locali0aci!' se co'oce co$<'$e'te co$o la aginaci#n or defecto 1
)a 6ue es el co$%orta$ie'to "e %agi'aci!' utili0a %or "e5ecto la hora "e esta+lecer
el .llo0Paging %ro%ie"a" real . Co' la %agi'aci!' %or "e5ecto e' el co'trol *e+ "e "atos
i'ge'ua$e'te recu%era to"os los registros "e ca"a %.gi'a "e "atos1 a %esar "e 6ue s!lo
u' su+co'#u'to "e los registros so' e5ecti3a$e'te %resta"os e' el c!"igo HTM9 6ue se
e'3Ba al 'a3ega"or. A $e'os 6ue los "atos "e +ase "e "atos se al$ace'a e' cach- %or el
;99 o 4b6ect2ata(ource 1 la %agi'aci!' %or "e5ecto es i'3ia+le %ara los co'#u'tos "e
resulta"os lo su5icie'te$e'te gra'"es o %ara a%licacio'es *e+ co' $uchos usuarios
si$ult.'eos.
E' el siguie'te tutorial1 3a$os a ea$i'ar c!$o i$%le$e'tar la aginaci#n
ersonaliGada . Co' la %agi'aci!' %erso'ali0a"a 6ue es%ecB5ica$e'te %ue"e i'struir
al 4b6ect2ata(ource %ara recu%erar s!lo el co'#u'to %reciso "e los registros 'ecesarios
%ara la %.gi'a "e "atos solicita"a. Co$o se %ue"e i$agi'ar1 la %agi'aci!' %erso'ali0a"a
$e#ora la e5icie'cia "e la locali0aci!' a tra3-s "e co'#u'tos "e resulta"os gra'"es.
/ota: Mie'tras 6ue la %agi'aci!' %or "e5ecto 'o es a"ecua"o cua'"o la %agi'aci!' a
tra3-s "e co'#u'tos "e resulta"os lo su5icie'te$e'te gra'"e o "e los sitios co' $uchos
usuarios si$ult.'eos1 se "a' cue'ta 6ue la %agi'aci!' %erso'ali0a"a re6uiere $.s
ca$+ios ) es5uer0os %ara a%licar ) 'o es ta' se'cillo co$o $arcar u'a casilla "e
3eri5icaci!' 8co$o es la %agi'aci!' %or "e5ecto: . Por lo ta'to1 la %agi'aci!' %or "e5ecto
%ue"e ser la o%ci!' i"eal %ara los %e6ue=os sitios1 4e+ "e +a#o tr.5ico o cua'"o la
%agi'aci!' a tra3-s "e co'#u'tos "e resulta"os relati3a$e'te %e6ue=o1 )a 6ue es $ucho
$.s 5.cil ) r.%i"o "e i$%le$e'tar.
Por e#e$%lo1 si sa+e$os 6ue 'u'ca 3a$os a te'er $.s "e 100 %ro"uctos e' 'uestra +ase
"e "atos1 la ga'a'cia "e re'"i$ie'to $B'i$o 6ue go0a' "e %agi'aci!' %erso'ali0a"a es
%ro+a+le 6ue co$%e'sa"o %or el es5uer0o 'ecesario %ara %o'erlo e' %r.ctica. Si1 si'
e$+argo1 6ue u' "Ba %o"rBa te'er $iles o "ece'as "e $iles "e %ro"uctos1 no la a%licaci!'
"e %agi'aci!' %erso'ali0a"a e' gra' $e"i"a "i5iculta' la escala+ili"a" "e 'uestra
a%licaci!'.
Paso 3: Personali%ar la experiencia de paginacin
9os co'troles "e "atos "e *e+ o5rece' u'a serie "e %ro%ie"a"es 6ue se %ue"e' utili0ar
%ara $e#orar la e%erie'cia "el usuario "e %agi'aci!'. El PageCount %ro%ie"a"1 %or
e#e$%lo1 i'"ica el '<$ero "e %.gi'as total ha)1 $ie'tras 6ue elPageIndex %ro%ie"a"
i'"ica la %.gi'a actual 6ue se 3isita ) se %ue"e co'5igurar %ara $o3er u' usuario a u'a
%.gi'a es%ecB5ica r.%i"a$e'te. Para ilustrar c!$o utili0ar estas %ro%ie"a"es %ara $e#orar
la e%erie'cia "e %agi'aci!' "el usuario1 3a$os a a=a"ir u'a etiBueta "e co'trol "e
&'ter'et a la %.gi'a 6ue i'5or$a al usuario "e la %.gi'a e' 6ue te e'cue'tras e'1 #u'to co'
u' 2rop2o0n*ist "e co'trol 6ue les %er$ite saltar r.%i"a$e'te a cual6uier "a"o %.gi'a.
E' %ri$er lugar1 a=a"ir u'a etiBueta "e co'trol "e &'ter'et a la %.gi'a1 co'5igurar
su I2 "e %ro%ie"a" "ePagingIn'or#ation 1 ) claro a su texto la %ro%ie"a". A
co'ti'uaci!'1 cree u' co'trola"or "e e3e'tos %ara el 9ridVie0Ms 2ataDound e3e'to )
agregue el siguie'te c!"igo(
protected void Products_DataBound (object sender, EventArgs e)
{
PagingInformation.Text = String.Format ("Usted est viendo la pgina {0} de
{1 }...",
Products.PageIndex + 1, Products.PageCount);
}
Este co'trola"or "e e3e'tos asig'a el PagingIn'or#ation etiBueta Ms de
texto %ro%ie"a" a u' $e'sa#e 6ue i'5or$a al usuario "e la %.gi'a 6ue est.' 3isita'"o
actual$e'teI ProductsPageIndex b 1 1 "e la 5or$a total "e $uchas
%.gi'asProductsPageCount 8se a=a"e 1 a la ProductsPageIndex %ro%ie"a" 1
%or6ue PageIndex est. i'"ea"a a %artir "e 0:.ElegB el asig'ar esta etiBueta Ms de
texto "e %ro%ie"a" e' el 2ataDound co'trola"or "e e3e'tos1 a "i5ere'cia "e
laPageIndexC"anged co'trola"or "e e3e'tos1 )a 6ue el 2ataDound e3e'to se acti3a
ca"a 3e0 6ue los "atos se u'e a la9ridVie0 1 $ie'tras 6ue
el PageIndexC"anged co'trola"or "e e3e'tos s!lo se acti3a cua'"o el B'"ice "e la %.gi'a
es ca$+ia"o. Cua'"o el 9ridVie0 es i'icial$e'te los "atos co'soli"a"os so+re la 3isita "e
la %ri$era %.gi'a1 elPageIndexC"anging e3e'to 'o se "is%ara 8$ie'tras 6ue
el 2ataDound caso lo hace:.
Co' esta a"ici!'1 el usuario ahora se $uestra u' $e'sa#e i'"ica'"o 6ue la %.gi'a 6ue
est.' 3isita'"o ) el '<$ero "e %.gi'as total ha) "e los "atos.
Figura 1, 7l nH#ero de p=gina actual y el nH#ero total de p=ginas se #uestran
A"e$.s "e la etiBueta "e co'trol1 ta$+i-' 3a$os a agregar u' 2rop2o0n*ist "e co'trol
6ue $uestra' los '<$eros "e %.gi'a e' el 9ridVie0 co' la %.gi'a actual e' Eire5o
seleccio'a"o. 9a i"ea a6uB es 6ue el usuario %ue"e saltar r.%i"a$e'te "e la %.gi'a actual
a otra co' s!lo seleccio'ar el B'"ice "e la 'ue3a %.gi'a "e la 2rop2o0n*ist .Co$ie'ce
%or agregar u' 2rop2o0n*ist al "ise=a"or1 el esta+leci$ie'to "e su I2 "e %ro%ie"a"
"e Page*ist ) el co'trol "e la .utoPostDacJ Aabilitar la o%ci!' "e su eti6ueta
i'telige'te.
A co'ti'uaci!'1 3ol3er a la 2ataDound co'trola"or "e e3e'tos ) a=a"ir el siguie'te
c!"igo(
/ / Acaba con todos los elementos de la DropDownList
PageList.Items.Clear ();
/ / Aadir un ListItem por cada pgina
for (int i = 0; i <Products.PageCount; i + +)
{
/ / Se aade el nuevo ListItem
ListItem pageListItem = new ListItem (String.Concat ("Pgina", i + 1),
i.ToString ());
PageList.Items.Add (pageListItem);
/ / Selecciona el elemento actual, si es necesario
if (i == Products.PageIndex)
pageListItem.Selected = true;
}
Este c!"igo e$%ie0a %or la li$%ie0a "e los ele$e'tos "e
la Page*ist 2rop2o0n*ist . Esto %o"rBa %arecer su%er5lua1 )a 6ue u'o 'o es%erarBa 6ue
el '<$ero "e %.gi'as %ara ca$+iar1 %ero otros usuarios %ue"e' utili0ar el siste$a
si$ult.'ea$e'te1 a=a"ir o eli$i'ar registros "e la los productos "e $esa. Tales
i'sercio'es o "elecio'es %o"rBa' alterar el '<$ero "e %.gi'as "e "atos.
A co'ti'uaci!'1 "e+e crear los '<$eros "e %.gi'a "e 'ue3o ) te'er la 6ue se asig'a a la
actual 9ridVie0 PageIndexseleccio'a"a %or "e5ecto. Esto lo logra$os co' u' +ucle "e 0
a PageCount K 1 Ia=a"ie'"o u' 'ue3o *istIte# e' ca"a iteraci!' ) se 5i#a'
las seleccionadas a la %ro%ie"a" real 1 si el B'"ice "e iteraci!' actual es igual a
la 9ridVie0 MsPageIndex %ro%ie"a".
Por <lti$o1 se "e+e crear u' co'trola"or "e e3e'tos %ara
el 2rop2o0n*ist Ms (electedIndexC"anged e3e'to1 6ue se acti3a ca"a 3e0 6ue el
usuario eli#a u' ele$e'to "i5ere'te "e la lista. Para crear este co'trola"or "e e3e'tos1 haga
"o+le clic e' el 2rop2o0n*ist e' el "ise=o1 a co'ti'uaci!'1 agregue el siguie'te c!"igo(
protected void PageList_SelectedIndexChanged (object sender, EventArgs e)
{
/ / Ir a la pgina especificada
Products.PageIndex = Convert.ToInt32 (PageList.SelectedValue);
}
Co$o $uestra la Eigura 11 se $uestra1 si$%le$e'te ca$+ia'"o
el 9ridVie0 Ms PageIndex %ro%ie"a" hace 6ue los "atos se 3uel3a' a e'la0ar co'
el 9ridVie0 . E' el 9ridVie0 Ms 2ataDound co'trola"or "e e3e'tos1 las
corres%o'"ie'tes 2rop2o0n*ist *istIte# est. seleccio'a"o.
Figura 11 7l usuario es lle!ado auto#=tica#ente a la p=gina sexta> cuando la
seleccin de la @P=gina 8@ desplegable ele#ento de la lista
Paso -: .gregar co#patibilidad bidireccional
clasi'icacin
A=a"ie'"o so%orte +i"ireccio'al clasi5icaci!' es ta' si$%le co$o a=a"ir so%orte "e
%agi'aci!'1 si$%le$e'te $ar6ue laAabilitar ordenacin o%ci!' "el 9ridVie0 Ms eti6ueta
i'telige'te 86ue esta+lece el 9ridVie0 Ms %ro%ie"a" Allo4Sorti'g"e !erdad :. Esto hace
6ue ca"a u'a "e las ca+eceras "e los 9ridVie0 ca$%os Ms co$o *inJDutton s 6ue1 al
hacer clic1 hacer u'a "e3oluci!' "e "atos ) "e3ol3er los "atos or"e'a"os %or la colu$'a
hace clic e' or"e' asce'"e'te. Al hacer clic e' la $is$a ca+ecera *inJDutton 'ue3o reI
or"e'a los "atos e' or"e' "esce'"e'te.
/ota: Si est. utili0a'"o u'a ca%a "e "atos %erso'ali0a"a "e acceso e' lugar "e u' DataSet
co' ti%o1 %ue"e 6ue 'o te'ga u'a Aabilitar ordenacin o%ci!' e' el 9ridVie0 tag Ms
i'telige'te. S!lo 9ridVie0 s liga"o a las 5ue'tes "e "atos 6ue so%orta "e 5or$a 'ati3a la
clasi5icaci!' tie'e esta casilla "e 3eri5icaci!' "is%o'i+les. El DataSet o5rece 5uera "e la ca#a
a"$ite la or"e'aci!'1 )a 6ue la DataTa+le ADG.NET %ro%orcio'a u'a Clasi'icar $-to"o
6ue1 cua'"o se i'3oca1 ti%o DataRo4 "el DataTa+le1 utili0a'"o los criterios es%eci5ica"os.
Si el DA9 'o "e3uel3e los o+#etos 6ue so%orta "e 5or$a 'ati3a la clasi5icaci!'1 te'"r. 6ue
co'5igurar el4b6ect2ata(ource %ara %asar la i'5or$aci!' "e clasi5icaci!' a la ca%a "e
l!gica e$%resarial1 6ue %ue"e or"e'ar los "atos o los "atos or"e'a"os %or el DA9. 7a$os a
estu"iar la 5or$a "e or"e'ar los "atos e' la l!gica "e 'egocios ) las ca%as "e acceso a
"atos e' u' tutorial 5uturo.
9a clasi5icaci!' *inJDutton s se re%rese'ta' co$o hi%er3B'culos HTM91 cu)o actual
colores 8a0ul %ara u' e'lace 'o 3isita"o ) u'a "e color ro#o oscuro "e u' 3B'culo 3isita"o:
choca' co' el color "e 5o'"o "e la 5ila "e e'ca+e0a"o. E' su lugar1 3a$os a te'er to"os los
e'laces 5ila "e e'ca+e0a"o a%arece e' +la'co1 si' i$%ortar si so' o 'o ha' si"o
3isita"os. Esto se %ue"e lograr $e"ia'te la a"ici!' "e lo siguie'te a la stylescss clase(
. HeaderStyle uno, HeaderStyle a:. Visit
{
Color: Blanco;
}
Esta si'tais i'"ica 6ue el uso "e teto +la'co cua'"o se $uestra' los hi%er3B'culos "e'tro
"e u' ele$e'to 6ue utili0a elAeader(tyle clase.
Des%u-s "e esta a"ici!' CSS1 cua'"o se 3isita la %.gi'a a tra3-s "e u' 'a3ega"or1 la
%a'talla "e+e ser si$ilar a la Eigura 12. E' %articular1 la 5igura 12 $uestra los resulta"os
"es%u-s "e 6ue el precio 3B'culo "e ca$%o "e ca+ecera se ha hecho clic.
Figura 1+ *os resultados "an sido ordenados por el Precio$nidad en orden
ascendente
7xa#inar el 'lu6o de traba6o de clasi'icacin
To"os 9ridVie0 ca$%osIel DoundField 1 C"ecJDoxField 1 Te#plateField 1 ) asB
sucesi3a$e'teItie'e' u'(ort7xpression %ro%ie"a" 6ue i'"ica la e%resi!' 6ue se "e+e
utili0ar %ara or"e'ar los "atos e' ese ca$%o "e e'lace "e la clasi5icaci!' "e ca+ecera se
hace clic. El 9ridVie0 ta$+i-' tie'e u' (ort7xpression %ro%ie"a". Cua'"o u'
e'ca+e0a"o la clasi5icaci!' *inJDutton se hace clic e' el 9ridVie0 asig'a ese
ca$%o (ort7xpression 3alor a sus(ort7xpression %ro%ie"a". A co'ti'uaci!'1 los "atos
se 3uel3e a recu%erar "e la 4b6ect2ata(ource ) se or"e'a' "e acuer"o co'
el 9ridVie0 Ms (ort7xpression %ro%ie"a". 9a siguie'te lista "etalla la secue'cia "e %asos
6ue suce"e' cua'"o u' ti%o "e usuario 5i'al "e los "atos e' u' 9ridVie0 (
1. El 9ridVie0 Ms Clasi5icaci!' e3e'to i'ce'"ios.
2. El 9ridVie0 Ms %ro%ie"a" SortE%ressio' se esta+lece e' el (ort7xpression "el
ca$%o cu)a clasi5icaci!' ca+ecera *inJDutton se ha hecho clic.
,. El 4b6ect2ata(ource reIrecu%era to"os los "atos "e la ;99 a co'ti'uaci!'1 or"e'a
los "atos $e"ia'te el9ridVie0 Ms (ort7xpression .
/. El 9ridVie0 Ms PageIndex %ro%ie"a" se resta+lece a 01 lo 6ue sig'i5ica 6ue al
or"e'ar el usuario 3uel3e a la %ri$era %.gi'a "e "atos 8su%o'ie'"o 6ue el a%o)o "e
%agi'aci!' se ha i$%le$e'ta"o:
2. El 9ridVie0 Ms e3e'to Sorte" i'ce'"ios.
Al igual 6ue co' la %agi'aci!' %or "e5ecto1 la o%ci!' %or "e5ecto "e clasi5icaci!' reI
recu%era todos los registros "e la ;99. Cua'"o se utili0a la clasi5icaci!'1 si' %agi'aci!' o
cua'"o se utili0a la clasi5icaci!' co' la %agi'aci!' %or "e5ecto1 'o ha) $a'era "e e3itar
este i$%acto e' el re'"i$ie'to 8%or "e+a#o "e al$ace'a$ie'to e' cach- los "atos "e +ase
"e "atos:. Si' e$+argo1 co$o 3ere$os e' u' tutorial 5uturo1 es %osi+le or"e'ar "e $a'era
e5icie'te los "atos cua'"o se utili0a la %agi'aci!' %erso'ali0a"a.
Al e'la0ar u' 4b6ect2ata(ource a la 9ridVie0 a tra3-s "e la lista "es%lega+le e'
el 9ridVie0 tag Ms i'telige'te1 ca"a9ridVie0 ca$%o auto$.tica$e'te tie'e
su (ort7xpression %ro%ie"a" asig'a"a al 'o$+re "el ca$%o "e "atos e'
elProductsFo0 clase. Por e#e$%lo1
el Product/a#e DoundField Ms (ort7xpression est. esta+leci"o e' Product/a#e 1
co$o se $uestra e' el $arca"o "eclarati3o siguie'te(
<Asp: BoundField DataField = "ProductName" HeaderText = "Producto"
SortExpression = "ProductName" />
>' ca$%o %ue"e ser co'5igura"o "e $a'era 6ue 'o es clasi5ica+le e' la li$%ie0a "e
sus (ort7xpression %ro%ie"a" 8asig'.'"ole u'a ca"e'a 3acBa:. Para ilustrar esto1 i$agi'e
6ue 'o 6uerBa "e#ar a 'uestros clie'tes or"e'ar 'uestros %ro"uctos %or el
%recio. El Precio$nidad DoundField Ms (ort7xpression %ro%ie"a" %ue"e ser a%arta"os
"el el $arca"o "eclarati3o o %or $e"io "e la Ca#pos cua"ro "e "i.logo 86ue se %ue"e
acce"er hacie'"o clic e' el 7ditar colu#nas e'lace e' el 9ridVie0 Ms eti6ueta
i'telige'te:.
Figura 11 *os resultados "an sido ordenados por el Precio$nidad en orden
ascendente
Ta' %ro'to co$o el (ort7xpression %ro%ie"a" se ha eli$i'a"o
la Precio$nidad DoundField 1 el e'ca+e0a"o se re%rese'ta e' 5or$a "e teto1 e' lugar
"e co$o u' e'lace co' ello e3itar 6ue los usuarios "e la clasi5icaci!' "e los "atos "e
%recios.
Figura 13 &ediante la eli#inacin de la propiedad (ort7xpression> los usuarios
ya no pueden ordenar los productos por el precio
Clasi'icacin de los 9ridVie0 #ediante
progra#acin
Ta$+i-' %ue"e or"e'ar el co'te'i"o "e la 9ridVie0 $e"ia'te %rogra$aci!' co'
el 9ridVie0 Ms $-to"o Sort . S!lo tie'e 6ue %asar e' el (ort7xpression 3alor %or el 6ue
se or"e'a'1 #u'to co' el SortDirectio' 8 ascendente odescendente :1 ) el 9ridVie0 "e
"atos Ms 3a a ser reIor"e'a"os.
&$agi'a 6ue la ra0!' %or la 6ue a%aga la clasi5icaci!' %or la Precio$nidad era 6ue
est.+a$os %reocu%a"os "e 6ue 'uestros clie'tes s!lo %o"rBa co$%rar sola$e'te los
%ro"uctos "e $e'or %recio. Si' e$+argo1 6uere$os a'i$arlos a co$%rar los %ro"uctos
$.s caros1 asB 6ue1 'os gustarBa 6ue 5uera' ca%aces "e or"e'ar los %ro"uctos %or %recio1
%ero s!lo "es"e el %recio $.s caro "e lo $.s $B'i$o.
Para lograr esto1 agregar u' botn de co'trol *e+ a la %.gi'a1 co'5igurar su I2 "e
%ro%ie"a" "e(ortPrice2escending 1 ) su texto a la %ro%ie"a" HGr"e'ar %or %recioH. A
co'ti'uaci!'1 cree u' co'trola"or "e e3e'tos %ara el botn de Ms Aaga clic en e3e'to
hacie'"o "o+le clic e' el botn "e co'trol e' el "ise=a"or. Agregue el siguie'te c!"igo a
este co'trola"or "e e3e'tos(
protected void SortPriceDescending_Click (object sender, EventArgs e)
{
/ / Ordenar por PrecioUnidad en orden descendente
Products.Sort ("Precio por unidad", SortDirection.Descending);
}
Al hacer clic e' este botn 1 el usuario regresa a la %ri$era %.gi'a co' los %ro"uctos
or"e'a"os %or %recio1 "e $.s caro a $.s +arato 83er Eigura 12:.
Figura 1- .l "acer clic en el botn de las rdenes de los productos #=s caros de
lo caro
Conclusin
E' este tutorial1 3i$os c!$o i$%le$e'tar la %agi'aci!' %or "e5ecto ) clasi5icar las
ca%aci"a"es1 ta'to "e los 6ue era ta' 5.cil co$o $arcar u'a casillaC Cua'"o u' ti%o "e
usuario o las %.gi'as a tra3-s "e los "atos1 u' 5lu#o "e tra+a#o si$ilar se "esarrolla(
1. >'a "e3oluci!' "e "atos se %ro"uce.
2. El co'trol "e "atos *e+ "e %reIgra"o se acti3a el e3e'to
8 PageIndexC"anging o clasi'icacin :.
,. To"os los "atos se 3uel3e a recu%erar el 4b6ect2ata(ource .
/. El co'trol "e "atos *e+ "e 'i3el %ostIacti3a el e3e'to
8 PageIndexC"anged o 4rdenado :.
Mie'tras 6ue la a%licaci!' "e la %agi'aci!' ) la clasi5icaci!' +.sica es $u) se'cilla1 $.s
es5uer0o se "e+e e#ercer %ara utili0ar la %agi'aci!' %erso'ali0a"a $.s e5icie'te o %ara
$e#orar la i'ter5a0 "e %agi'aci!' o clasi5icaci!'. Tutoriales 5uturo a e%lorar estos te$as.

Das könnte Ihnen auch gefallen