Quantcast
Channel: AjaxControlToolkit Work Item Rss Feed
Viewing all articles
Browse latest Browse all 4356

Created Issue: Necesito a un EXPERTO con esto [SlideShowExtender + Repeater + PagedDataSource + WebSerivce] [27349]

$
0
0
Os pongo en situacón:

Tengo un control personalizado que contiene un control de ajax SlideShowExtender.

La página html que contiene a mi control personalizado tiene un repeater para replicar tantas veces este control personalizado como registros vengan de la base de datos.

Hasta ahi todo perfecto, me funciona perfectamente.

He querido anticiparme a que en un futuro pueda tener muchos registros de base de datos que puedan hacer relentizar la carga de la página por lo que habia pensado en usar el PagedDataSource, para así ir mostrando en la página de resultados, cierta cantidades de elementos por página.

Aquí empieza el problema...

En la primera carga de la página con el paginador PagedDataSource lo hace bien. El problema es cuando pagino ya que el elemento slideshowextender pierde el identificador del cliente que quiero cargar las imagenes, por lo que no las carga... A partir de ahí tanto si pagino para adelante como hacia atrás no se carga correctamente el contextKey en el evento Load de SlideShowExtender_Load


Sinceramente no se si se puede tratar de algún tipo de imcompatibilidad con los elementos que estoy utilizando porque si no uso el PAGEDDATASOURCE me va todo perfecto (sin paginar por supuesto...)

Adjunto código para mayor información. Agradezco de antemano todas las aportaciones de los expertos.

EN EL WEBSERVICE
<WebMethod()> _
Public Function GetPictures(ByVal contextKey As String) As AjaxControlToolkit.Slide()
'Recuperamos el identificador de la Cliente.
'Try
If contextKey.Trim <> String.Empty AndAlso contextKey.Trim <> "0" Then
Dim entities As New MIModel.MISEntities
Dim idCliente As Integer = CInt(contextKey)

'Miramos el estado de la cuenta del cliente para ver si cojemos las fotos publicadas o las originales.
Dim estado As Decimal = (From cli In entities.CLIENTE _
Where cli.CLIENTE1 = idCliente
Select cli.ESTADOCUENTA).First

Dim di As IO.DirectoryInfo
If estado = 4 Then
di = New IO.DirectoryInfo(Server.MapPath("../Clientes/" & idCliente & "/Publicado"))
Else
di = New IO.DirectoryInfo(Server.MapPath("../Clientes/" & idCliente & "/Original"))
End If
Dim so As New IO.SearchOption
Dim cantFotosCoincidentes As Integer
Dim listaImagenesACargar As New List(Of String)

Dim imagenesBD = From foto In entities.FOTO _
Order By foto.FOTO1 Ascending _
Where foto.CLIENTE = idCliente
For Each imagenBD In imagenesBD
Dim imagenFisica As New System.IO.FileInfo(di.FullName & "/" & imagenBD.FOTO1 & ".jpg")
If imagenFisica.Exists Then
cantFotosCoincidentes += 1
listaImagenesACargar.Add(imagenFisica.Name)
End If
Next

Dim listaImagenes As New List(Of String)
Dim slidePictures As AjaxControlToolkit.Slide() = New AjaxControlToolkit.Slide(cantFotosCoincidentes - 1) {}
Dim slidePicture As AjaxControlToolkit.Slide

'Recuperamos el nombre del cliente.
Dim cliente = (From c In entities.CLIENTE _
Where c.CLIENTE1 = CDec(contextKey) _
Select c.NOMBRE).First

For i As Integer = 0 To listaImagenesACargar.Count - 1
slidePicture = New AjaxControlToolkit.Slide
slidePicture.Name = "Pincha aquí para ver el detalle de " & cliente
If estado = 4 Then
slidePicture.ImagePath = "../Clientes/" & idCliente & "/Publicado/" & listaImagenesACargar(i)
Else
slidePicture.ImagePath = "../Clientes/" & idCliente & "/Original/" & listaImagenesACargar(i)
End If
slidePictures(i) = slidePicture
Next
Return slidePictures
Else
Return Nothing
End If
'Catch ex As Exception
'Return Nothing
'End Try
End Function

CODE BEHIND EN PAGINA HTML QUE TIENE EL REPEATER

Private Sub CargaResultadosBusqueda()
Dim id As Decimal
Dim tSeleccion As tipoSeleccion
Dim sexo As Decimal
Dim dr As DataRow
Dim dt As New DataTable("DtResultadoBusqueda")
Dim dc1 As New DataColumn("IdCliente", GetType(Decimal))
Dim dc2 As New DataColumn("Nombre", GetType(String))
Dim dc3 As New DataColumn("Descripcion1", GetType(String))
Dim dc4 As New DataColumn("Descripcion2", GetType(String))
Dim dc5 As New DataColumn("HayVideo", GetType(String))
Dim dc6 As New DataColumn("Localidad", GetType(String))
Dim dc7 As New DataColumn("Previsualizar", GetType(String))
Dim dtListadoClientesBusqueda As New DataTable("ListadoClientes")
Dim dcIdCliente As New DataColumn("IdCliente", GetType(Decimal))
Dim dcPos As New DataColumn("posListaClientesBusqueda", GetType(Decimal))
Dim drListadoClientesBusqueda As DataRow
Dim medidas As String

