Selectsinglenode avec conditions

Résolu
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009 - 19 mai 2009 à 17:12
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009 - 20 mai 2009 à 17:25
Bonjour a tous,

Voila mon souci, jusqu'à maintenant, pour trouver un nœud précis dans mon xml, je parcourais toute la table, mais je commence a avoir beaucoup de donner et je voudrais qu'au lieu de tout parcourir, je ne sélectionne que le noeud qui correspond à mes paramètres, j'ai tenté ça:

'déclarations
            nodes = xmlDoc.SelectNodes("/EC_TABLE")

            Dim nod As XmlElement
            nod = xmlDoc.SelectSingleNode("/TABLE[@TA='" & contact & "']")

et mon XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<EC_TABLE>
  <TABLE TA="1" TI="titi" TO="" TU="" />
...

je voudrais selectionner que le noeud ou le ta est egal à mon contact, soit 1 par exemple.
ou est le problème?

Merci d'avance.

18 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2009 à 05:12
la racine.

nodes, ici ne te sert pas.

quant à nod, tu le fais partir de xmldoc. Il te faut donc inclure EC_TABLE dans la requete:

Dim nod As XmlElement
nod = xmlDoc.SelectSingleNode("EC_TABLE/TABLE[@TA='" & contact & "']")
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2009 à 09:13
la syntaxe avec les [] est propre aux requetes XPath.
une fois le noeud retrouvé, faut jouer avec ce que propose ton objet nod.

je lance Visual Studio
je presse F2
je cherche 'XmlElement'
je parcoures ce qui m'est proposé... Attributes
je vois que XmlAttributeCollection me propose GetNamedItem

nod.Attributes.GetNamedItem("TA").Value = contact

devrait donc mieux convenir.


pratique, l'explorateur d'objets ^^
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2009 à 14:32
possible, peut etre mettre une case a cocher "Je confirme la suppression ... irreversible ..."

et zou, l'utilisateur ayant coché cette case... le clic sur le bouton delete n'est pas accidentel.
3
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009
20 mai 2009 à 08:42
OK, je te remercie beaucoup.

Et quand j'ai séléctionner mon noeud, je voudrais modifier un de ses attributs.
Est-ce que je peux faire quelque chose comme:
nod.attributes[tata = contact]  ?
parce que ça ne marche pas....

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009
20 mai 2009 à 11:20
ah oui d'accord,

J'ai tenté ça aussi et ça marche plutôt bien, qu'en pense-tu?

For index = 0 To GridView1.Rows.Count - 1
            ICheckbox = CType(GridView1.Rows(index).Cells(0).Controls(1),System.Web.UI.WebControls.CheckBox)
            If ICheckbox.Checked = True Then
                nod = xmlDoc.SelectSingleNode("/EC_TABLE/TABLE[@TA_NUME='" & GridView1.Rows(index).Cells(3).Text & "']")
                nod.ParentNode.RemoveChild(nod)
            End If
        Next

Et juste une dernière question.

Je voudrais qu'avant de supprimer, j'ai un message de confirmation, j'ai donc écris du coté du code vb:

            Dim reponse As Integer
            reponse = MsgBox("voulez-vous supprimer l'index n°" & contact & "? ", MsgBoxStyle.YesNo, MessageBoxDefaultButton.Button2)

Bien sur, une fois le code posé sur le serveur, ma messagebox ne fonctionne pas, voici le message d'erreur:

L'affichage d'une boîte de dialogue modale ou d'un formulaire lorsque
l'application ne s'exécute pas en mode UserInteractive n'est pas une opération
valide. Spécifiez le style ServiceNotification ou DefaultDesktopOnly pour
afficher une notification à partir d'une application de service.

Quelle solution je peux avoir pour mettre une boite de dialogue sans que ça pose problème?
0
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009
20 mai 2009 à 11:23
ah, excuse, pour la première partie de ma réponse, j'ai répondu un peu a côté, lol.

Je vais tenté ce que tu m'a dis, merci.

En tout cas, si tu as une solution pour ma message box?

Merci
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2009 à 11:25
pas mal, mais testes bien que nod a bien été trouvé.

If ICheckBox.Checked True Then
True inutile ici, Checked renvoyant deja un Boolean...

MsgBox => c'est du VB6, utilises Messagebox.Show
(qui ne renvoie pas un Integer, gaffe)



