Foros del Web » Programando para Internet » ASPX (.net) »

"Esta fila ya pertenece a otra tabla"

Estas en el tema de "Esta fila ya pertenece a otra tabla" en el foro de ASPX (.net) en Foros del Web. Buenas. Estoy intentando añadir un repeater dinámicamente por cada categoría que obtengo de una consulta a SQL Server, utilizando un repeater de plantilla. Hasta aquí ...
  #1 (permalink)  
Antiguo 17/10/2006, 01:56
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
"Esta fila ya pertenece a otra tabla"

Buenas. Estoy intentando añadir un repeater dinámicamente por cada categoría que obtengo de una consulta a SQL Server, utilizando un repeater de plantilla. Hasta aquí todo bien, pero no puedo añadir más de un registro al repeater de la misma categoría, me indica que la fila ya pertenece a otra tabla. Utilizo dt.NewRow.

Código:
Dim con As New ConexionesBD.datosSQL
            Dim dt As DataTable = con.DevuelveDT("PA_Enlaces")
            Dim ds As New DataSet

            If dt.Rows.Count > 0 Then
                For Each dr As DataRow In dt.Rows
                    Dim dtN As DataTable = dt.Clone
                    If ds.Tables(dr.Item("Nombre")) Is Nothing Then
                        dtN.TableName = dr.Item("Nombre")
                        ds.Tables.Add(dtN)
                    End If
                    Dim drN As DataRow = dtN.NewRow
                    drN("URL") = dr("URL")
                    drN("Titulo") = dr("Titulo")
                    drN("Def") = dr("Def")
                    CType(ds.Tables(dr.Item("Nombre")), DataTable).Rows.Add(drN)

                Next
                For Each dtN As DataTable In ds.Tables
                    Dim rpt As New Repeater
                    rpt.ItemTemplate = Me.rptPlantilla.ItemTemplate
                    rpt.HeaderTemplate = Me.rptPlantilla.HeaderTemplate
                    rpt.FooterTemplate = Me.rptPlantilla.FooterTemplate
                    rpt.SeparatorTemplate = Me.rptPlantilla.SeparatorTemplate
                    rpt.DataSource = dtN
                    rpt.DataBind()
                    Me.pnlEnlaces.Controls.Add(New LiteralControl("<div class='verde' align='center'><b>· " & dtN.TableName & " ·</b></div>"))
                    Me.pnlEnlaces.Controls.Add(rpt)
                Next
            End If
Lo marcado en rojo es la linea de error.

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 17/10/2006, 03:05
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Ya está resuelto:

Código:
For Each dr As DataRow In dt.Rows
                    Dim dtN As DataTable
                    If ds.Tables(dr.Item("Nombre")) Is Nothing Then
                        dtN = New DataTable(dr.Item("Nombre"))
                        ds.Tables.Add(dtN)
                        dtN.Columns.Add(New DataColumn("URL", Type.GetType("System.String")))
                        dtN.Columns.Add(New DataColumn("Titulo", Type.GetType("System.String")))
                        dtN.Columns.Add(New DataColumn("Def", Type.GetType("System.String")))
                    End If
                    Dim drN As DataRow = dtN.NewRow
                    drN("URL") = dr("URL")
                    drN("Titulo") = dr("Titulo")
                    drN("Def") = dr("Def")
                    CType(ds.Tables(dr.Item("Nombre")), DataTable).Rows.Add(drN)
                Next
Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #3 (permalink)  
Antiguo 18/10/2006, 14:07
 
Fecha de Ingreso: mayo-2004
Ubicación: Guadalajara, Jalisco, México
Mensajes: 724
Antigüedad: 20 años
Puntos: 6
Sinseramente, que raro está tu codigo... nunca habia visto esto.. :s

CType(ds.Tables(dr.Item("Nombre")), DataTable).Rows.Add(drN)

jajaj... estabas en un sueño guajiro...

Para importar un row de otra tabla, las tablas tienen un metodo ImportRow
mediante ese metodo puede agregar rows de otras tablas.. hay que leer el capitulo de ADO.NET te lo recomiendo....

Esta linea podria probocar error,
If ds.Tables(dr.Item("Nombre")) Is Nothing Then


La linea Type.GetType("System.String")))
Yo la reemplazaria por GetType(System.String)

La linea
If ds.Tables(dr.Item("Nombre")) Is Nothing Then
si no se cumple esta condicion, dtN nunca se instanciará, por lo tanto te dará una exepcion tu codigo
Dim drN As DataRow = dtN.NewRow
ya que dtN es nothing



En general, tu codigo está muy mal hecho, supongo que apenas empiezas en .NET, verifica la logica de lo que quieres hacer friend, sino al final tendrás un programa lleno de bugs... No te lo digo en mal pex.. te lo digo para que aprendas de tu errores friend...

saludos
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 02:37.