56 messaggi dal 25 settembre 2010
ciao,
ho un classico master-detail,sulla dafault.aspx,quindi un menù e datalist centrale,voglio passare un parametro preso da una riga del menu, ma non riesco a farlo passare.
Classe incapsulata prodotti
  Public Class Products
        Private _Pid As Integer
        Private _P_Descrizione As String
        Private _P_Descrizione_estesa As String
        Private _P_ImgPath As String
        Private _P_Insert As Date?
        Private _P_Active As Byte
        Private _P_UserId As Guid
        Private _P_TipoMerce As Integer
        Private _P_RegolaInRecord As Integer
        Private _P_NoRole As Byte?
        <DataObjectFieldAttribute(True, True, False)>
        Public Property Pid As Integer
            Get
                Return _Pid
            End Get
            Set(value As Integer)
                _Pid = value
            End Set
        End Property
        Public Property P_Descrizione As String

            Get
                Return _P_Descrizione
            End Get
            Set(value As String)
                _P_Descrizione = value
            End Set
        End Property
          'eccc
          'una classe lista...
           Imports System
           Imports System.Collections.Generic
           Namespace Baratto.Bo
           Public Class ProductsList
           Inherits List(Of Products)
           Sub New()

           End Sub

          End Class
End Namespace
       

Accesso ai dati
 Public Shared Function GetItem(ByVal id As Integer) As ProductsList

            Dim myListMerci As ProductsList = Nothing
            Dim factory As DbProviderFactory = DbProviderFactories.GetFactory(ObjCn.GetProviderName())
            Dim conn As DbConnection = factory.CreateConnection()
            conn.ConnectionString = ObjCn.GetConnectionString()
            
            Dim Cm As DbCommand = factory.CreateCommand
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = ("sprocGetProductsByStuff")
            Cm.Connection = conn
            conn.Open()

            Dim Pm As DbParameter = Cm.CreateParameter()
            Pm.Value = id 'qui è valorizzato
            Pm.ParameterName = "@Id"
            Pm.DbType = DbType.Int32
            Cm.Parameters.Add(Pm)

            Dim dr As DbDataReader = Cm.ExecuteReader(CommandBehavior.CloseConnection)
           
            Dim dt As DataTable = New DataTable()'qui c'è una table ma vuota

          
                If dt.Rows.Count > 0 Then 'qui la riga è 0
                    myListMerci = New ProductsList
                    dt.Load(FillDataRecord(myListMerci))

                End If
          
            Return myListMerci
        End Function

 Private Shared Function FillDataRecord(ByVal myDataRecord As IDataRecord) As Products
            Dim myProduct As Products = New Products
            myProduct.Pid = myDataRecord.GetInt32(myDataRecord.GetOrdinal("Pid"))
            myProduct.P_Descrizione = myDataRecord.GetString(myDataRecord.GetOrdinal("P_Descrizione")).ToString
            myProduct.P_Descrizione_estesa = myDataRecord.GetString(myDataRecord.GetOrdinal("P_Descrizione_Estesa"))
            myProduct.Id = myDataRecord.GetInt32(myDataRecord.GetOrdinal("P_TipoMerce"))
            If myProduct.P_UserId = Nothing Then
                myProduct.P_UserId = Guid.Empty
            Else
                myProduct.P_UserId = myDataRecord.GetGuid(myDataRecord.GetOrdinal("P_UserId"))
            End If

            Return myProduct
        End Function

il databinding sulla pagina default

'..continua da page_load..
  catList.DataSource = MerciologicaDB.GetListMerci()
            catList.DataBind()


        End If



    End Sub
 
'cerco di caricare i dati filtrati dal parametro

    Private Sub dL_Home_Load(sender As Object, e As System.EventArgs) Handles dL_Home.Load
        Dim Id As Integer = CStr(Request.Params("Id"))'qui è valorizzato
        dL_Home.DataSource = ProductsDB.GetItem(Id)
        dL_Home.DataBind()
    End Sub

Se cambio:
 If dt.Rows.Count > 0 in ...Count > -1

mi restituisce:Impossibile eseguire il cast di oggetti di tipo 'Baratto.BO.Baratto.Bo.ProductsList' sul tipo 'System.Data.IDataRecord'.

insomma perchè non riesco a passare il parametro alla datatable?
grazie ciao.
Modificato da lorbax il 08 gennaio 2012 11.25 -
lorbax wrote:
Se cambio: If dt.Rows.Count > 0 in ...Count > -1
mi restituisce mpossibile eseguire il cast di oggetti di tipo 'Baratto.BO.Baratto.Bo.ProductsList' sul tipo 'System.Data.IDataRecord'. insomma perchè non riesco a passare il parametro alla datatable?

perché, come ti dice l'errore, non hai un IDataRecord, ma un ProductsList. quindi sbagliando cast non funziona il tuo codice.
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
56 messaggi dal 25 settembre 2010
questo regge un datareader e funziona:
 Dim dr As DbDataReader = Cm.ExecuteReader()

                Try
                    If dr.HasRows Then
                        myCategory = New MerciList
                        While dr.Read
                            myCategory.Add(FillDataRecord(dr))
                        End While
                    End If
                    dr.Close()
                Finally
                    CType(dr, IDisposable).Dispose()
                End Try
                conn.Close()
            Finally
                CType(conn, IDisposable).Dispose()
            End Try
            Return myCategory

non posso usare lo stesso criterio per ricavare un datatable?
  Try
                    If dt.Rows.Count > -1 Then
                        myListMerci = New ProductsList
                        myListMerci.Add(FillDataRecord(dt))

                    End If
                    dr.Close()
                Finally
                    CType(dr, IDisposable).Dispose()
                End Try
                conn.Close()
            Finally
                CType(conn, IDisposable).Dispose()
            End Try
            Return myListMerci

in quest caso ho lo stesso errore di casting riferito al DataTable.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.