<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>El cajón desastre &#187; ASP.NET</title>
	<atom:link href="http://www.dubasdey.com/category/programacion/aspnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dubasdey.com</link>
	<description></description>
	<lastBuildDate>Tue, 02 Jun 2009 14:25:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Campos Ocultos en GridView, ¿Son necesarios?</title>
		<link>http://www.dubasdey.com/2007/09/05/campos-ocultos-en-gridview-%c2%bfson-necesarios/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=campos-ocultos-en-gridview-%25c2%25bfson-necesarios</link>
		<comments>http://www.dubasdey.com/2007/09/05/campos-ocultos-en-gridview-%c2%bfson-necesarios/#comments</comments>
		<pubDate>Wed, 05 Sep 2007 06:12:40 +0000</pubDate>
		<dc:creator>Kuroneko</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2007/09/05/campos-ocultos-en-gridview-%c2%bfson-necesarios/</guid>
		<description><![CDATA[¿Es necesario tener un campo oculto en un GridView de nuestra web para obtener sus datos?.
En la mayoria de los casos la respuesta es NO. El tener los datos en el gridview como ocultos simplemente hace nuestra aplicaci&#243;n mas pesada, y la cantidad de datos que se necesita guardar en el VIEWSTATE mucho mayor.
Se pueden [...]]]></description>
			<content:encoded><![CDATA[<p>¿Es necesario tener un campo oculto en un GridView de nuestra web para obtener sus datos?.</p>
<p>En la mayoria de los casos la respuesta es NO. El tener los datos en el gridview como ocultos simplemente hace nuestra aplicaci&oacute;n mas pesada, y la cantidad de datos que se necesita guardar en el <strong>VIEWSTATE</strong> mucho mayor.</p>
<p>Se pueden acceder a los datos que queramos que est&eacute;n vinculados a un determinado <strong>gridView</strong> de una forma simple, Y ademas accediendo por el nombre de la columna que queremos y no por su indice (una limitaci&oacute;n del <strong>GridView</strong>)</p>
<p>El c&oacute;digo es muy simple: <em>(siendo gw un Control <strong>GridView</strong>)</em></p>
<p>Obtenemos el <strong>DataTable </strong>del <strong>GridView </strong><br />
<code><br />
DataTable dtt =(DataTable) gw.DataSource;<br />
</code></p>
<p>Obtenemos de la fila <strong><em>(int) </em>Row </strong> del <strong>GridView</strong> su correspondencia con la fila   del <strong>DataTable</strong> contenido en el. Aqu&iacute; podemos sustituir <strong>Row</strong> por cualquier valor, como el <strong>selectedIndex</strong> para la fila seleccionada en el <strong>GridView</strong><br />
<code><br />
int index = gw.Rows[row].DataItemIndex;<br />
</code></p>
<p>Finalmente devolvemos del DataTable Obtenido los datos de la fila <strong><em>(int) </em>Row</strong>  y el nombre de la columna que queremos (<strong><em>(string) </em>Col</strong>)</p>
<p> <code><br />
object valorObtenido = dtt.Rows[index][col];<br />
</code></p>
<p>Y con esto  ya tenemos en valorObtenido el valor de la fila y columna que necesitamos de la tabla que se usa para componer el <strong>GridView</strong>, este o no ese campo en el <strong>GridView</strong>.</p>
<p>Este c&oacute;digo es especialmente &&uacute;acute;til para obtener datos de de la fila seleccionada en un <strong>GridView</strong>, pudiendo obtener incluso aquellos campos que no queremos mostrar en el control sin tener que a&ntilde;ad&iacute;rselos como campos ocultos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2007/09/05/campos-ocultos-en-gridview-%c2%bfson-necesarios/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ocultar columnas de un GridView</title>
		<link>http://www.dubasdey.com/2007/08/27/ocultar-columnas-de-un-gridview/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ocultar-columnas-de-un-gridview</link>
		<comments>http://www.dubasdey.com/2007/08/27/ocultar-columnas-de-un-gridview/#comments</comments>
		<pubDate>Mon, 27 Aug 2007 14:28:33 +0000</pubDate>
		<dc:creator>Kuroneko</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2007/08/27/ocultar-columnas-de-un-gridview/</guid>
		<description><![CDATA[Despues de ver esta entrada (http://id4.es/blogs/indigo/archive/2007/08/09/ocultar-columnas-de-un-gridview.aspx)  sobre como ocultar columnas de un GridView si que desaparezcan los datos. He estado realizando unas pruebas
y la solucion es mas simple de la que se plantea.
Normalmente nosotros hacemos en ASPNET:

// Creamos las columnas que sea.. bla bla bla .. el dise&#241;o bla bla
grid.Columns[0].Visible = false;
// Vinculamos los [...]]]></description>
			<content:encoded><![CDATA[<p>Despues de ver esta entrada (<a href="http://id4.es/blogs/indigo/archive/2007/08/09/ocultar-columnas-de-un-gridview.aspx">http://id4.es/blogs/indigo/archive/2007/08/09/ocultar-columnas-de-un-gridview.aspx</a>)  sobre como ocultar columnas de un GridView si que desaparezcan los datos. He estado realizando unas pruebas<br />
y la solucion es mas simple de la que se plantea.</p>
<p>Normalmente nosotros hacemos en ASPNET:<br />
<code><br />
// Creamos las columnas que sea.. bla bla bla .. el dise&ntilde;o bla bla</p>
<p>grid.Columns[0].Visible = false;</p>
<p>// Vinculamos los datos<br />
grid.DataSource = dtt;<br />
grid.DataBind();<br />
</code></p>
<p>Con esto el DataBind no cargara los datos para las columnas que sean <code>Visible=False</code></p>
<p>Lo mas sencillo para resolver este problema es simplemente, cargar todo el GridView y una vez que tenemos los datos, especificar cuales no queremos mostrar</p>
<p><code><br />
// Creamos las columnas que sea.. bla bla bla .. el dise&ntilde;o bla bla</p>
<p>grid.DataSource = dtt;<br />
grid.DataBind();<br />
grid.Columns[0].Visible = false;<br />
</code></p>
<p>Simplemente cambiando el orden del DataBind() con respecto a la asignacion de las columnas no visibles hacemos que estas sean no visibles con sus datos.</p>
<p>Que aprobeche!! <img src='http://www.dubasdey.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2007/08/27/ocultar-columnas-de-un-gridview/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ASP.NET y la navegaci&#243;n entre p&#225;ginas</title>
		<link>http://www.dubasdey.com/2007/06/18/aspnet-y-la-navegacin-entre-pginas/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=aspnet-y-la-navegacin-entre-pginas</link>
		<comments>http://www.dubasdey.com/2007/06/18/aspnet-y-la-navegacin-entre-pginas/#comments</comments>
		<pubDate>Mon, 18 Jun 2007 13:33:31 +0000</pubDate>
		<dc:creator>Manuel Cernuda</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2007/06/18/aspnet-y-la-navegacin-entre-pginas/</guid>
		<description><![CDATA[
Cuando trabajamos con ASP.NET lo mas normal es que nuestra aplicaci&#243;n este dividida en mas de un WebForm.
Esto conlleva que en m&#225;s de una ocasi&#243;n necesitaremos ir de una p&#225;gina a otra, y para realizar esa &#34;navegaci&#243;n&#34;, tenemos opciones claramente diferenciadas:
Server.Transfer(): +1 Sobrecargas

Finaliza la ejecuci&#243;n de la p&#225;gina actual y comienza la ejecuci&#243;n de una [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.dubasdey.com/wp-content/uploads/2007/04/asplogo.gif' alt='ASP' /></p>
<p>Cuando trabajamos con <a href="http://es.wikipedia.org/wiki/ASP.NET" target="_blank" title="ASP.NET">ASP.NET</a> lo mas normal es que nuestra aplicaci&oacute;n este dividida en mas de un WebForm.<br />
Esto conlleva que en m&aacute;s de una ocasi&oacute;n necesitaremos ir de una p&aacute;gina a otra, y para realizar esa &quot;navegaci&oacute;n&quot;, tenemos opciones claramente diferenciadas:</p>
<p><code>Server.Transfer():</code> +1 Sobrecargas<br />
<br />
Finaliza la ejecuci&oacute;n de la p&aacute;gina actual y comienza la ejecuci&oacute;n de una nueva p&aacute;gina para la solicitud actual.<br />
<br />
<code>Response.Redirect():</code> +1 Sobrecargas<br />
<br />
Redirecciona un cliente a una nueva direcci&oacute;n <abbr lang="en" title="Uniform Resource Locator">URL</abbr>. Especifica la nueva <abbr lang="en" title="Uniform Resource Locator">URL</abbr> y si la ejecuci&oacute;n de la p&aacute;gina actual debe finalizar.<br />
<br />
<code>Server.Execute():</code> +1 Sobrecargas<br />
<br />
Ejecuta la solicitud actual utilizando otra p&aacute;gina ubicada en la ruta de acceso a la direcci&oacute;n <abbr lang="en" title="Uniform Resource Locator">URL</abbr> especificada.<br />
<br />
Los comportamientos de estas tres opciones pueden parecer similares a priori, pero si nos sumergimos un poco m&aacute;s en su funcionamiento veremos en que contexto debe usarse cada una.</p>
<p></p>
<h4>Server.Transfer()</h4>
<p>
Al ejecutar este m&eacute;todo se abandonar&aacute; la p&aacute;gina actual y se navegar&aacute; a la introducida en el par&aacute;metro. Al realizarse esta operaci&oacute;n, no se mostrar&aacute; la <abbr lang="en" title="Uniform Resource Locator">URL</abbr> de la nueva pagina, si no que se mantendr&aacute; la actual. Lo que &quot;ocultara&quot; de cara al usuario la ubicaci&oacute;n de la p&aacute;gina en la que se encuentra. </p>
<p>Su caracter&iacute;stica mas destacada, es que si utilizamos su sobrecarga podemos decirle si va a mandar el conjunto de controles que tenemos en la principal.</p>
<p>
<code><br />
Server.Transfer(&quot;pagina2.aspx&quot;,true)<br />
</code><br />
<br />
Si por ejemplo ten&iacute;amos un formulario con un <code>TextBox</code> en la p&aacute;gina principal, ahora podemos acceder al texto que conten&iacute;a cuando se hizo la navegaci&oacute;n. Para ello utilizaremos el nombre o el &iacute;ndice del control (hay que tener en cuenta, que si el control no existe, al intentar obtenerlo devolver&aacute; una excepci&oacute;n.):<br />
<br />\r\n<br />
<br />
<code><br />
string cadena = Request.Form[&quot;NombreControl&quot;];<br />
</code><br />
<br />
<code><br />
string cadena = Request.Form[indice];<br />
</code><br />
<br />
Otra de las peculiaridades de este m&eacute;todo, es que como la redirecci&oacute;n conlleva enviar objetos de servidor, no permite redirigir a <abbr lang="en" title="Uniform Resource Locator">URL</abbr>\&#8217;s ajenas a la aplicaci&oacute;n (como a <a href="http://www.google.es" target="_blank" title="Google">Google</a> o suced&aacute;neos) ni a <abbr lang="en" title="Uniform Resource Locator">URL</abbr>&#8217;s de <abbr lang="en" title="Hyper Text Markup Language">HTML</abbr> plano incluso si est&aacute;n incluidas dentro de la aplicaci&oacute;n. Por tanto si fuera necesario, deber&iacute;amos crear un WebForm.aspx est&aacute;ndar e incluir dentro el <abbr lang="en" title="Hyper Text Markup Language">HTML</abbr> que necesitemos. </p>
<h4>Response.Redirect()</h4>
<p>
Al ejecutar este m&eacute;todo se abandonar&aacute; la p&aacute;gina actual y se navegar&aacute; a la p&aacute;gina introducida por par&aacute;metro, permitiendo adem&aacute;s la posibilidad de que se mantenga la ejecuci&oacute;n de esa p&aacute;gina.</p>
<p>Es decir, ante dos botones con un c&oacute;digo como este:</p>
<p><code><br />
private void btnRedirigir_Click(object sender, System.EventArgs e) {<br />
     Response.Redirect("prueba.aspx",false);<br />
     Session["nombre"] == "Texto";<br />
}</p>
<p>private void btnRedirigir2_Click(object sender, System.EventArgs e){<br />
     Response.Redirect("prueba.aspx");<br />
     Session["nombre"] == "Texto";<br />
}<br />
</code></p>
<p>Al llegar al <code>Page_Load</code> de la p&aacute;gina prueba.aspx, veremos que si hab&iacute;amos pulsado el primer bot&oacute;n, tendremos almacenado en <code>Session[&quot;nombre&quot;]</code> la cadena <code>&quot;Texto&quot;</code>, mientras que si se utiliz&oacute; el segundo bot&oacute;n ese objeto de sesi&oacute;n no existe.</p>
<p>Adem&aacute;s de esto, se puede utilizar la redirecci&oacute;n utilizando las variables por <abbr lang="en" title="Uniform Resource Locator">URL</abbr> (como las <code>$_GET</code> de <abbr lang="en" title="PHP: Hypertext Preprocessor">PHP</abbr>). Es tan simple como crear la <code>string</code> con esas variables ya incluidas.</p>
<p><code><br />
string querystring = "prueba.aspx?p=" + variable1.ToString() + "&#038;q=" + variable2.ToString();<br />
Response.Redirect(querystring);<br />
</code><br />
<br />
Estas se almacenan en la <code>Request</code> y se puede acceder a ellas f&aacute;cilmente: </p>
<p><code><br />
int valor1 = Convert.toInt32(Request.Params["p"]);<br />
int valor2 = Convert.toInt32(Request.Params["q"]);<br />
</code></p>
<p>Al igual que cuando se almacenan objetos en sesi&oacute;n, hay que realizar un casting ya que todo se guarda como <code>object</code>.</p>
<p>Al contrario que el <code>Server.Transfer</code>, este m&eacute;todo si permite redirigir a una p&aacute;gina externa (como un hiperv&iacute;nculo) y si que se ve la <abbr lang="en" title="Uniform Resource Locator">URL</abbr> de la p&aacute;gina al cargarse.        </p>
<h4>Server.Execute()</h4>
<p>
Esta es la opci&oacute;n menos recomendada, ya que no redirige f&iacute;sicamente, si no que ejecuta el c&oacute;digo de la segunda pagina dentro de la primera. Su uso m&aacute;s habitual se basa en insertar un control de tipo <code>Literal</code> en la p&aacute;gina principal, y ejecutar una segunda p&aacute;gina a trav&eacute;s de un <code>StringWriter</code> (que requiere un a&ntilde;adir un <code>using</code> del namespace <code>System.IO</code>), y que el resultado se almacene en el <code>Literal</code>. Por ejemplo:</p>
<p>StringWriter sw = new StringWriter();<br />
Server.Execute(&#8220;prueba.aspx&#8221;,sw);<br />
this.Literal1.Text = sw.ToString();     </p>
<p>
Si en prueba.aspx almacenamos el c&oacute;digo de un <code>Input TextBox</code> y un <code>Input Button</code> dentro de un <code>Panel</code>, al ejecutar ese m&eacute;todo obtendremos ese mismo conjunto de controles sin tener que ir f&iacute;sicamente a la p&aacute;gina.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2007/06/18/aspnet-y-la-navegacin-entre-pginas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

