Balise html dans un datatable [Résolu]

Signaler
Messages postés
195
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
13 juillet 2006
-
Messages postés
195
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
13 juillet 2006
-
Bonjour a tous,
J'ai un probléme au niveau de l'affichage dans un detailsview
Je récupére des informations via wmi, je stock le tout dans un datatable et ensuite je l'affiche dans un detailsview. le pb, c'est que la mise en forme que j'utilise dans mon datatable ne s'execute pas
en effet j'utilise une balise
que je met dans une colonne de mon datatable et lors de l'execution celle-ci se transforme en <br>
voici mon code

Public Function getBios() As System.Data.IDataReader
        Dim LaTable As New System.Data.DataTable
        Dim MaLigne As System.Data.DataRow
        Dim mes_infos As String = ""
        Dim oq As System.Management.ObjectQuery
        Dim query As ManagementObjectSearcher = Nothing
        Dim ms As System.Management.ManagementScope
        Dim queryCollection As ManagementObjectCollection = Nothing
        Dim MonMO As ManagementObject = Nothing
        Dim OccupationDisk As Double = 0
        Dim connexionOption As ConnectionOptions = New ConnectionOptions
        connexionOption.Username = "starfax"
        connexionOption.Password = "starfax"
        Dim list As BulletedList = New BulletedList

        PrepareDatatable(LaTable)
        ms = New System.Management.ManagementScope("\" + ip + "\root\cimv2", connexionOption)
        oq = New System.Management.ObjectQuery("SELECT * FROM Win32_Bios")
        query = New ManagementObjectSearcher(ms, oq)
        queryCollection = query.Get()
        For Each MonMO In queryCollection
            If Not (IsNothing(MonMO("Description"))) Then
                MaLigne = LaTable.NewRow()
                MaLigne("Description") = MonMO("Description")
                MaLigne("Status") = MonMO("Status")
                MaLigne("N° de serie") = MonMO("SerialNumber")
                MaLigne("Fabriquant") = MonMO("Manufacturer")
                MaLigne("Version") = MonMO("Version")
                Dim pos As Integer = 5
                For Each element As Integer In MonMO("BiosCharacteristics")
                    MaLigne("informations") += bios_caract(element) & "
"
                Next
                LaTable.Rows.Add(MaLigne)

            End If
        Next
        LaTable.Columns("Informations").Expression.ToCharArray()
        Dim dr As System.Data.IDataReader
        dr = LaTable.CreateDataReader
        query.Dispose()
        queryCollection.Dispose()
        MonMO.Dispose()
        Return dr
    End Function

    Private Sub PrepareDatatable(ByRef LaTableTemp As System.Data.DataTable)
        Dim myColumn As System.Data.DataColumn = New System.Data.DataColumn
        ' Paramétrage des Colonnes
        myColumn.DataType = System.Type.GetType("System.String")
        myColumn.AllowDBNull = False
        myColumn.Caption = "Description"
        myColumn.ColumnName = "Description"
        LaTableTemp.Columns.Add(myColumn)
        myColumn = New System.Data.DataColumn
        myColumn.DataType = System.Type.GetType("System.String")
        myColumn.Caption = "Status"
        myColumn.ColumnName = "Status"
        LaTableTemp.Columns.Add(myColumn)
        myColumn = New System.Data.DataColumn
        myColumn.DataType = System.Type.GetType("System.String")
        myColumn.Caption = "N° de serie"
        myColumn.ColumnName = "N° de serie"
        LaTableTemp.Columns.Add(myColumn)
        myColumn = New System.Data.DataColumn
        myColumn.DataType = System.Type.GetType("System.String")
        myColumn.Caption = "Fabriquant"
        myColumn.ColumnName = "Fabriquant"
        LaTableTemp.Columns.Add(myColumn)
        myColumn = New System.Data.DataColumn
        myColumn.DataType = System.Type.GetType("System.String")
        myColumn.Caption = "Version"
        myColumn.ColumnName = "Version"
        LaTableTemp.Columns.Add(myColumn)
        myColumn = New System.Data.DataColumn
        myColumn.DataType = System.Type.GetType("System.String")
        myColumn.Caption = "Informations"
        myColumn.ColumnName = "Informations"
        LaTableTemp.Columns.Add(myColumn)
    End Sub

6 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
Ok je pige un peu mieux le problème :p je croyais que c'etait le controle Table et pas un system.data.table :p

l'autre solution que je vois et de changer la disposition de ton datatable au lieu de mettre une colonne de type string, tu n'as qu'a mettre une colonne de type control (je sais pas si c'est possible ca :p) et ensuite tu pourras rajouter des controles dedans, sinon il faut essayer de mettre une colonne de type List<String> si c'est possible :s

l'autre solution consisterais lors de ton databinding du datareader vers ton controle, tu lui dis de ne pas htmlencodé, mais cette solution n'est pas trés propre :s

Le problème est vraiment sur ce que contient ton datareader, il comporte plusieurs lignes dont une qui contient d'autres lignes ...

ca me fait penser à une autre solution tu n'as qu'a mettre une colonne de type XML et ensuite lors de ton binding tu affiches comme il faut cette colonne :s

<hr />Cyril - MVS - MCP
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
Bonjour 

Pour rajouter une ligne il suffit de faire : 
                LaTable.Rows.Add(new LiteralControl("
")

<hr />Cyril - MVS - MCP
Messages postés
195
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
13 juillet 2006
3
Si je comprend bien ton instruction permet d'ajouter une ligne entre chacune des ligne de mon datatable
Ce n'est pas exactement ce que je veux faire
mon but et d'ajouter un retour a la ligne pour chaque informations (pour chaque ligne qui est en gras dans mon code)
Si tu as encore une idée!!
Merci de ton aide précieuse!
Messages postés
195
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
13 juillet 2006
3
J'ai testé, retésté et encore testé, rien a faire, le literalcontrol ne veut pas s'ajouter. j'ai un message d'erreur qui me dit que ma colonne ne peut pas contenir autre chose que le type string (ce qui est normal!!!!).Alors la je ne sais plus par ou mis prendre pour resoudre se pb
voila ce que j'essaie de faire
                ...
                For Each element As Integer In MonMO("BiosCharacteristics")
                    Dim literal As New LiteralControl(bios_caract(element) & "
")
                    MaLigne("informations")= literal
                Next

Merci de m'aider!!!
Messages postés
195
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
13 juillet 2006
3
Ok pour toutes ces soluces je test et je te fait part des retours!!!
En ce qui concerne le type des colonne j'ai essayé de mettre une colonne de type literal mais ca ne marche pas... :(
Peut tu m'en dire plus sur la solution XML?
Sinon, comment faire pour dire au databind de ne pas htmlencodé le texte qu'il contient????
C'est ptéte pas trés propre mais en attendant je pense que ce n'est pas une solution a écarté...
Merci bien tu m'apporte beaucoup de nouvelles piste et en plus tu semble maitriser le sujet c cool...
Allé je quitte le taff a demain pour tester tout ca!!
Messages postés
195
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
13 juillet 2006
3
Tes pistes mon eclairées et j'ai enfin trouver une solution qui me convient
Je génére dynamiquement un detailsview comportant des boundcolumn avec la propriété htmlencode=false et ensuite j'associe ma table a ce detailsview
Resultat impec
ca fait plusieurs fois que tu me guide pour sortir de mes gros pb, merci bien pour ton aide