110 messaggi dal 08 febbraio 2007
Ho collegato una direttamente ADO.NET EF a "SelectMethod" di ObjectDataSource cosi' :


<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="sp_wsat_GetUsersByName" TypeName="MyCms.Wsat.AspUsersRepository" OnSelected="ObjectDataSource1_Selected">
</asp:ObjectDataSource>


Nell'evento "ObjectDataSource1_Selected" avrei bisogno di sapere quanti record mi vengono restituiti.

Ho provato cosi' :


protected void ObjectDataSource1_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
int totalRowCount = e.ReturnValue.Count;
}


Ma non funziona...
l'oggetto restituito (e) sembra una List di Classi


? e.ReturnValue
Count = 4
[0]: {MyCms.Wsat.vw_sp_wsat_GetUsersForGrid}
[1]: {MyCms.Wsat.vw_sp_wsat_GetUsersForGrid}
[2]: {MyCms.Wsat.vw_sp_wsat_GetUsersForGrid}
[3]: {MyCms.Wsat.vw_sp_wsat_GetUsersForGrid}


Ma non so come accedere all'informazione Count di questa Lista..

La sintassi dovrebbe essere questa :

List<nonsoiltipo> aa = e.ReturnValue;
? aa.Count


Ma non funziona...

Aiuto !!!
Dipende da cosa restituisce il tuo repository.
E' ragionevole pensare che restituisca un implementazione di IList<User>, oppure IQueryable<User>.
In sostanza, esegui il cast appropriato sulla proprietà "ReturnValue".

Indipendentemente da tutto, è sbagliato utilizzare così direttamente "List<T>".

Nicola Baldi
"Make things as simple as possible, but not simpler."
>>> My blog <<<
Non funziona nel senso che lancia un'eccezione? Sei un pò troppo vago...

Prova a farti stampare il tipo di e.ReturnValue

Davide Guida
Technical Architect @ Razorfish Healthware
http://davideguida.altervista.org
110 messaggi dal 08 febbraio 2007
Purtroppo il tipo restituito non e' sempre lo stesso,
perche il sorgente si trova in una funzione "generica"
che mi valorizza una label con i records restituiti della griglia collegata al ObjectDataSource


protected void ObjectDataSource1_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
UserGvUtil.ShowTotalRecordCount(e, pnlHideItems, totalRecordCount);
}

// show total record count
public static void ShowTotalRecordCount(ObjectDataSourceStatusEventArgs e, Panel pnlHideItems, HyperLink totalRecordCount)
{
if (e.Exception != null)
{
return;
}

object result = e.ReturnValue;

if (result is DataTable)
{
//sp_wsat_GetUsersByNameSorted
DataTable dt = (DataTable)result;

// hide following items if gridview is empty
pnlHideItems.Visible = dt.Rows.Count > 0;
}
else
{
// TotalNumberOfUsersByName
int totalRowCount = ??????????????

totalRecordCount.Text = totalRowCount.ToString() + " Records";
}
}



In debug del e.ReturnValue :



