Bonjour,
J'appelle à votre aide, j'ai encore beaucoup de mal à me faire avec la syntaxe du Linq. Mon projet est de faire une dictionnaire de vidéo pour l'apprentissage du LSF (dans le style de sématos) pour mon usage perso.
Pour faire simple, j'ai décidé de mettre mes infos dans un fichier xml.
Voici mon code qui marche bien (affichage dans un répéteur, ajout et suppression dans le fichier xml)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 <?xml version="1.0" encoding="utf-8"?> <BDD> <Themes> <Theme Id="1"> <Libelle> Religion </Libelle> </Theme> <Theme Id="2"> <Libelle> Personnage </Libelle> </Theme> <Theme Id="3"> <Libelle> Sentiment </Libelle> </Theme> <Theme Id="4"> <Libelle> Animal </Libelle> </Theme> <Theme Id="5"> <Libelle> Date </Libelle> </Theme> <Theme Id="6"> <Libelle> Civilité </Libelle> </Theme> <Theme Id="7"> <Libelle>Mesure</Libelle> </Theme> </Themes> </BDD>
page aspx
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 Partial Class GestionVideo Inherits System.Web.UI.Page Dim doc As XDocument = Nothing Dim PathBdd As String = Server.MapPath("~/Data/Bdd.xml") Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load doc = XDocument.Load(PathBdd) If Not Page.IsPostBack Then BindThemes() End If End Sub #Region "Themes" Private Sub BindThemes() Dim qList = From xe As System.Xml.Linq.XElement In doc.Descendants.Elements("Themes").Elements("Theme") Select New With _ {.Id = xe.Attribute("Id").Value, _ .Libelle = xe.Element("Libelle").Value} 'Helper.GetLstTheme(doc) rptThemes.DataSource = qList.ToList rptThemes.DataBind() End Sub Protected Sub btnAddTheme_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles btnAddTheme.Click If txtId.Text.Trim.Length > 0 AndAlso txtLib.Text.Trim.Length Then doc = XDocument.Load(Server.MapPath("~/Data/Bdd.xml")) Dim qTargetDept As XElement = doc.Elements("BDD").FirstOrDefault Dim oEmp As New XElement("Theme") oEmp.Add(New XAttribute("Id", txtId.Text)) oEmp.Add(New XElement("Libelle", txtLib.Text)) qTargetDept.Element("Themes").Add(oEmp) doc.Save(PathBdd) BindThemes() txtId.Text = "" txtLib.Text = "" End If End Sub Protected Sub rptThemes_ItemCommand(source As Object, e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles rptThemes.ItemCommand If e.CommandName = "DEL" Then Dim qEmp As XElement = doc.Descendants.Elements("Themes").Elements("Theme").Where(Function(xe) xe.Attribute("Id").Value = e.CommandArgument).FirstOrDefault() qEmp.Remove() doc.Save(PathBdd) BindThemes() End If End Sub #End Region End Class
Maintenant, je souhaiterai mutualiser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 <%@ Page Language="VB" AutoEventWireup="false" CodeFile="GestionVideo.aspx.vb" Inherits="GestionVideo" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <link rel="stylesheet" type="text/css" href="CSS/MaCss.css" /> </head> <body> <form id="form1" runat="server"> <ajax:ToolkitScriptManager ID="ScriptManager1" runat="server"> </ajax:ToolkitScriptManager> <div> <asp:Panel ID="pnlClick" runat="server" CssClass="pnlCSS"> <asp:Label ID="lblMessage" runat="server" Text="Gestion des thèmes" /> <asp:Image ID="imgArrows" runat="server" /> </asp:Panel> <asp:Panel ID="pnlCollapsable" runat="server"> <table> <tr class="cpHeader"> <td> Id </td> <td> Libellé </td> <td> </td> </tr> <asp:Repeater ID="rptThemes" runat="server"> <ItemTemplate> <tr> <td> <%# Eval("Id") %> </td> <td> <%# Eval("Libelle") %> </td> <td> <asp:ImageButton ID="btnSupp" runat="server" ImageUrl="~/Images/Poubelle.png" CommandName="DEL" CommandArgument='<%# Bind("Id") %>'/> <ajax:ConfirmButtonExtender ID="confbtn" runat="server" TargetControlID="btnSupp" ConfirmText="Etes-vous sûr de vouloir supprimer cet élément?"> </ajax:ConfirmButtonExtender> </td> </tr> </ItemTemplate> <AlternatingItemTemplate> <tr> <td> <%# Eval("Id") %> </td> <td> <%# Eval("Libelle") %> </td> <td> <asp:ImageButton ID="btnSupp" runat="server" ImageUrl="~/Images/Poubelle.png" CommandName="DEL" CommandArgument='<%# Bind("Id") %>'/> <ajax:ConfirmButtonExtender ID="confbtn" runat="server" TargetControlID="btnSupp" ConfirmText="Etes-vous sûr de vouloir supprimer cet élément?"> </ajax:ConfirmButtonExtender> </td> </tr> </AlternatingItemTemplate> </asp:Repeater> <tr class="cpFooter"> <td> <asp:TextBox ID="txtId" runat="server"></asp:TextBox> </td> <td> <asp:TextBox ID="txtLib" runat="server"></asp:TextBox> </td> <td> <asp:ImageButton ID="btnAddTheme" runat="server" ImageUrl="~/Images/Plus.png" /> </td> </tr> </table> </asp:Panel> <ajax:CollapsiblePanelExtender ID="CollapsiblePanelExtender1" runat="server" CollapseControlID="pnlClick" Collapsed="true" ExpandControlID="pnlClick" TextLabelID="lblMessage" ImageControlID="imgArrows" CollapsedImage="~/Images/Fleche_Bas.jpg" ExpandedImage="~/Images/Fleche_Haut.jpg" ExpandDirection="Vertical" TargetControlID="pnlCollapsable" ScrollContents="false"> </ajax:CollapsiblePanelExtender> </div> </form> </body> </html>
Pour pouvoir réutilser dans plusieurs listes différentes sans devoir faire de l'aborieux copier/coller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Dim qList = From xe As System.Xml.Linq.XElement In doc.Descendants.Elements("Themes").Elements("Theme") Select New With _ {.Id = xe.Attribute("Id").Value, _ .Libelle = xe.Element("Libelle").Value}
Voici une tentative qui ne fonctionne pas (une parmi tant d'autre)
Dans fichier de class
Mesclass.vb
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Imports Microsoft.VisualBasic Public Class Helper 'Public Shared Function GetLstTheme(ByVal doc As XDocument) As List(Of MesClasses.Theme) ' Return (From xe As System.Xml.Linq.XElement In doc.Descendants.Elements("Themes").Elements("Theme") Select New With _ ' {.Id = xe.Attribute("Id").Value, _ ' .Libelle = xe.Element("Libelle").Value}).ToList 'End Function End Class
Merci d'avance, pour tout conseil!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Imports Microsoft.VisualBasic Public Class MesClasses 'Public Class Customer ' public int ID { get; set; ' public string Forename get; set; } ' public string Surname { get; set; } 'public string DOB { get; set; } ' public string Location { get; set; } ' End Class Public Class Theme Public Id As Integer Public Libelle As String End Class End Class
Partager