Foros del Web » Programación para mayores de 30 ;) » .NET »

Parámetros en el Clic del LinkButton

Estas en el tema de Parámetros en el Clic del LinkButton en el foro de .NET en Foros del Web. Hola a tod@s: ¿Se pueden mandar parámetros al llamar al método que se ejecutará al aplicar el evento Clic de un LinkButton? El LinkButton está ...
  #1 (permalink)  
Antiguo 08/04/2007, 14:22
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 1 mes
Puntos: 3
Parámetros en el Clic del LinkButton

Hola a tod@s:

¿Se pueden mandar parámetros al llamar al método que se ejecutará al aplicar el evento Clic de un LinkButton?

El LinkButton está dentro de un ItemTemplate de un TemplateColumn de un DataGrid.

Los parámetros a pasar necesarios para el método son valores de campo de la tabla de la base de datos propios del registro recorrido en dicho DataGrid.

el método sería:

protected void cambio_Estado(string estado, string el_codigo)
{
...
}
__________________
Saludos,

zacktagnan.
=================================================
  #2 (permalink)  
Antiguo 09/04/2007, 15:09
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Re: Parámetros en el Clic del LinkButton

Una forma normal en vez de mandar parámetros es guardar la info en etiquetas y hacer un findcontrol de los valores que necesitas, otra forma sería pasarle en el CommandArgument el DataItem y recibirlo en tu función para accesar a toda la fila.

Espero haberme dado a entender.

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 10/04/2007, 15:08
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 1 mes
Puntos: 3
Re: Parámetros en el Clic del LinkButton

Cita:
Espero haberme dado a entender.
Pues con mi pequeña experiencia en este lenguaje, entiendo así, así ...

Te agradecería me lo ampliaras algo más, si es posible y no mucho abusar, con algún ejemplo de código.

1ª Forma
---------
Cita:
Una forma normal en vez de mandar parámetros es guardar la info en etiquetas y hacer un findcontrol de los valores que necesitas
Esta forma no la entiendo mucho. Cuando dices la info, ¿a qué te refieres...?

Como he comentado, la idea es poner el LinkButton dentro del Datagrid, dentro de un TemplateColumn, dentro de un ItemColumn, algo como esto (a no ser que esté mal planteado):

Código:
<asp:TemplateColumn HeaderText="Estado">
	<ItemTemplate>
		<asp:LinkButton id="LinkButton1" style="Z-INDEX: 102; LEFT: 350px; POSITION: absolute; TOP: 13px" runat="server"><%# estadoPeli(Convert.ToString(DataBinder.Eval(Container.DataItem, "peli_activo")))%></asp:LinkButton>
	</ItemTemplate>
</asp:TemplateColumn>
NOTA: Con "estadoPeli(Convert.ToString(DataBinder.Eval(Conta iner.DataItem, "peli_activo")))", se pasa el valor del campo "peli_activo". Y si es true se escribe Activo y si es false se escribe Desactivo.

La cosa es que al clicar ó pulsar en el LinkButton, se llame al método llamado
cambio_Estado(...)

Código:
protected void cambio_Estado(string estado, string el_codigo)
{
...
}
Su función es la de cambiar el valor del campo antes mencionado peli_activo (Si es true pasarlo a false y viceversa); para ello, es necesario el valor actual y el código de elemento afectado.

Entonces, después de toda esta explicación, cuando dices de "guardar la info en etiquetas", ¿quieres decir, por ejemplo, que al clicar en el LinkButton de una determinada fila se guarden los valores de peli_activo (para el parámetro de estado) y de peli_id (para el parámetro de código) en dos label no visibles ó input hiddens y al mismo tiempo el LinkButton llame al método cambio_Estado(...) (¿¿estando dentro de su propiedad CommandName ó OnCommand ó desde el Evento Clic??) y que sea el método el que recoja los valores recogidos en los labels ó input hiddens...?


2ª Forma
---------
Código:
otra forma sería pasarle en el CommandArgument el DataItem y recibirlo en tu función para accesar a toda la fila.
Será una tontería, ó una gran ignorancia por mi parte, pero ¿a qué te refieres diciendo el "DataItem"?, ¿te refieres a esto:?
<%# DataBinder.Eval(Container.DataItem, "peli_id")%>
ó
<%# DataBinder.Eval(Container.DataItem, "peli_activo")%>

¿Quieres decir poner los parámetros dentro de la propiedad "CommandArgument" del LinkButton?

¿Se puede poner más de un argumento en esta propiedad, igual separados por comas ó punto y coma?

¿Sería algo así? (igual es una burrada lo que sigue)

CommandArgument="<%# DataBinder.Eval(Container.DataItem, "peli_id")%>;<%# DataBinder.Eval(Container.DataItem, "peli_activo")%>"

La llamada al método ¿¿sería en el CommandName ó OnCommand ó desde el Evento Clic??

Y lo de
Código:
y recibirlo en tu función para accesar a toda la fila.
Tampoco lo entiendo del todo...
__________________
Saludos,

zacktagnan.
=================================================
  #4 (permalink)  
Antiguo 11/04/2007, 09:13
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Re: Parámetros en el Clic del LinkButton

