292 messaggi dal 13 giugno 2001
Salve a tutti!

Ho un DropDownList con un ObjectDataSource all'interno di un FormView...al momento dell'Update il valore del DDL viene passato tranquillamente ma se seleziono un solo record e cerco di aggiornarlo l'unico valore che non riesce a passare è proprio quello dell DDL.

Il problema è simile a questo post
http://stackoverflow.com/questions/1705892/two-way-data-binding-within-a-formview-doesnt-work-when-runat-server-is-used-fo



<asp:FormView ID="fvParts" runat="server" AllowPaging="True" DataKeyNames="PartID" DataSourceID="odsParts" DefaultMode="Edit">
<EditItemTemplate>

<asp:DropDownList ID="ddlCategory" runat="server" DataSourceID="odsCategories" DataTextField="Category"                                         DataValueField="CategoryID" AppendDataBoundItems="true" SelectedValue='<%# Bind("CategoryID") %>'>
<asp:ListItem Text="Select" Value="0"></asp:ListItem>                   </asp:DropDownList>

<asp:ObjectDataSource ID="odsCategories" runat="server"                                            OldValuesParameterFormatString="original_{0}" SelectMethod="GetCategories" TypeName="CategoriesPartBLL">
</asp:ObjectDataSource>
</EditItemTemplate>
 </asp:FormView>



Qualcuno può aiutarmi? Sto praticamente impazzendo.

Grazie mille
292 messaggi dal 13 giugno 2001
http://forums.asp.net/post/4115432.aspx

Altro link con stesso problema...

Help me!
103 messaggi dal 04 ottobre 2010
Forse il fatto che abbia un DataSource diverso da quello del formview fa in modo che il valore in Bind non raggiunga il DataSource del formview (odsParts) ma si fermi al DataSource odsCategories.
Potrebbe essere necessario mettere, per correttezza, il SelectedValue con Eval (perchè tanto l'objectdatasource odsCategories non fa updates o inserts quindi se il dato va a lui in postback, non ci fa nulla), ed andare a cercare nell'updating dell'odsParts la DDL prendendo a mano il valore della categoria scelta. Per trovaere la DDL è necessario usare il findcontrol nell'edititem del formview. Una volta trovata, aggiorni l'updateparameter della categoria al suo selectedvalue della DDL.
Modificato da Biohazard il 05 settembre 2012 15.33 -
292 messaggi dal 13 giugno 2001
Biohazard ha scritto:
Per trovaere la DDL è necessario usare il findcontrol nell'edititem del formview. Una volta trovata, aggiorni l'updateparameter della categoria al suo selectedvalue della DDL.
Modificato da Biohazard il 05 settembre 2012 15.33 -


Ho fatto così ma non accade nulla

Dove sbaglio?


       Protected Sub odsParts_Updating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceMethodEventArgs) Handles odsParts.Updating
        Dim ddl As DropDownList = DirectCast(Me.FindControl("ctl00$ContentPlaceHolder1$fvParts$ddlCategory"), DropDownList)
        If fvParts.CurrentMode = FormViewMode.Edit Then
            e.InputParameters("CategoryID") = ddl.SelectedValue
        End If

    End Sub

Modificato da giuseppe77 il 05 settembre 2012 17.41 -
103 messaggi dal 04 ottobre 2010
Conviene secondo me che metti un breakpoint per vedere cosa succede, purtroppo non parlo il VB, è una mia grave pecca, comunque mi sembra che non vai a prendere la DDL dove dovresti andare a prenderla, in C# io avrei fatto

DropDownList DDLCategoria = (DropDownList)fvParts.FindControl("ddlCategory");
292 messaggi dal 13 giugno 2001
Biohazard ha scritto:
DropDownList DDLCategoria = (DropDownList)fvParts.FindControl("ddlCategory");


Questa è la versione VB del tuo codice.

Dim DDLCategoria As DropDownList = DirectCast(fvParts.FindControl("ddlCategory"), DropDownList)
ma nulla di fatto.

Ho visto che se faccio il binding via codice nell'evento formview_PreRender

    Protected Sub fvParts_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles fvParts.PreRender
        Dim Category As New CategoriesPartBLL
        Dim ddlCategory As DropDownList = DirectCast(fvParts.FindControl("ddlCategory"), DropDownList)
        ddlCategory.DataSource = Category.GetCategories
        ddlCategory.DataTextField = "Category"
        ddlCategory.DataValueField = "CategoryID"
        ddlCategory.DataBind()
    End Sub


Posso recuperare il valore del DropDownList nell'evento Page_Load

Dim ddlCategory As DropDownList = DirectCast(fvParts.FindControl("ddlCategory"), DropDownList)
Response.Write(ddlCategory.SelectedValue)

Ma a me interessa recuperarlo o nel formview_ItemUpdating o nel odsParts_Updating per potere aggiornare il database

Ma è possibile che nessuno si sia mai trovato in questo problema?

HELP HELP
103 messaggi dal 04 ottobre 2010
Il DirectCast torna null? ti conviene fare con l'espressione di watching un'immersione tra i Controls della formview e provare il findcontrol più volte finchè non trovi la DDL, perchè quella esiste da qualche parte dentro la formview, bisogna solo sapere come recuperarla...
292 messaggi dal 13 giugno 2001
Le ho provate tutte! Sono oramai 4gg che ci sbatto. La cosa strana è che gli altri controlli li recupero tranquillamente allo stesso modo

Dim txtCategory As TextBox = DirectCast(fvParts.FindControl("txtCategory"), TextBox)


Solo il DropDownList non mi ritorna alcun valore!!

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.