none
afficher champ de données selectionné d'une dropdownlist d'une page dans un label d'une autre autre page web RRS feed

  • Question

  • Bonjour à toute la communauté, je suis débutant en développement .net. depuis quelques semaine j’écris une application de gestion de stock précisément en asp.net/vb.net mais depuis quelques jours je suis bloqué et je n'arrive pas à avancer. mon problème est le suivant: j'ai deux page web nommées respectivement EnregistrerMouvement et DetailMouvement. dans la première page je renseigne toutes les informations en rapport avec le mouvement en cours d'enregistrement et quand je clic sur le bouton "ajouter mouvement" l’événement déclenché derrière ce bouton est d'enregistrer les informations saisies puis de me rediriger automatiquement vers la page DetailMouvement pour l'enregistrement des détails du mouvement en cours. jusqu'à présent mon code marche sans problème. mais le problème qui se pose est que je voudrais  afficher le libellé du mouvement en cour que je sélectionne dans ma dropdownlist de ma page "EnregistrerMouvement" dans un label de ma page "DetailMouvement". voici le codebehind de ma page EnregistrerMouvement que j'ai écris mais qui ne marche pas:

    'dans cette fonction je selection le dernier numéro du mouvement enregistrer 
    Function reqselectmax(ByVal sreq As String) As Integer
            'fonction de selection du maximum
            Dim dd As Integer = 0
            Dim con As New System.Data.Odbc.OdbcConnection("Dsn=dshealthboard")
            Dim ocommand As System.Data.Odbc.OdbcCommand
            Dim dr As System.Data.Odbc.OdbcDataReader
            con.Open()
            ocommand = New System.Data.Odbc.OdbcCommand(sreq, con)
            dr = ocommand.ExecuteReader
    
            While dr.Read
                dd = dr.GetInt32(0)
            End While
            dr.Close()
            con.Close()
            Return dd
    
        End Function
    
    'code derière mon bouton ajouter mouvement
    Protected Sub BtAjoutEnrMvt_Click(ByVal sender As Object, ByVal e As EventArgs) Handles BtAjoutEnrMvt.Click
            Try
            Dim req As String = String.Format("insert into MOUVEMENT (CODSOUSIT,CODDEST,MATEMP,CODTYPMVT,DATMVT,CODCONSULT) values ('{0}','{1}','{2}', '{3}','{4}','{5}')", _
                                              CbCodSouSite.SelectedValue, CbLibDest.SelectedValue, CbMatGrt.SelectedValue, CbCodTypMvt.SelectedValue, TbDatMvt.Text, TbCodConsult.Text)
            reqinsertion(req)
    
                Dim reqmax As String = "select max(CODMVT) from mouvement"
                'stockage de la valeur dans une variable session
                Session("idmouvement") = reqselectmax(reqmax)
                Dim xx As String = Session("idmouvement")
                Response.Redirect(String.Format("DetailMouvement.aspx?dv={0}", xx)) 'code pour passer une valeur à travers une url
            catch ex As Exception 
                ex.ToString()
                Response.Write("Mouvement incomplet ou incorrect,veuillez le renseigner correctement")
            End Try
    
        End Sub
    

    et voici le codebehind de ma page DetailMouvement qui ne marche aussi pas:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                'recuperer l'ID d'un enregistrement
                TbCodMvtDetailMouvement.Text = Request.Params("dv")
                'déclaration d'une variable et construction de la requête de selection pour afficher le libellé du mouvement en cours
                Dim reqindik As String = String.Format("select tm.libtypmvt from mouvement m, type_mouvement tm where m.codtypmvt=tm.codtypmvt and codmvt='" & TbCodMvtDetailMouvement.Text & "'")
                'affichage du resultat de la requête dans le label
                LbIndik.Text = reqindique(reqindik)
            End If
    End Sub
    
    Function reqindique(ByVal sreq As String) As String
            'fonction de recupération du libellé du mouvement
            Dim indiq As String = ""
            Dim con As New System.Data.Odbc.OdbcConnection("Dsn=dshealthboard")
            Dim ocommand As System.Data.Odbc.OdbcCommand
            Dim dr As System.Data.Odbc.OdbcDataReader
            con.Open()
            ocommand = New System.Data.Odbc.OdbcCommand(sreq, con)
            dr = ocommand.ExecuteReader
    
            While dr.Read
                indiq = dr.GetString(0)
            End While
            dr.Close()
            con.Close()
            Return indiq
    
        End Function

    je tiens à préciser que dans ma page "EnregistrerMouvement" la DDl dans laquelle je selectionne le mouvement en cours affiche les libellés des mouvements mais à l'enregistrement c'est le code du mouvement sélectionné qui s'enregistre dans ma base de données Sql Server mais moi c'est le libellé qui s'affiche que je veux récupérer dans mon label de ma second page.

    s'ils vous plait aider moi 

    merci d'avance

     
    samedi 23 août 2014 12:52

