Listview imbriqué et Javascript
Bonjour,
J'ai réaliser une "double listview" dont voici le code :
Code:
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> |
Mon but est que lorsque l'utilisateur survole une ligne de la liste, celle-ci se développe (cad la 2eme listview apparait).
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 :aie: )
Voila comment je fait en code behind :
Code:
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");
}
} |
Mon but est de pouvoir changer la classe des lignes de la 2nd listview (lvNv1) via JavaScript coté client.
Merci.