Cita:
Como he comentado, la idea es poner el LinkButton dentro del Datagrid, dentro de un TemplateColumn, dentro de un ItemColumn, algo como esto (a no ser que esté mal planteado):

Código:

<asp:TemplateColumn HeaderText="Estado"> <ItemTemplate> <asp:LinkButton id="LinkButton1" style="Z-INDEX: 102; LEFT: 350px; POSITION: absolute; TOP: 13px" runat="server"><%# estadoPeli(Convert.ToString(DataBinder.Eval(Contai ner.DataItem, "peli_activo")))%></asp:LinkButton> </ItemTemplate> </asp:TemplateColumn>
eso mismo te puede quedar así:

Código:
    <asp:TemplateColumn HeaderText="Estado"> 
                <ItemTemplate> 
                    <asp:LinkButton id="LinkButton1" style="Z-INDEX: 102; LEFT: 350px; POSITION: absolute; TOP: 13px" runat="server" CommandName="MyLink"  CommandArgument='<%# MyFunction(Container.DataItem) %>' Text="Prueba" />
                </ItemTemplate> 
            </asp:TemplateColumn>
y MyFunction va a guardar en sus argumentos los campos que necesitas y puedes ocupar algun tipo de separador... ejemplo:

Código:
  protected string MyFunction(object obj) {
        DataRowView container = obj as DataRowView;

        return container.Row["peli_id"].ToString() + ";" + container.Row["peli_activo"].ToString();
    }
Y cuando se dé click en el llinkbutton puedes aprovechar el evento RowCommand del grid para cachar el objetos actual y los argumentos que en este caso es el link button quedando algo como ésto:

Código:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "MyLink") { 
            string[] arrFields = e.CommandArgument.ToString().Split(new char[] {';'});

        }
    }
donde arrFields contendrá todos los valores que hayas colocado en MyFunction que en este caso serían peli_id y peli_activo

Traté de ser lo más claro posible pero si de plano ésto no me lo entiendes te recomiendo que leas mas acerca del gridview antes de comenzar con todo ésto.

Salu2
  #5 (permalink)  
Antiguo 11/04/2007, 09:24
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Re: Parámetros en el Clic del LinkButton

por cierto....

Cita:
Cuando dices la info, ¿a qué te refieres...?
info = información
  #6 (permalink)  
Antiguo 11/04/2007, 11:43
 
Fecha de Ingreso: octubre-2005
Mensajes: 180
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Parámetros en el Clic del LinkButton

* Para un parámetro

Yo lo que hago en el datagrid es irme a propiedades y dar clic en Generador de Propiedades, posteriormente convierto la columna que voy a utilizar como hipervinculo en columna hipervinculo, ahi pongo en campo texto el nombre del campo que quiero que aparezca en el hipervinculo, del otro lado en donde dice campo de dirección url le pongo el campo que quiero que sea el enlace o el parametro que lleve el hipervinculo y en cadena de formato de direccion le pongo la dirección que quiero que lleve por ejemplo mipage.aspx?a={0}

* Para dos o más parametros

Hago lo anterior nada mas que ahora le presiono en la opción que dice convertir esta columna en columna plantilla y le doy aceptar.

psteriormente en la parte de diseño de la page me posiciono sobre el control datagrid y le doy click derecho le doy en la opción que dice Editar plantilla.--

te aparecerá un control mas pequeño en el cual hay un control que dice Hiperlink1 te posicionas sobre este y le das en sus propiedades para buscar la propiedad Databindigs en donde trae dos opciones Text que es lo que va aparecer en la columna del datagrid que convertiste en columna plantilla y la propiedad navigateurl que es en donde vas ah agregar los otros parametros(campos) para tu hiperlink.--

Un ejemplo del hiperlink en la propiedad navigateurl es el siguiente:

Código:
DataBinder.Eval(Container, "DataItem.miprimercampo", "mipage.aspx?a={0}") + DataBinder.Eval(Container, "DataItem.misegundocampo", "&b={0}") + DataBinder.Eval(Container, "DataItem.mitercercampo", "&c={0}") + "&s=" & sCadena
asi puedes meter tantos parámetros como quieras; cabe mencionar que los campos que vayas a poner como parametros en el hiperlink deben estar en el select de tu query.---

Si no quieres que aparezcan todos los campos en el datagrid a la hora de mostrar los datos ; en el load de la page pones lo siguiente

Código:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

With DataGrid1
            ' para que exista paginacion
            .AllowPaging = True
            ' para que las paginas aparezcan numeradas
            .PagerStyle.Mode = PagerMode.NumericPages
            '# de paginas por hoja
            .PagerStyle.PageButtonCount = 10
            'Cuantas filas va a tener el datagrid
            .PageSize = 20
            .CurrentPageIndex = 0
             'Para que no genere todos los campos que pusimos en el query
            .AutoGenerateColumns = False

        End With
End Sub
Espero y te sirva.---

Esto lo programe en vb.net 2003

Suerte

Bitss---Miguel--in---
  #7 (permalink)  