Réponses

  • bonjour RubiJadeEmraude et Davy H merci beaucoup pour votre aide. après avoir essayé vos solutions mon problème persistait toujours j'ai donc décidé de mettre mon code behind en commentaire pour me rassurer que le problème venait de là mais ce n'était pas le cas. puisque je remplis une des DDl de ma page "EnregistrerMouvement" automatiquement grâce à un SqlDataSource je me suis rendu compte que la requête de remplissage de cette DDl était force après avoir passé tous les éléments de ma page au peigne fin. j'ai donc corrigé cette requête et nickel tous marge bien.
    encore merci pour votre aide
    • Marqué comme réponse rynnar mercredi 27 août 2014 04:16
    mercredi 27 août 2014 04:15

Toutes les réponses

  • bonsoir la communauté aidez moi s'ils vous plait
    dimanche 24 août 2014 22:12
  • personne ne peut me mettre sur la piste??
    dimanche 24 août 2014 22:13
  • Bonjour,

    Apparemment vous placez idmouvement à plusieurs endroit.

    - Dans la session.

    - En paramètre GET.

    Session("idmouvement") = reqselectmax(reqmax)Dim xx As String = Session("idmouvement")Response.Redirect(String.Format("DetailMouvement.aspx?dv={0}", xx)) 

    Vérifiez dans l'URL lorsque vous arrivez sur la page de détail que l'idmouvement y est.

    Vous pouvez également vérifiez la valeur de la variable de session en debug (session('idmouvement')) ou en direct en plaçant <%= Session("idmouvement") %> dans la vue.

    Cdt,

    Davy

    lundi 25 août 2014 12:07
  • Bonsoir davy j'ai fait ce que tu as conseillé mais le problème est que quand je lance ma page "EnregistrerMouvement" j'ai cette erreur qui s'affiche:

    Erreur du serveur dans l'application '/'.

    Le format de la chaîne d'entrée est incorrect.

    Description : Une exception non gérée s'est produite au moment de l'exécution de la requête Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code. 

    Détails de l'exception: System.FormatException: Le format de la chaîne d'entrée est incorrect.

    Erreur source: 
    Une exception non gérée s'est produite lors de l'exécution de la requête Web actuelle. Les informations relatives à l'origine et l'emplacement de l'exception peuvent être identifiées en utilisant la trace de la pile d'exception ci-dessous.

    Trace de la pile: 
    [FormatException: Le format de la chaîne d'entrée est incorrect.]
       System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +9594283
       System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt) +146
       System.Decimal.Parse(String s, IFormatProvider provider) +28
       System.Data.Odbc.OdbcDataReader.internalGetDecimal(Int32 i) +202
       System.Data.Odbc.OdbcDataReader.GetValue(Int32 i, TypeMap typemap) +92
       System.Data.Odbc.OdbcDataReader.GetValue(Int32 i) +57
       System.Data.Odbc.OdbcDataReader.GetValues(Object[] values) +64
       System.Data.ProviderBase.CommonLanguageSubsetDataReader.GetValues(Object[] values) +13
       System.Data.ProviderBase.SchemaMapping.LoadDataRow() +46
       System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping) +96
       System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue) +164
       System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) +424
       System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +204
       System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +319
       System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +92
       System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1618
       System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +97
       System.Web.UI.WebControls.ListControl.PerformSelect() +34
       System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74
       System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +66
       System.Web.UI.WebControls.ListControl.OnPreRender(EventArgs e) +29
       System.Web.UI.Control.PreRenderRecursiveInternal() +103
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2496
    


    Informations sur la version : Version Microsoft .NET Framework :4.0.30319; Version ASP.NET :4.0.30319.1

    lundi 25 août 2014 17:39
  • dans ma variable session je stocke idmouvement que j'utilise ensuite dans "DetailMouvement" pour faire une requête de sélection du libellé du mouvement en cours qu"ensuite j'affiche dans le label de ma page "DetailMouvement"
    lundi 25 août 2014 17:43
  • up j'ai besoin de votre aide
    lundi 25 août 2014 23:48
  • Bonjour rynnard.

    ce que je peux te proposer comme solution c'est de créer un module:

    -Click droit sur ton projet dans l'explorateur de solution

    -add new item

    -tu selection module.

    dans le module maintenant tu crées une variable par exemple g_Variable. L'avantage c'st que cette variable peut s'appeller dans tout le projet.

    Ainsi dans le code behind de la page EnregistrerMouvement ou se trouve le dropdownlist , du recupère l'id mouvement en faisant

    g_Variable = tondropdonlist.selectedValue

    ensuite sur la deuxième page tu ne fait qu'appeller la variable g_Variable pour l'éxécution de ta requette..

    ou bien tu recupère directement la valeur affichée dans le dropdownlist de la page EnregistrerMouvement 

    en faisant g_Variable = tondropdownList.selectedItem que tu affecte maintenant a ton libellé qui se trouve sur la page DetailMouvement  : label.text = g_Variable

    j'espère que cela t'aidera. Bon dev


    koko

    mardi 26 août 2014 15:36
  • Bonsoir,

    Je ne suis pas un expert en VB.NET mais voici un exemple de code qui fonctionne chez moi : 

    EnregistrerMouvement.aspx

    <form id="form1" runat="server">
            <div>
                Valeur à passer : <asp:DropDownList runat="server" ID="dropdown1"/><br />
                <asp:Button runat="server" ID="myButton" OnClick="myButton_Click" Text="Aller au détail" />
            </div>
        </form>

    EnregistrerMouvement.aspx.vb

    Public Class EnregistrerMouvement
        Inherits System.Web.UI.Page
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                Dim liste As New Dictionary(Of Integer, String)
                liste.Add(0, "Zero")
                liste.Add(1, "Un")
                liste.Add(2, "Deux")
                Session("valeurs") = liste
    
                dropdown1.Items.AddRange((From item In liste Select New ListItem(item.Value, item.Key)).ToArray())
            End If
        End Sub
    
        Protected Sub myButton_Click(ByVal sender As Object, ByVal e As EventArgs)
            Session("idmouvement") = dropdown1.SelectedValue
            Dim xx As String = Session("idmouvement")
            Response.Redirect(String.Format("DetailMouvement.aspx?dv={0}", xx))
        End Sub
    End Class

    DetailMouvement.aspx

    <form id="form1" runat="server">
            <div>
                Variable dans la Session : <%= Session("idmouvement")%>
            </div>
            <div>
                Variale passée en GET : <asp:Label runat="server" ID="LbIndik" />
            </div>
            
            <div>
                Valeur selectionnée : <asp:Label runat="server" ID="lblSelected" />
            </div>
            <asp:Button runat="server" ID="myBtn" OnClick="myBtn_OnClick" Text="Retour" />
        </form>

    DetailMouvement.aspx.vb

    Public Class DetailMouvement
        Inherits System.Web.UI.Page
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                LbIndik.Text = Request.QueryString("dv")
    
                Dim liste As Dictionary(Of Integer, String) = Session("valeurs")
    
                If Not Session("idmouvement") Is Nothing Then
                    lblSelected.Text = liste.FirstOrDefault((Function(t) t.Key = Session("idmouvement"))).Value
                End If
    
            End If
        End Sub
    
        Protected Sub myBtn_OnClick(ByVal sender As Object, ByVal e As EventArgs)
            Response.Redirect("EnregistrerMouvement.aspx")
        End Sub
    End Class

    En espèrant que ça puisse vous aider.

    Cordialement,

    Davy

    mardi 26 août 2014 17:48
  • bonjour RubiJadeEmraude et Davy H merci beaucoup pour votre aide. après avoir essayé vos solutions mon problème persistait toujours j'ai donc décidé de mettre mon code behind en commentaire pour me rassurer que le problème venait de là mais ce n'était pas le cas. puisque je remplis une des DDl de ma page "EnregistrerMouvement" automatiquement grâce à un SqlDataSource je me suis rendu compte que la requête de remplissage de cette DDl était force après avoir passé tous les éléments de ma page au peigne fin. j'ai donc corrigé cette requête et nickel tous marge bien.
    encore merci pour votre aide
    • Marqué comme réponse rynnar mercredi 27 août 2014 04:16
    mercredi 27 août 2014 04:15