none
les adresses mails dans un gridview cliquables en mode NORMAL mais erreur en mode EDIT RRS feed

  • Question

  • Bonjour

    j'ai un gridview avec un champ destiné aux adresses mail. Je voudrais que ces mails soient cliquables (pour démarrer outlook p.ex.) en mode normal. Cela marche bien, mais lorsque je passe en mode edit, j'ai l'erreur: "

    La référence d'objet n'est pas définie à une instance d'un objet

    Je sais pourquoi: le label n'est pas défini en EditItemTemplate, uniquement en ItemTemplate:

    <asp:TemplateField HeaderText="mail" SortExpression="mail" ItemStyle-HorizontalAlign="Center" >
    <EditItemTemplate>
    <asp:TextBox ID="mail" runat="server" MaxLength="20" Width="120px" Text='<%# Bind("mail") %>' ></asp:TextBox>
    </EditItemTemplate>
    <ItemTemplate>
    <asp:Label ID="maill" runat="server" Text='<%# Bind("mail") %>'></asp:Label>
    </ItemTemplate>

    Code-behind: 

     Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.DataBound
                  Dim maill As Label

            For Each dvr In GridView1.Rows
                maill = CType(dvr.FindControl("maill"), Label)
                maill.Text = "<a href='mailto:" & maill.Text & "'>" & maill.Text & "</a>"
            Next

    Comment n'exécuter ce code qu'en mode normal?

    Merci

    Raf

    mercredi 11 novembre 2020 15:46

Réponses

  • J'au trouvé la raison: il ne perd pas sa valeur mais il ne faut pas utiliser 'mail' comme variable car c'est déjà utilisé par asp.net (namespace).

    Cordialement

    Raf

    • Marqué comme réponse Raffarin dimanche 15 novembre 2020 15:18
    dimanche 15 novembre 2020 15:08

Toutes les réponses

  • Bonjour Raf,

    Avez-vous essayé de définir ReadOnly="true" dans votre code aspx?
    <EditItemTemplate>
    <asp:TextBox ID="mail" runat="server" ReadOnly="true" MaxLength="20" Width="120px" Text='<%# Bind("mail") %>' >


    Cordialement,
    Nina

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 12 novembre 2020 08:03
    Modérateur
  • Bonjour Nina

    Merci pour votre réponse

    j'ai essayé mais ça donne exactement la même erreur au niveau de la ligne   maill.Text = "<a href='mailto:" & maill.Text & "'>" & maill.Text & "</a>".

    Raf

    jeudi 12 novembre 2020 08:58
  • Bonjour

    j'ai essayé ceci et ça marche, sauf que j'ai maintenant autre-part une autre erreur:

    Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
            Dim maill As String = ""
            If (e.Row.RowType = DataControlRowType.DataRow And (e.Row.RowState & DataControlRowState.Normal) = DataControlRowState.Normal) Then
                maill = CType(e.Row.Cells(5).Controls(1), Label).Text
                maill = "<a href='mailto:" & maill & "'>" & maill & "</a>"
                e.Row.Cells(5).Text = maill
            End If
        End Sub

    Lorsque je veux insérer tous les champs dans une autre table, j'ai cette erreur:

    The parameterized query '(@mail nvarchar(4000),@tel ' expects the parameter '@mail', which was not supplied.

    Voic le code:

     Protected Sub GridView1_RowDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeletedEventArgs) Handles GridView1.RowDeleted

            Dim mail, mat, tel.  As String

            mat = e.Values("mat")
             mail = e.Values("mail")
             tel = e.Values("tel")

      Using mConnection As New SqlConnection(param.ConnectionString)
                mConnection.Open()

      sql = "INSERT INTO [archief] (mail,tel,mat) VALUES (@mail,@tel,@mat)"
                comd = New SqlCommand(sql, mConnection)
                 comd.Parameters.AddWithValue("@mail", mail)
                comd.Parameters.AddWithValue("@tel", tel)
                comd.Parameters.AddWithValue("@mat", mat)
                 comd.ExecuteNonQuery()
                mConnection.Close()
            End Using

    Pourquoi le champ 'mail' a perdu sa valeur et comment la récuperer?

    Merci 

    Raf

    jeudi 12 novembre 2020 11:18
  • Bonjour Raf,

    Peut-être, le point après "tel" à la ligne "Dim mail, mat, tel.  As String" est une erreur de frappe?
    L'erreur que vous avez obtenue est lié avec une valeur manquant dans un champ de la base de données. Essayez d'ajouter un point d'arrêt dans Visual Studio après la ligne mail = e.Values("mail")    pour vérifier si le résultat sera "Nothing". Si c'est le cas, vous devez définir la valeur de paramètre à DBNull.Value comme on a proposé dans ce thread:
    The parameterized query … expects the parameter '@units', which was not supplied
    Le code est en C#, si vous avez besoin, utilisez un convertisseur de code.

    Cordialement,
    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.


    vendredi 13 novembre 2020 15:40
    Modérateur
  • Bonjour Nina

    avec ceci ça marche:

    If mail = Nothing Then
                    comd.Parameters.AddWithValue("@units", DBNull.Value)
    End If

    Mais comment se fait-il que 'mail' ait perdu sa valeur par cette ligne:  e.Row.Cells(5).Text = maill

    Cordialement

    Raf

    dimanche 15 novembre 2020 12:14
  • J'au trouvé la raison: il ne perd pas sa valeur mais il ne faut pas utiliser 'mail' comme variable car c'est déjà utilisé par asp.net (namespace).

    Cordialement

    Raf

    • Marqué comme réponse Raffarin dimanche 15 novembre 2020 15:18
    dimanche 15 novembre 2020 15:08