concernant ton message, fait ce qu'il te dit ^^ change le parametre réclamé.
0
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009
20 mai 2009 à 11:37
Quand tu dis:
"concernant ton message, fait ce qu'il te dit ^^ change le parametre réclamé."

je veux bien mais je ne comprend pas quels paramètres je dois changer...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2009 à 11:44
je lance visual studio
je presse F2
je cherche, par exemple: DefaultDesktopOnly

je trouve System.Windows.Forms.MessageBoxOptions

ca a donc un rapport direct avec les MessageBox
en fouinant encore un peu, je trouve:

Public Const DefaultDesktopOnly As System.Windows.Forms.MessageBoxOptions = 131072
Membre de : System.Windows.Forms.MessageBoxOptions
Résumé :
La zone de message est affichée sur Active Desktop.



a tester, donc:

If Messagebox.Show("Voulez-vous vraiment...","Suppression de ....", MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2,MessageBoxOptions.DefaultDesktopOnly,False) = DialogResult.Yes Then
........
End If
0
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009
20 mai 2009 à 13:36
ok mais y'a rien qui s'affiche avec ta solution. 
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2009 à 13:54
le message d'erreur non plus :p

euh... ca doit le loguer ce message, vachement utile... (j'avais un doute, lisant la description)

c'est quel genre d'appli que tu as qui refuse l'affichage d'un msgBox ?

"System.Web.UI.WebControls"

un lien avec le fait que ton appli joues avec des choses Web.... (t'es pas en WinForm ?)
0
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009
20 mai 2009 à 14:01
non, c'est pas winform.

Je te montre ma fonction:

Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
        Dim index As Integer = Convert.ToInt32(e.CommandArgument)
        'MsgBox("supprimer : " & index)

        Dim selectedRow As GridViewRow = GridView1.Rows(index)
        Dim contactCell As TableCell = selectedRow.Cells(3)
        Dim contact As String = contactCell.Text

        If e.CommandName = "supprimer" Then
            Response.Write("You selected " & contact & ".
")
            xmlDoc.Load(fichier)

            'déclarations
            'nodes = xmlDoc.SelectNodes("/EC_TABLE")

            Dim nod As XmlElement
            nod = xmlDoc.SelectSingleNode("/EC_TABLE/TABLE[@TA_NUME='" & contact & "']")

            'recherche de l'élément
            'MsgBox(nod.Attributes.ItemOf(0).Value)

            Dim reponse As Integer
            reponse = MessageBox.Show("voulez-vous supprimer l'index n°" & contact & "? ", " Confirmation ", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)
            If reponse = MsgBoxResult.Yes Then
                nod.ParentNode.RemoveChild(nod)
            End If

            xmlDoc.Save(fichier)
            Response.Redirect("http://Intranet2:8282/accueil.aspx")
        End If
        If e.CommandName = "modifier" Then
            xmlDoc.Load(fichier)
            Dim nod As XmlElement
            nod = xmlDoc.SelectSingleNode("/EC_TABLE/TABLE[@TA_NUME='" & contact & "']")

            'recherche de l'élément
            'MsgBox(nod.Attributes.ItemOf(0).Value)

        End If
    End Sub

Et en effet, y'a rien qui s'affiche, même pas un message d'erreur....
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2009 à 14:08
Dim reponse As Integer
faire plutot
Dim reponse As MsgBoxResult
tout simplement.


en tapant:
webform msgbox

dans google, on lit partout qu'on ne peux pas. que les msgbox sont dans des Winforms, point barre.

te faut jouer autrement
0
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009
20 mai 2009 à 14:14
Un exemple?
0
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009
20 mai 2009 à 15:20
Oui tu as raison, je vais faire tout ça avec des checkbox, c'est aussi joli et c'est pratique.

Je n'y avais pas pensé.

En tout cas je te remercie pour ton aide qui m'a vraiment été utile.
0
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009
20 mai 2009 à 16:27
Ben en fait j'ai vraiment besoin d'une message box ou de qqchose qui y ressemble...
T'as pas une autre solution?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2009 à 16:32
afficher un truc web... avec un lien de confirmation...
(te permettra de faire un truc joli)

ou jouer avec un message de confirmation javascript...


regarde ce que propose google, plein de gens cherchent des MsgBox en WebForm...
0
cs_tortuedu74 Messages postés 99 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 27 mai 2009
20 mai 2009 à 17:25
ok merci.
Je te souhaite un bon week end.

A +
0
Rejoignez-nous