Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   .NET (http://www.forosdelweb.com/f29/)
-   -   confirm() JS en datalist (http://www.forosdelweb.com/f29/confirm-js-datalist-185855/)

keither 01/03/2004 12:04

confirm() JS en datalist
 
Hola!,

Necesito mostrar una ventana de confirmación cuando el usuario haga clic en el boton que lanza el DeleteCommand de un DAtaList. Para ello, en el EditCommand intendo hacer lo siguiente:

botonBorrar=(LinkButton)e.Item.FindControl("miBoto nBorrar");

y luego:

botonBorrar.Attributes.Add("onclick","return confirm('Está seguro?');");

Pero me dice que botonBorrar no esta definido como uns instancia de objeto:

System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto

En el datalist está definido así:

<asp:linkbutton class=botoForm id=miBotonBorrar Runat="server" Text="Eliminar" CommandName="delete"></asp:LinkButton>

Alguna idea? Gracias.

RootK 01/03/2004 15:38

Hola.. lo que pasa es que dentro de tu datalist tienes varios items y tienes que asociarle a c/u de ello su evento..

Ejemplo.

Cita:

For i = 0 To myList.Items.Count - 1
CType(myList.Items(i).FindControl("miBotonBorrar") , LinkButton).Attributes.Add("onClick", "return confirm('Está seguro?');")
Next
Saludos :-D

keither 02/03/2004 03:28

Esto en C# no seria:

for(int i=0;i<DLSeccionsDades.Items.Count;i++){
((LinkButton)DLSeccionsDades.Items[i].FindControl("miBotonBorrar")).Attributes.Add("onC lick","return confirm('Está seguro ?');");
}

Porque lo pongo en la funcion que lanza el EditItemCommand y me sale el mismo error:

System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.

Que más puedo estar haciendo mal? Agradeceria una respuesta.

RootK 02/03/2004 09:17

Cita:

Porque lo pongo en la funcion que lanza el EditItemCommand
Ese código no lo pongas en editcommand....ponlo cuando estes llenando tu datalist :arriba: para que posteriormente le asignes el evento "onClick" a cada uno de los items. ;-)

ejemplo.

Cita:

void BindDataList()
{
DataList1.DataSource = DS;
DataList1.DataBind();
..
...
for(int i=0;i<DLSeccionsDades.Items.Count;i++)
{
((LinkButton)DLSeccionsDades.Items[i].FindControl("miBotonBorrar")).Attributes.Add("onC lick","return confirm('Está seguro ?');");
}

}
Saludos :cool:

keither 02/03/2004 09:50

Nada, sigue el mismo error. Rootk he puesto el código cuando lleno el DataList, justo después del databind() tal y como me ponias en tu mensaje. Me estoy comenzando a desesperar... Se os ocurre algo más que pueda estar fallando?

Gracias.

RootK 02/03/2004 10:16

Me parece extraño porque yo ya hice algunas pruebas y me funciona sin problemas... creo que sería mas facil que pongas el código que tienes en tu datalist porque al parecer por el tipo de errro que te marca estas haciendo referencia a un objeto que en ese momento no existe y eso me llama la atencion. :pensando:

keither 02/03/2004 10:52

Aqui esta el código del datalist:

<asp:datalist id="DLSeccionsDades" runat="server" OnItemCommand="DLSeccionsDades_ItemCommand" OnEditCommand="DLSeccionsDades_EditCommand" DataKeyField="ISECCIO" OnUpdateCommand="DLSeccionsDades_UpdateCommand" OnDeleteCommand="DLSeccionsDades_DeleteCommand">
...

<EditItemTemplate>
...
<asp:linkbutton class="botoForm" id="esborrarDadaSeccio" Runat="server" Text="Eliminar Dada" CommandName="delete"></asp:linkbutton>
<asp:linkbutton class="botoForm" id="Linkbutton7" Runat="server" Text="Desar Canvis" CommandName="update"></asp:linkbutton>
...
</EditItemTemplate>
...
</asp:datalist>

El codebehind:

private void Page_Load(object sender, System.EventArgs e)
{
// Introducir aquí el código de usuario para inicializar la página
if(!IsPostBack)
{
carregaDadesSeccio();
}

void carregaDadesSeccio()
{
SqlCommand sqldades = new SqlCommand("SELECT * FROM SECCIOINFO WHERE SECCIO="+Request.QueryString["id"]+" ORDER BY POSICIO",sqlConnection1);
if(sqlConnection1.State.ToString()=="Closed")
{
sqlConnection1.Open();
}
SqlDataReader dadesReader=sqldades.ExecuteReader();
DLSeccionsDades.DataSource=dadesReader;
DLSeccionsDades.DataBind();

//apliquem el confirm al boto d'esborrar
for(int i=0;i<DLSeccionsDades.Items.Count;i++)
{
((LinkButton)DLSeccionsDades.Items[i].FindControl("esborrarDadaSeccio")).Attributes.Add ("onClick","return confirm('Está seguro ?');");
}

sqlConnection1.Close();
}

De verdad que no entiendo lo que falla. Ayuda!!!!!! :neurotico

RootK 02/03/2004 11:16

Ahh...ok... ya vi elproblema... lo que pasa es que estabas cargando los atributos a un control que aparece cuando es tiempo de edición... y por eso no encontraba la referencia.

Intenta con esto:

En tu evento EditCommand, despues de que llenes tu datalist haz lo siguiente:

Cita:

private void myList_EditCommand(Object sender, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
..
..
myList.EditItemIndex = e.Item.ItemIndex;
myList.DataSource = dadesReader;
myList.DataBind();

((LinkButton)DLSeccionsDades.Items[e.Item.ItemIndex ].FindControl("esborrarDadaSeccio")).Attributes.Add ("onClick","return confirm('Está seguro ?');");
..
...
Con ello le estarás asignando ese atributo al actual item.

Ahora si te debe funcionar... :arriba: te lo digo porque lo hice tanto con vb.net como c#

keither 02/03/2004 11:34

Muchas gracias Rootk! ahora si que funciona! :arriba:

:adios:

RootK 02/03/2004 13:12

De nada friend...,me da gusto que ahora si te haya servido el ejemplo . . . :-D


La zona horaria es GMT -6. Ahora son las 00:40.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.