If ClaveValor("provincia_comunidad") = "p" Then
'Provincia
tSeleccion = tipoSeleccion.provincia
Else
'CA
tSeleccion = tipoSeleccion.comunidad
End If
id = CDec(Me.ClaveValor("id"))
dt.Columns.Add(dc1)
dt.Columns.Add(dc2)
dt.Columns.Add(dc3)
dt.Columns.Add(dc4)
dt.Columns.Add(dc5)
dt.Columns.Add(dc6)
dt.Columns.Add(dc7)
dtListadoClientesBusqueda.Columns.Add(dcIdCliente)
dtListadoClientesBusqueda.Columns.Add(dcPos)
If IsNothing(Session("sexo")) Then
Session("sexo") = CDec(System.Configuration.ConfigurationManager.AppSettings.GetValues("sexo").First)
End If
sexo = Session("sexo")

Dim clientes As Generic.List(Of MIModel.SP_RECUPERA_CLIENTES_AGENCIA)

clientes = entities.SP_RECUPERA_CLIENTES_PROVINCIA(id, sexo, 1).ToList
Dim cant As Integer = clientes.Count / 3
Dim resto As Decimal = clientes.Count Mod 3

If resto > 0 Then
cant += 1
End If

Dim i As Integer = 0
For Each cliente In clientes
dr = dt.NewRow
dt.Rows.Add(dr)
dr.Item("IdCliente") = cliente.CLIENTE
dr.Item("Nombre") = cliente.NOMBRE
dr.Item("Descripcion1") = medidas
dr.Item("Descripcion2") = cliente.DESCRIPCIONCORTA
dr.Item("HayVideo") = cliente.TIENEVIDEO
dr.Item("Localidad") = cliente.NOMBREPROVINCIA
dr.Item("Previsualizar") = "N"
drListadoClientesBusqueda = dtListadoClientesBusqueda.NewRow
dtListadoClientesBusqueda.Rows.Add(drListadoClientesBusqueda)
drListadoClientesBusqueda.Item("IdCliente") = cliente.CLIENTE
drListadoClientesBusqueda.Item("posListaClientesBusqueda") = i
i += 1
Next
'Paginación...
Dim pgitems As New PagedDataSource()

pgitems.DataSource = dt.DefaultView
pgitems.AllowPaging = True
pgitems.PageSize = 6
pgitems.CurrentPageIndex = NumeroPagina (se recoge de una property con VIEWSTATE)
If pgitems.PageCount > 1 Then
paginador.Visible = True
Else
paginador.Visible = False
End If
lblCurrentPage.Text = "Página: " + (NumeroPagina + 1).ToString() + " de " + pgitems.PageCount.ToString()
'Habitiamos o deshabilitamos los botones de avanzar o retroceder.
cmdPrev.Enabled = Not pgitems.IsFirstPage
cmdNext.Enabled = Not pgitems.IsLastPage
'Guardamos el listado completo de la búsqueda para cuando estén dentro del cliente y quieran ver el siguiente sin tener que volver a atrás.
Session("ListadoClientesBusqueda") = dtListadoClientesBusqueda
repResultadosClienteBusqueda.DataSource = pgitems
repResultadosClienteBusqueda.DataBind()
'Fin paginación...
End Sub

Protected Sub cmdNext_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdNext.Click
ViewState("PageNumber") = ViewState("PageNumber") + 1
CargaResultadosBusqueda()
End Sub

Protected Sub cmdPrev_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdPrev.Click
ViewState("PageNumber") = ViewState("PageNumber") - 1
CargaResultadosBusqueda()
End Sub

CODE BEHIND EN CONTROL PERSONALIZADO ASCX QUE ESTA DENTRO DEL REPEATER

Protected Sub SlideShowExtender_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles previewSlideShowExtender.Load
previewSlideShowExtender.ContextKey = A_IdCliente (se recoge de otra property con viewstate)
imgClienteBusqueda.Attributes("onmouseover") = "ArrancaSlideShowExtender('" & Me.btnSiguiente.ClientID & "','" & Me.btnPlayButton.ClientID & "');"
imgClienteBusqueda.Attributes("onmouseout") = "ParaSlideShowExtender('" & Me.btnPlayButton.ClientID & "');"
End Sub

ASPX DE LA PAGINA HTML
<asp:Repeater id="repResultadosClienteBusqueda" runat="server" >
<itemtemplate>
<ctr:ClienteBusqueda runat ="server" id="Cliente"
A_IdCliente='<%# DataBinder.Eval(Container.DataItem, "IdCliente").ToString %>'
A_Descripcion1 ='<%# DataBinder.Eval(Container.DataItem, "Descripcion1").ToString %>'
A_Localidad ='<%# DataBinder.Eval(Container.DataItem, "Localidad").ToString %>'
A_Descripcion2='<%# DataBinder.Eval(Container.DataItem, "Descripcion2").ToString %>'
A_Nombre ='<%# DataBinder.Eval(Container.DataItem, "Nombre").ToString %>'
A_HayVideo='<%# DataBinder.Eval(Container.DataItem, "HayVideo").ToString %>'
A_

Viewing all articles
Browse latest Browse all 4356

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>