Debbo dire personalmente che non ho mai apprezzato spasmodicamente gli ObjectDataSource per varie ragioni,ma indubbiamente in molti casi sono comodi. Un problema comunque è però quello di dovere impostare a runtime un valore per un parametro. Supponiamo di avere il seguente ObjectDataSource
<asp:ObjectDataSource ID="SectionsForCustomer" runat="server" SelectMethod="Select" TypeName="MyNamespace.MyType.etcetcetc">
<SelectParameters>
<asp:Parameter DefaultValue="-1" Direction="Input" Size="4" Name="customerId" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
In pratica ho quindi una classe il cui metodo Select() accetta un intero che mi specifica il cliente che deve essere gestito, per questa ragione ho messo un parametro apposito, e per impostare il suo valore via codice debbo intercettare l'evento Selecting dell'objectDataSource
Protected Sub SectionsForCustomer_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceSelectingEventArgs) Handles SectionsForCustomer.Selecting
e.InputParameters("customerId") = Me.CustomerId
End Sub
In questo caso ho impostato il valore del parametro in base ad una proprietà del controllo utente su cui risede il codice, l'importante è capire che nell'evento selecting io posso lavorare con i parametri che verranno passati al metodo Select(). Questi parametri sono infatti esposti tramite e.InputParameters che è di tipo IOrderedDictionary. Purtroppo da più parti in rete ho invece trovato questa soluzione
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
SectionsForCustomer.SelectParameters(0).DefaultValue = Me.CustomerId.ToString()
End Sub
ovvero utilizzare un metodo come il load (che viene generato prima della selezione da parte dell'objectdatasource) e cambiare la proprietà defaultValue del parametro. Questo a mio avviso rende il metodo poco chiaro e poi obbliga ad impostare il parametro come stringa (notate il ToString() ) perchè la proprietà DefaultValue viene memorizzata come stringa :(. Morale della favola, non sempre in internet si trovano i consigli giusti :).
Alk.