? e.ReturnValue.GetType()
{Name = "List`1" FullName = "System.Collections.Generic.List`1[[MyCms.Wsat.vw_sp_wsat_GetUsersForGrid, CMSBLL, Version=3.5.0.1, Culture=neutral, PublicKeyToken=6b03c94163a4ba28]]"}
[System.RuntimeType]: {Name = "List`1" FullName = "System.Collections.Generic.List`1[[MyCms.Wsat.vw_sp_wsat_GetUsersForGrid, CMSBLL, Version=3.5.0.1, Culture=neutral, PublicKeyToken=6b03c94163a4ba28]]"}
base {System.Reflection.MemberInfo}: {Name = "List`1" FullName = "System.Collections.Generic.List`1[[MyCms.Wsat.vw_sp_wsat_GetUsersForGrid, CMSBLL, Version=3.5.0.1, Culture=neutral, PublicKeyToken=6b03c94163a4ba28]]"}
Assembly: {mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
AssemblyQualifiedName: "System.Collections.Generic.List`1[[MyCms.Wsat.vw_sp_wsat_GetUsersForGrid, CMSBLL, Version=3.5.0.1, Culture=neutral, PublicKeyToken=6b03c94163a4ba28]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
Attributes: Public | Serializable | BeforeFieldInit
BaseType: {Name = "Object" FullName = "System.Object"}
ContainsGenericParameters: false
DeclaringMethod: 'e.ReturnValue.GetType().DeclaringMethod' threw an exception of type 'System.InvalidOperationException'
DeclaringType: null
FullName: "System.Collections.Generic.List`1[[MyCms.Wsat.vw_sp_wsat_GetUsersForGrid, CMSBLL, Version=3.5.0.1, Culture=neutral, PublicKeyToken=6b03c94163a4ba28]]"
GenericParameterAttributes: 'e.ReturnValue.GetType().GenericParameterAttributes' threw an exception of type 'System.InvalidOperationException'
GenericParameterPosition: 'e.ReturnValue.GetType().GenericParameterPosition' threw an exception of type 'System.InvalidOperationException'
GUID: {5af00c2e-048b-3ab3-8ccd-548134771d38}
HasElementType: false
IsAbstract: false
IsAnsiClass: true
IsArray: false
IsAutoClass: false
IsAutoLayout: true
IsByRef: false
IsClass: true
IsCOMObject: false
IsContextful: false
IsEnum: false
IsExplicitLayout: false
IsGenericParameter: false
IsGenericType: true
IsGenericTypeDefinition: false
IsImport: false
IsInterface: false
IsLayoutSequential: false
IsMarshalByRef: false
IsNested: false
IsNestedAssembly: false
IsNestedFamANDAssem: false
IsNestedFamily: false
IsNestedFamORAssem: false
IsNestedPrivate: false
IsNestedPublic: false
IsNotPublic: false
IsPointer: false
IsPrimitive: false
IsPublic: true
IsSealed: false
IsSerializable: true
IsSpecialName: false
IsUnicodeClass: false
IsValueType: false
IsVisible: true
MemberType: TypeInfo
Module: {CommonLanguageRuntimeLibrary}
Namespace: "System.Collections.Generic"
ReflectedType: null
StructLayoutAttribute: {System.Runtime.InteropServices.StructLayoutAttribute}
TypeHandle: {System.RuntimeTypeHandle}
TypeInitializer: {Void .cctor()}
UnderlyingSystemType: {Name = "List`1" FullName = "System.Collections.Generic.List`1[[MyCms.Wsat.vw_sp_wsat_GetUsersForGrid, CMSBLL, Version=3.5.0.1, Culture=neutral, PublicKeyToken=6b03c94163a4ba28]]"}


110 messaggi dal 08 febbraio 2007
Lavoro con il Framework 3.5 e quindi per gestire una SP di tipo SELECT
ho dovuto fare una vista (vw_sp_wsat_GetUsersForGrid) con gli stessi campi della query della sp.
Poi ho associato il tipo di restituzione della sp con il tipo vista
(vw_sp_wsat_GetUsersForGrid)

Quindi in questo caso il tipo di oggetto che mi restituisce e' una

List<vw_sp_wsat_GetUsersForGrid>
prova con
int totalRowCount = (e.Result as List<object>).Count;


IMHO ti consiglio di creare delle classi per mappare le tabelle ed usare un ulteriore livello per accedere ai dati (o magari di passare ad Entity Framework..)

Davide Guida
Technical Architect @ Razorfish Healthware
http://davideguida.altervista.org
110 messaggi dal 08 febbraio 2007
Riferimento a un oggetto non impostato su un'istanza di oggetto.
Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.

Dettagli eccezione: System.NullReferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto.

Errore nel codice sorgente:


Riga 359: {
Riga 360: // TotalNumberOfUsersByName
Riga 361: int totalRowCount = (e.ReturnValue as List<object>).Count;
Riga 362:
Riga 363: totalRecordCount.Text = totalRowCount.ToString() + " Records";


File di origine: c:\Marco\Sorgenti\Aruba\MyCms\App_Code\class\UserGvUtil.cs Riga: 361
Non è che ci abbia capito molto, ma MyCms.Wsat.AspUsersRepository.sp_wsat_GetUsersByName cosa restituisce esattamente? Puoi riportare l'implementazione del metodo?
Dai dettagli dell'eccezione sembra che tu ottenga un tipo "MyCms.Wsat.vw_sp_wsat_GetUsersForGrid" (il quale, aggiungo, non mi pare proprio il massimo della vita!).

Comunque, proprio alla "cialtrona", prova a fare come segue:

protected void ObjectDataSource1_Selected(Object sender, ObjectDataSourceStatusEventArgs e)
{
    IList<MyCms.Wsat.vw_sp_wsat_GetUsersForGrid> result = e.ReturnValue as IList<MyCms.Wsat.vw_sp_wsat_GetUsersForGrid>;
    Int32 totalRowCount = (result == null) ? -1 : result.Count;
}


Il consiglio che ti do è ovviamente quello di utilizzare un approccio "Model-First". In caso contrario, cerca almeno di impostare il mapping in modo che tutto abbia una forma leggibile.
Modificato da naighes il 04 ottobre 2010 16.02 -

Nicola Baldi
"Make things as simple as possible, but not simpler."
>>> My blog <<<

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.