Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/04/2004, 17:45
MartinAcevedo
 
Fecha de Ingreso: junio-2001
Ubicación: Cordoba, Argentina
Mensajes: 190
Antigüedad: 22 años, 11 meses
Puntos: 0
Hola, el problema que tenes es que al agregar un control a una plantilla de un control basado en plantillas(como el datalist), el control dentro de la plantilla no existe, ya que estas creando una plantilla y no un control.
Al crear una plantilla le indicas al datalist que para cada fila cree dinamicamente una datagrid. El control(es) datagrid se generan dinamicamente y es agregado como un control dentro de la coleccion controls de datalistitem.

Lo de agregar a mano el control, no sirve, porque como dije antes el control no existe, lo que en realidad estas haciendo es crear un control en el code behind sin un tag en aspx.

Para acceder al control, debes usar el evento itemdatabound, lo unico que tenes que hacer es buscarlo en la coleccion en itemactual
ej:
Código PHP:
  Private Sub DataList1_ItemDataBound(ByVal sender As ObjectByVal e As System.Web.UI.WebControls.DataListItemEventArgsHandles DataList1.ItemDataBound


        
If e.Item.ItemIndex <> -1 Then
            Dim dg 
As DataGrid
            dg 
CType(e.Item.FindControl("MyDataGrid"), DataGrid)
            If 
Not dg Is Nothing Then
                
'codigo parar el datagrid encontrado'

            
End If
        
End If
    
End Sub 
Otro tema son los eventos. Debido a que hay varios controles generados dinamicamente(varios datagrid) estos no tienen asociado los eventos con handlers(como seria un control tirado desde la barra de herramientas).
Al disparar cualquier evento de algun datagrid (Ej:pageindexchanged), se ejecuta el evento itemcommand del datalist ya que es el contenedor.
Una solucion para esto es asociar los eventos del datagrid cuando este es creado, asociarlo dinamicamente(ya que el control es creado dinamicamente), para eso tenes que escribir un protipo de funcion delegado para el evento que queres implementar fuera del itemcommand del datalist y asociar dinamicamente ese datagrid con la funcion manejadora del evento(en el ejemplo se maneja fuera del datalist el evento pageindexchanged de los datagrid).
Ej:
Código PHP:
'AQUI SE ASOCIA EL EVENTO AL DATAGRID PARA CADA DATAGRID CREADO'
Private Sub DataList1_ItemCreated(ByVal sender As ObjectByVal e As System.Web.UI.WebControls.DataListItemEventArgsHandles DataList1.ItemCreated
        
If e.Item.ItemIndex <> -1 Then
            Dim dg 
As DataGrid
            dg 
CType(e.Item.FindControl("MyDataGrid"), DataGrid)
            If 
Not dg Is Nothing Then
                
'AGREGAR EVENTO DINAMICAMENTE PARA LOS DATAGRID'
                
AddHandler dg.PageIndexChangedAddressOf UnDataGrid_PageIndexChanged
            End 
If
        
End If
    
End Sub
'FUNCION QUE CAPTURA EL EVENTO , BASADO EN EL PROTOTIPO DELEGADO '
    
Private Sub UnDataGrid_PageIndexChanged(ByVal source As ObjectByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs)
        
'HANDLER PARA TODOS LOS DATAGRID DENTRO DEL DATALIST'

    
End Sub 
Bueno, eso es todo, espero que te sirva.....
__________________
Martin