Bonjour,
J'ai réaliser une "double listview" dont voici le code :
Mon but est que lorsque l'utilisateur survole une ligne de la liste, celle-ci se développe (cad la 2eme listview apparait).
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 <asp:ListView ID="lvNiv0" runat="server" ItemPlaceholderID="itemPlaceHolder" OnItemDataBound="lvNiv0_ItemDataBound"> <LayoutTemplate> <table id="tabNiv0" width="90%" class="CUListHeader" cellspacing="0"> <tr> <th align="center">Client</th> <th align="center">Code Tiers</th> <th align="center">Secteur</th> <th align="center">ID</th> </tr> <tr id="itemPlaceHolder" runat="server"></tr> </table> </LayoutTemplate> <ItemTemplate> <tr id="myRow" runat="server" style="border:1px solid black"> <td align="center" style="width:40%"><asp:Label ID="lbN0Client" runat="server" Text='<%#Eval("Client") %>'></asp:Label></td> <td align="center" style="width:25%"><asp:Label ID="lbN0Code" runat="server" Text='<%#Eval("Code")%>'></asp:Label></td> <td align="center" style="width:25%"><asp:Label ID="lbN0Secteur" runat="server" Text='<%#Eval("Secteur")%>'></asp:Label></td> <td align="center" style="width:10%"><asp:Label ID="lbN0RCS" runat="server" Text='<%#Eval("ID")%>'></asp:Label></td> </tr> <asp:ListView ID="lvNiv1" runat="server" ItemPlaceholderID="itemPlaceHoder2" OnItemDataBound="lvNiv1_ItemDataBound"> <LayoutTemplate> <tr id="itemPlaceHoder2" runat="server"></tr> </LayoutTemplate> <ItemTemplate> <tr id="myRow2" runat="server"> <td align="center" style="width:25%"><asp:Label ID="lbN1Ctr" runat="server" Text='<%#Eval("Lib")%>'></asp:Label></td> <td align="center" style="width:25%"><asp:Label ID="lbN1Inge" runat="server" Text='<%#Eval("Inge")%>'></asp:Label></td> <td align="center" style="width:25%"><asp:Label ID="lbN1Debut" runat="server" Text='<%#Eval("Debut", "{0:dd/MM/yyyy}") %>'></asp:Label></td> <td align="center" style="width:25%"><asp:Label ID="lbN1Fin" runat="server" Text='<%#Eval("Fin", "{0:dd/MM/yyyy}")%>'></asp:Label> </td> </tr> </ItemTemplate> </asp:ListView> </ItemTemplate> </asp:ListView>
En faisant tout avec le code-behind et l'event click sur les lignes, cela fonctionne parfaitement.
Cependant, j'aurai aimer faire ca avec l'event "onmouseover" ( survole de la souris ) mais surtout SANS postback ( j'ai horreur de ca)
Voila comment je fait en code behind :
Mon but est de pouvoir changer la classe des lignes de la 2nd listview (lvNv1) via JavaScript coté client.
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 protected void lvNiv0_ItemDataBound(object sender, ListViewItemEventArgs e) { HtmlTableRow tr = (HtmlTableRow)e.Item.FindControl("myRow"); //tr.Attributes["onmouseover"] = "return ShowOrHide(" + e.Item.FindControl("lvNiv1").ClientID + ")"; tr.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.lvNiv0, e.Item.DataItemIndex.ToString()); Label lb = (Label)tr.FindControl("lbN0RCS"); short idClt = short.Parse(lb.Text); ListView mylvN1 = (ListView)e.Item.FindControl("lvNiv1"); MISEntities MIS = new MISEntities(); var query = from ctr in MIS.Contrat_Client // remplissage de la 2nd listview where ctr.ID_Client == idClt // en fonction de la ligne à laquelle elle est rataché select new { Lib = ctr.Libelle, Inge = ctr.Inge_Commercial, Debut = ctr.Date_Debut, Fin = ctr.Date_Fin }; mylvN1.DataSource = query; mylvN1.DataBind(); } protected void lvNiv1_ItemDataBound(object sender, ListViewItemEventArgs e) { HtmlTableRow tr = (HtmlTableRow)e.Item.FindControl("myRow2"); tr.Attributes.Add("class", "HideThis"); } private void lvNiv0Click(string param) // se declenche lorsque l'on click sur une ligne { lvNiv0.SelectedIndex = int.Parse(param); ListViewItem item = lvNiv0.Items[lvNiv0.SelectedIndex]; ListView lv = (ListView)item.FindControl("lvNiv1"); for (int i = 0; i < lv.Items.Count; i++) { HtmlTableRow tr = (HtmlTableRow)lv.Items[i].FindControl("myRow2"); //voila ce que je voudrai atteindre en JavaScript if (tr.Attributes["class"] == "HideThis") { tr.Attributes.Remove("class"); } else tr.Attributes.Add("class", "HideThis"); } }
Merci.
Partager