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

ayuda urgente con datagrid, por favor.

Estas en el tema de ayuda urgente con datagrid, por favor. en el foro de .NET en Foros del Web. A er si alguien me puede decir donde está el fallo o como puedo implementarlo. Tengo un datagrid enlazado a un dataset, dentro del datagrid ...
  #1 (permalink)  
Antiguo 14/09/2004, 15:22
 
Fecha de Ingreso: marzo-2004
Mensajes: 5
Antigüedad: 20 años
Puntos: 0
Exclamación ayuda urgente con datagrid, por favor.

A er si alguien me puede decir donde está el fallo o como puedo implementarlo.

Tengo un datagrid enlazado a un dataset, dentro del datagrid he añadido una columna con un checkbox, lo que quiero es obtener los valores de los elementos seleccionados.

Todo funciona perfectamente con una sóla página, pero en cuando cambio de página, pierdo los valores seleccionados, he probado incluso con el datagrid sin postback :http://www.microsoft.com/spanish/msd...ces/art145.asp

pero sigue sin funcionarme, se me ha ocurrido utilizar el evento SelectedIndexChanged y almacenar que elementos de han seleccionado, para luego mostrarlos marcados cuando se vuelva a mostrar esa página, pero no acabo de implementarlo bien.

A ver si alguien me ayuda, gracias.
  #2 (permalink)  
Antiguo 15/09/2004, 06:23
 
Fecha de Ingreso: junio-2001
Ubicación: Cordoba, Argentina
Mensajes: 190
Antigüedad: 22 años, 10 meses
Puntos: 0
se puede usar un hashtable o un arraylist con los valores y meterlo en el viewstate(), el hashtable tiene valores unicos , deberias tener una clave unica y es serializable y puede ir en el viewstate.
__________________
Martin

Última edición por MartinAcevedo; 15/09/2004 a las 06:30
  #3 (permalink)  
Antiguo 15/09/2004, 06:24
 
Fecha de Ingreso: junio-2001
Ubicación: Cordoba, Argentina
Mensajes: 190
Antigüedad: 22 años, 10 meses
Puntos: 0
Un ejemplito que hice .... espero sirva saludos...
------ ASPX
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="Test.aspx.vb" Inherits="BillingVoipLab.Test" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>Test</title>
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body ms_positioning="GridLayout" >
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 160px; POSITION: absolute; TOP: 80px"
runat="server" AllowPaging="True" DataKeyField="IntegerValue">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox id="chk" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
</form>
</body>
</HTML>

--- CODE BEHIND

Public Class Test
Inherits System.Web.UI.Page

#Region " Código generado por el Diseñador de Web Forms "

'El Diseñador de Web Forms requiere esta llamada.
''' <summary>
''' Summary of InitializeComponent.
''' </summary>
'''
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub
Protected WithEvents Button2 As System.Web.UI.WebControls.Button
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid







'NOTA: el Diseñador de Web Forms necesita la siguiente declaración del marcador de posición.
'No se debe eliminar o mover.
Private designerPlaceholderDeclaration As System.Object

''' <summary>
''' Summary of Page_Init.
''' </summary>
''' <param name=sender></param>
''' <param name=e></param>
'''
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: el Diseñador de Web Forms requiere esta llamada de método
'No la modifique con el editor de código.
InitializeComponent()
End Sub

#End Region


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
'se crea un hash table para guardar los seleccionados
viewstate("hshSeleccionados") = New Hashtable
BindGrid()
End If

End Sub
Private Sub BindGrid()
Me.DataGrid1.DataSource = CreateDataSource()
Me.DataGrid1.DataBind()
End Sub



Private Sub DataGrid1_PageIndexChanged1(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEvent Args) Handles DataGrid1.PageIndexChanged
DataGrid1.CurrentPageIndex = e.NewPageIndex
GuardarSeleccionados()
Me.BindGrid()
End Sub
Private Sub GuardarSeleccionados()
'guarda los checkbox seleccionados en el hastable(solo usa el id en la clave)
'si no esta seleccionado lo saca del hashtable
'el id es el campo IntegerValue
Dim chk As CheckBox
For Each itm As DataGridItem In DataGrid1.Items
chk = itm.FindControl("chk")
If chk.Checked Then
If Not CType(viewstate("hshSeleccionados"), Hashtable).Contains(DataGrid1.DataKeys(itm.ItemInd ex)) Then
CType(viewstate("hshSeleccionados"), Hashtable).Add(DataGrid1.DataKeys(itm.ItemIndex), "")
End If
Else
If CType(viewstate("hshSeleccionados"), Hashtable).Contains(DataGrid1.DataKeys(itm.ItemInd ex)) Then
CType(viewstate("hshSeleccionados"), Hashtable).Remove(DataGrid1.DataKeys(itm.ItemIndex ))
End If
End If
Next
End Sub


Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
If e.Item.ItemIndex <> -1 Then
'Se fija si esta en el hashtable y lo checkea si es asi
Dim chk As CheckBox
chk = e.Item.FindControl("chk")
If CType(viewstate("hshSeleccionados"), Hashtable).Contains(DataGrid1.DataKeys(e.Item.Item Index)) Then
chk.Checked = True
End If
End If
End Sub

Function CreateDataSource() As ICollection
'origen de datos de prueba
Dim dt As New DataTable
Dim dr As DataRow

dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("CurrencyValue", GetType(Double)))

Dim i As Integer
For i = 0 To 50
dr = dt.NewRow()

dr(0) = i
dr(1) = "Item " + i.ToString()
dr(2) = 1.23 * (i + 1)

dt.Rows.Add(dr)
Next i

Dim dv As New DataView(dt)
Return dv

End Function 'CreateDataSource
End Class
__________________
Martin
  #4 (permalink)  
Antiguo 15/09/2004, 07:00
 
Fecha de Ingreso: marzo-2004
Mensajes: 5
Antigüedad: 20 años
Puntos: 0
Gracias.

Gracias por tu respuesta, esta tarde lo pruebo.

Edito: el ejemplo funciona a la perfección, sí señor.

Última edición por mmata; 15/09/2004 a las 13:41 Razón: Añadido...
  #5 (permalink)  
Antiguo 25/10/2005, 13:19
 
Fecha de Ingreso: octubre-2005
Ubicación: Villahermosa, Tabasco, México
Mensajes: 1
Antigüedad: 18 años, 6 meses
Puntos: 0
Error en código

Mi estimado, tuve el atrevimiento de emplear tu código para probarlo y me envia un error en el LOOP del procedimieto GuardarSeleccionados(), aspi como en el If de conversión del procedimiento DataGrid1_ItemDataBound.
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 10:29.