Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/05/2007, 09:44
Avatar de zacktagnan
zacktagnan
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 11 meses
Puntos: 3
Re: Repeater a varias columnas

Hola sabinajoa:

No, todavía no he encontrado la solución. Sigo esperando a que alguien me indique las pistas necesarias para conseguir el resultado deseado.

¿Tu también estás trabajando en C#?

Bueno, yo en funcionamiento, en un ejemplo de aplicación he visto que se puede conseguir. Se trata de la aplicación MSDN Video.
(http://www.desarrollaconmsdn.com/msdn/MSDNVideo.aspx)

Desde el enlace [Frontal web], se ve como se ejecuta una lista con la información de dos películas por cada fila.

Yendo a la Guía de Implementación >> Consulta online >> Frontal web >> Control lista de películas
ó
http://www.desarrollaconmsdn.com/msd...aPeliculas.htm
se llega a una pequeña explicación de como construir un DataSet para que almacene dos registros por cada fila.

Me baje el proyecto pero está hecho en VisualBasic.
Abrí el archivo (uno llamado ListaPeliculas.ascx dentro de la carpeta Cliente Web) para ver si podía pasarlo a código .CS pero no llego a transformarlo sin que me dé error. Hay cosas que no sé a qué se refieren.

Este es parte del código del archivo en el parte de código[ListaPeliculas.ascx.vb]
(en negrita, la parte relacionada con lo comentado)
Código:
Imports System
Imports System.Data

Imports ClienteWeb.ServicioCatalogo

Partial Class ListaPeliculas
    Inherits System.Web.UI.UserControl

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub
    Protected WithEvents DataList1 As System.Web.UI.WebControls.DataList
    Protected WithEvents Literal1 As System.Web.UI.WebControls.Literal
    Protected WithEvents Repeater2 As System.Web.UI.WebControls.Repeater

    'NOTE: The following placeholder declaration is required by the Web Form Designer.
    'Do not delete or move it.
    Private designerPlaceholderDeclaration As System.Object

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private _peliculas As PeliculasDS
    Private _comenzarEn As Integer

    ...
    ...
    ...

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub

    Public Property Peliculas() As PeliculasDS
        Get
            Return _peliculas
        End Get
        Set(ByVal Value As PeliculasDS)
            _peliculas = Value
        End Set
    End Property

    Public Property Lista() As String()
        Get
            Return Nothing
        End Get
        Set(ByVal Value As String())

        End Set
    End Property

    Public Property ComenzarEn() As Integer
        Get
            Return _comenzarEn
        End Get
        Set(ByVal Value As Integer)
            _comenzarEn = Value
        End Set
    End Property

    Private Property PrimerOrdinal() As Integer
        Get
            If ViewState(Me.ID + "_PrimerOrdinal") Is Nothing Then
                ViewState(Me.ID + "_PrimerOrdinal") = 1
            End If
            Return CInt(ViewState(Me.ID + "_PrimerOrdinal"))
        End Get
        Set(ByVal Value As Integer)
            ViewState(Me.ID + "_PrimerOrdinal") = Value
        End Set
    End Property

    Public Property Paginacion() As Boolean
        Get
            Return PanelPagina.Visible
        End Get
        Set(ByVal Value As Boolean)
            PanelPagina.Visible = Value
        End Set
    End Property

    ...
    ...
    ...

    Private Sub Page_DataBinding(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.DataBinding
        Dim dsPeliculas As New DataSet
        Dim i As Integer
        Dim dt As DataTable
        Dim dc As DataColumn

        ' Hay registros?
        If Not IsPostBack And _peliculas.Peliculas.Count = 0 Then
            SinRegistros.Visible = True
            PanelPagina.Visible = False
            Return
        End If

        ' Caben en una página?
        If Not IsPostBack And _peliculas.Peliculas.Count < Integer.Parse(NumRegistros.SelectedValue) Then
            PanelPagina.Visible = False
            PanelLinea.Visible = True
        End If

        ' Es ésta la última página?
        If Paginacion And Integer.Parse(NumRegistros.SelectedValue) = _peliculas.Peliculas.Count Then
            ' Almaceno último registro
            ViewState(Me.ID + "_UltimoCodBarras") = _peliculas.Peliculas(_peliculas.Peliculas.Count - 1).CodBarras
            ViewState(Me.ID + "_UltimoTitulo") = _peliculas.Peliculas(_peliculas.Peliculas.Count - 1).Titulo
            derecha.Visible = True
        Else
            derecha.Visible = False
        End If
        ViewState(Me.ID + "_NumRegistros") = _peliculas.Peliculas.Count

        '
        ' Gestión del primer registro para poder volver hacia atrás
        '
        ' Es la primera página?
        If Not IsPostBack Then
            ViewState(Me.ID + "_PeliculaPrimeraPagina") = _peliculas.Peliculas(0).CodBarras
            izquierda.Visible = False
        Else
            ' Quedan páginas a la izquierda?
            If _peliculas.Peliculas.Count > 0 AndAlso _peliculas.Peliculas(0).CodBarras = CStr(ViewState(Me.ID + "_PeliculaPrimeraPagina")) Then
                izquierda.Visible = False
                derecha.Visible = True
                PrimerOrdinal = 1
            Else
                izquierda.Visible = True
            End If
        End If
        If _peliculas.Peliculas.Count > 0 Then
            Viewstate(Me.ID + "_PrimerCodBarras") = _peliculas.Peliculas(0).CodBarras
            Viewstate(Me.ID + "_PrimerTitulo") = _peliculas.Peliculas(0).Titulo
        End If

        ' Creamos DataSet artificial para la lista de dos columnas
        dt = dsPeliculas.Tables.Add("Peliculas")
        dt.Columns.Add("Titulo0", GetType(String))
        dt.Columns.Add("Sinopsis0", GetType(String))
        dt.Columns.Add("CodBarras0", GetType(String))
        dt.Columns.Add("Titulo1", GetType(String))
        dt.Columns.Add("Sinopsis1", GetType(String))
        dt.Columns.Add("CodBarras1", GetType(String))
        dt.Columns.Add("Ordinal", GetType(Integer))

        If _peliculas.Peliculas.Count > 0 Then
            For i = _comenzarEn To _peliculas.Peliculas.Count - 1 Step 2
                Dim row(6) As Object

                row(0) = _peliculas.Peliculas(i).Titulo
                row(1) = _peliculas.Peliculas(i).Sinopsis
                row(2) = _peliculas.Peliculas(i).CodBarras

                If (i + 1 < _peliculas.Peliculas.Count) Then
                    row(3) = _peliculas.Peliculas(i + 1).Titulo
                    row(4) = _peliculas.Peliculas(i + 1).Sinopsis
                    row(5) = _peliculas.Peliculas(i + 1).CodBarras
                End If
                row(6) = i + PrimerOrdinal

                dt.Rows.Add(row)
            Next i

            Repeater1.DataSource = dsPeliculas

        End If
    End Sub
End Class


Public Delegate Sub PaginaEventHandler(ByVal sender As Object, ByVal e As ListaPeliculasEventArgs)

Public Class ListaPeliculasEventArgs
    Inherits EventArgs

    Private _ultimaPelicula As String
    Private _ultimoCodBarras As String
    Private _numRegistros As Integer

    Public Sub New(ByVal ultimaPelicula As String, ByVal ultimoCodBarras As String, ByVal numRegistros As Integer)
        _ultimaPelicula = ultimaPelicula
        _ultimoCodBarras = ultimoCodBarras
        _numRegistros = numRegistros
    End Sub

    Public ReadOnly Property UltimaPelicula()
        Get
            Return _ultimaPelicula
        End Get
    End Property

    Public ReadOnly Property UltimoCodBarras()
        Get
            Return _ultimoCodBarras
        End Get
    End Property

    Public ReadOnly Property NumRegistros()
        Get
            Return _numRegistros
        End Get
    End Property

End Class
Por ejemplo, en la línea
[For i = _comenzarEn To _peliculas.Peliculas.Count - 1 Step 2]

no sé a que se refiere el integer _comenzarEn, si empieza desde cero ó que...

Y tampoco sé a que se refiere .Peliculas, si es un DataSet ó que. Y si lo es, en este documento no veo que esté definido por ningún lado, creo yo; ¿igual lo está en otro al que está vinculado?, no sé...

También me ha dado fallos en las líneas:
dt.Columns.Add("Titulo0", GetType(String)) en la parte GetType... que no acepta...

Bueno, no sé eso es lo que tengo y que no me funciona al quererlo pasar a C#.


A ver si alguien sabe e indica cómo hacerlo para C#...
__________________
Saludos,

zacktagnan.
=================================================