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 -