Antiguo 11/04/2007, 15:12
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Re: Parámetros en el Clic del LinkButton

Cita:
Iniciado por miguelillo2
ahi pongo en campo texto el nombre del campo que quiero que aparezca en el hipervinculo
esa opción podría ser válida si piensas pasar parámetros a otra página pero si haces eso en la misma causarías un redireccionamiento y perderías por obvias razones los valores que tienes en la página actual es por ello que necesitas un Linkbutton para causar un postback
  #8 (permalink)  
Antiguo 12/04/2007, 07:30
 
Fecha de Ingreso: octubre-2005
Mensajes: 180
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Parámetros en el Clic del LinkButton

Tienes razón Rootk...

Sorry; es que no habia leido todos los post´s..

Hasta la proxima.-----

Bitss---Miguel--in--
  #9 (permalink)  
Antiguo 13/04/2007, 04:03
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 1 mes
Puntos: 3
Re: Parámetros en el Clic del LinkButton

Bueno RootK

He querido probar eso que pusistes con lo de MyFunction y MyLink pero no puedo, por ejemplo, porque en mi DataGrid no hay un evento llamado RowCommand

¿No será que esta solución es para ASP.NET 2.0?

Este proyecto mío está en C# en la versión ASP.NET anterior creo que la 1.1

¿Será por eso que no puedo hacer lo que recomiendas? ¿Sabes si se puede adaptar tu solución a mi caso ó habría que hacer otra cosa?
__________________
Saludos,

zacktagnan.
=================================================
  #10 (permalink)  
Antiguo 16/04/2007, 14:08
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 1 mes
Puntos: 3
Re: Parámetros en el Clic del LinkButton

Entonces, ... ¿¿¿no hay otra contestación???
__________________
Saludos,

zacktagnan.
=================================================
  #11 (permalink)  
Antiguo 16/04/2007, 15:32
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Re: Parámetros en el Clic del LinkButton

Cita:
por ejemplo, porque en mi DataGrid no hay un evento llamado RowCommand
creo que por ahi hubiéramos empezado jejeje, para el DataGrid es ItemCommand

Salu2
  #12 (permalink)  
Antiguo 16/04/2007, 17:55
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 1 mes
Puntos: 3
Re: Parámetros en el Clic del LinkButton

Cita:
creo que por ahi hubiéramos empezado jejeje, para el DataGrid es ItemCommand
Bueno un despiste lo ¿¿tiene cualquieraaaa??

Una duda, quizás absurda, que me ha surgido.

Yo lo que quiero aplicar al hacer clic en el LinkButton, con los parámetros ya mencionados de peli_id y peli_activo, es cambiar el valor booleano de éste último (si es true, pasarlo a false y viceversa), con lo siguiente:
Código:
	bool el_estado = bool.Parse(estado);
	string valor_peli_activo = "";
	//CAMBIO DE ESTADO DEL PRODUCTO
	if(el_estado == true)
	{
		//EN LA TABLA EL CAMPO peli_activo ES DE TIPO bit
		valor_peli_activo = "0";
	}
	else
	{
		valor_peli_activo = "1";
	}

	string sql = "UPDATE PELICULAS SET peli_activo = " + valor_peli_activo + " WHERE peli_id = '" + el_codigo + "'";
	SqlCommand comandoActualizar = new SqlCommand(sql, conexion);

	try
	{
		comandoActualizar.Connection.Open();
		comandoActualizar.ExecuteNonQuery();//EJECUTANDO CONSULTA DE ACTUALIZACIÓN
		conexion.Close();
	}
	catch(SqlException laexActDesactProd)
	{
		Response.Write("Se ha producido un error al querer cambiar el ESTADO del producto y la operaci&oacyte;n se ha cancelado:<br />" + laexActDesactProd.Message);
	}
La pregunta es: ¿este código va dentro del evento ItemCommand del DataGrid ? (no dentro de MyFunction(Container.DataItem) ¿verdad?

Si es dentro del ItemCommand del DataGrid, y respetando el orden de recogida de los parámetros en el MyFunction (return container.Row["peli_id"].ToString() + ";" + container.Row["peli_activo"].ToString();) puesto en el ejemplo, para recoger los valores de los parámetros desde el Array generado, ¿sería así?:

Código:
...
        if (e.CommandName == "MyLink") { 
            string[] arrFields = e.CommandArgument.ToString().Split(new char[] {';'});
            string el_codigo = arrFields[0];
            bool el_estado = bool.Parse(arrFields[1]);
        }
__________________
Saludos,

zacktagnan.
=================================================
  #13 (permalink)  
Antiguo 17/04/2007, 15:01
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 1 mes
Puntos: 3
Re: Parámetros en el Clic del LinkButton

Bueno, pues ya lo he programado todo como indicaba. Y si. lo que comentaba en el mensaje anterior, el código requerido va dentro de las llaves del evento ItemCommand. Y los parámetros se recogen como, igualmente, he indicado como valores del array.

Finalmente, solo queda recargar el DataGrid, para que quede reflejada la actualización de datos en pantalla.

Gracias por la ayuda aportada.
__________________
Saludos,

zacktagnan.
=================================================
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:01.