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

checkbox en datagrid

Estas en el tema de checkbox en datagrid en el foro de .NET en Foros del Web. Holas! Este es mi primer mensaje en el foro, y me imagino k me tendreis muxo x aki yak estoy haciendo un proyecto y kada ...
  #1 (permalink)  
Antiguo 05/05/2005, 03:46
 
Fecha de Ingreso: mayo-2005
Mensajes: 30
Antigüedad: 19 años
Puntos: 0
checkbox en datagrid

Holas!

Este es mi primer mensaje en el foro, y me imagino k me tendreis muxo x aki yak estoy haciendo un proyecto y kada dos por tres me kedo enkallado ya que solo llevo 3 meses trabajando con asp.net

Bueno mi duda de hoy es que necesito tener una columna de checkboxes en un datagrid y debajo del datagrid tengo un boton que hara una acción determinada. lo que necesito es que de todos los checkboxes solo se pueda seleccionar uno cada vez, si tengo uno seleccionado y selecciono otro, solo se seleccione el ultimo. Al pulsar el botón necesito tener el datakeyfield de la fila del datagrid seleccionada mediante el checkbox.

que atributos tengo que modificar del checkbox?

Código:
<ItemTemplate>
<asp:CheckBox id="CheckBox1" runat="server" Enabled=""></asp:CheckBox>
</ItemTemplate>
Muchas gracias y saludos a todos!
  #2 (permalink)  
Antiguo 05/05/2005, 08:45
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
Hola y bienvenido alukard82bcn

En este caso vas a tener que jugar un poco con javascript.

Ejemplo:

Supongamos que tienes un datagrid llamado DataGrid1 con tu checkbox.. quedando de ésta forma:

Cita:
<asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox Runat="server" ID="CheckBox1" Text="Prueba" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>
Si pruebas en tu browser te darás cuenta que el datagrid es una simple tabla que los id´s cambian dependiendo del contenido..

En este caso cuando se envia al cliente la info se convierte el grid en algo como ésto:

Cita:
<table cellspacing="0" rules="all" border="1" id="DataGrid1" style="border-collapse:collapse;">
<tr>
<td>&nbsp;</td>
</tr><tr>
<td>
<input id="DataGrid1__ctl1_CheckBox1" type="checkbox" name="DataGrid1:_ctl1:CheckBox1" onclick="unCheck(this)" /><label for="DataGrid1__ctl1_CheckBox1">Prueba</label>
</td>

etc...
entonces ésta es la info que vamos a necesitar para que solo permita seleccionar un checkbox.

Y nuestro javascript quedaría así:

Cita:
function unCheck(obj)
{
var checkBoxID = "CheckBox1";
var tbl = document.getElementById('DataGrid1');
//buscamos los elementos que están dentro de la tabla por tagName
var chk = tbl.getElementsByTagName("input");

var sID;
//recorro mis elementos buscando que tengan el ID CheckBox1 (por si llego a tener otros controls de tipo <input> y si lo encuentro le quito la seleccion
for (i=0;i < chk.length;i++){
sID = chk[i].id;
if (sID.indexOf(checkBoxID) > 0)
chk[i].checked = false;
}

//finalmente dejo en check el elemento seleccionado
obj.checked = true;
}
Por último hay que asociar el code javascript a el control checkbox.. eso lo podemos hacer con el evento ItemDataBound y quedaría de ésta forma:

Cita:
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

If e.Item.ItemType = ListItemType.AlternatingItem Or _
e.Item.ItemType = ListItemType.Item Then
Dim chkBox As CheckBox = CType(e.Item.FindControl("CheckBox1"), CheckBox)
'Le asocio el evento onlick y le paso como parametro el objeto actual
chkBox.Attributes.Add("onclick", "unCheck(this)")
End If

End Sub
Y listo, ya cada vez que seleccione un elemento no podré seleccionar otro mas..

Traté de ser lo más claro posible.

Espero que te sirva, cualquier cosa por aqui andaremos.

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

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 05/05/2005, 08:50
 
Fecha de Ingreso: mayo-2005
Mensajes: 30
Antigüedad: 19 años
Puntos: 0
ostras! muchas gracias! en serio como te lo has currado no? llevo un par de dias blokeado kon esto y no konsigo k me salga, pensaba k sería algo mas sencillo de hacer. Ahora mismo me pongo a probar tu codigo a ver si me funciona, aun que seguro que haré algo mal.

Muchas gracias de nuevo!!!!
  #4 (permalink)  
Antiguo 05/05/2005, 09:01
 
Fecha de Ingreso: mayo-2005
Mensajes: 30
Antigüedad: 19 años
Puntos: 0
uooooooooooooooooo sik me ha funcionao, aunk la verdad esk no lo entiendo demasiado xk el kodigo se sale un poko de lo k vengo tokando yo.

rootk tengo otra preguntilla relacionada con esto, todos los checkbox ahora tendran el mismo id?? komo los puedo identificar ahora? es que ahora necesito que al pulsar un boton hacer unos cambios a la fila del datagrid seleccionado y ahora mismo no sabria como identificar el checkbox k esta seleccionado.

Una preguntilla solo por kuriosidad, cuanto has tardado en hacer el ejemplo que te has currado?
  #5 (permalink)  
Antiguo 05/05/2005, 09:34
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
Cita:
es que ahora necesito que al pulsar un boton hacer unos cambios a la fila del datagrid seleccionado y ahora mismo no sabria como identificar el checkbox k esta seleccionado.
Quieres identificar el checkbox seleccionado del lado del cliente o del lado del server..??

Cita:
Una preguntilla solo por kuriosidad, cuanto has tardado en hacer el ejemplo que te has currado?
MM... pues me tardé como unos 3 minutos... creo que me tardé mas en explicarlo que en hacerlo... jeje
  #6 (permalink)  
Antiguo 05/05/2005, 12:37
 
Fecha de Ingreso: mayo-2005
Mensajes: 30
Antigüedad: 19 años
Puntos: 0
puessss no se supongo que en el lado del servidor, por que depende de cual estuviera seleccionado, llamare a una funcion con ese datakeyfield para saber en que fila tengo que hacer unas modificaciones.

3 minutos???? joer pues vaya machine, a ver kuando llego yo a tu nivel, creo que dentro de poko entraré en un sitio de programador de .net a ver si asi mejoro algo.
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 16:21.