Single und Double Click mit Datalist

08/10/2007 - 16:05 von Jens Wefer | Report spam
hey all,

ich bin nach folgendem Beispiel vorgegangen:
http://www.codeproject.com/aspnet/D...iewRow.asp

ich hab das schon mit mehrmals mit griedview's gemacht,
sowohl auf einer Page als auch im user-control.
nun hab ich das mit einer Datalist (dynamisches UserControl) gemacht.
klappt auch wunderbar, nur wenn ich eine Zeile angeklickt habe
verliert die Zeile das Client-Script für onclick,
d.h. ich kann diese zeile nicht nochmal anklicken,
ich muesste vorher eine andere zeile anklicken.
siehe Seitenquelltext der asp.net seite,
da fehlt in der 2.zeile der javascript aufruf.
irgendjmd eine Idee woran das liegen könnte?

bye, jens.

//snip>>>>>>>>>>>>>>>>>>>>>>>>>>>
<table id="ctl00_ContentPlaceHolderLeft_ctl00_DataList1" cellspacing="0"
border="0" style="width:400px;border-collapse:collapse;">
<tr>
<td style="color:White;background-color:#6B696B;font-weight:bold;">
</td>
</tr><tr>
<td
style="background-color:#F7F7DE;border-color:LightGrey;border-width:1px;border-style:Solid;">
<div
onclick="javascript:setTimeout(&quot;__doPostBack('ctl00$ContentPlaceHolderLeft$ctl00$DataList1$ctl01$ctl00','')&quot;,
300)"
ondblclick="javascript:__doPostBack('ctl00$ContentPlaceHolderLeft$ctl00$DataList1$ctl01$ctl01','')">
<span style="float:left;">
<span>Musterfrau, Anna</span>
</span>
</div>
</td>
</tr><tr>
<td
style="background-color:#CE5D5A;border-color:LightGrey;border-width:1px;border-style:Solid;">
<div>
<span style="float:left;">
<span>weber, angua</span>
</span>
</div>
</td>
//snap>>>>>>>>>>>>>>>>>>>>>>>>>>>

//snip>>>>>>>>>>>>>>>>>>>>>>>>>>>
<asp:DataList ID="DataList1" runat="server"
DataSourceID="odsCOAList"
OnItemDataBound="DataList1_ItemDataBound"
OnItemCommand="DataList1_ItemCommand"
Width="400px" >
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton runat="server" Text="SingleClick"
CommandName="SingleClick" Visible="false"/>
<asp:LinkButton runat="server" Text="DoubleClick"
CommandName="DoubleClick" Visible="false"/>
<asp:Panel runat="server">
<asp:Label ID="PatientID" runat="server" Text='<%#
Eval("Id") %>' Visible="false"></asp:Label>
<span style="float:left;">
<asp:Label runat="server" Text='<%# Eval("Name") %>'

</asp:Label>


</span>
<asp:Label runat="server" Text='<%# Eval("Date") %>'
Visible="false"></asp:Label>
</asp:Panel>
</ItemTemplate>
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White"
/>
<ItemStyle BackColor="#F7F7DE" BorderStyle="Solid"
BorderColor="lightgray" BorderWidth="1px" />
<AlternatingItemStyle BackColor="white" />
<SelectedItemStyle BackColor="#CE5D5A" />
</asp:DataList>
//snap<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

//snip>>>>>>>>>>>>>>>>>>>>>>>>>>>
protected void DataList1_ItemDataBound(object sender,
DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
//Add eventhandlers for highlighting
//a DataListItem when the mouse hovers over it.
e.Item.Attributes.Add("onmouseover",
"this.oldClass = this.className;" +
" this.className = 'EntryLineHover'");
e.Item.Attributes.Add("onmouseout",
"this.className = this.oldClass;");
//Add eventhandler for simulating
//a click on the 'SelectButton'
e.Item.Attributes.Add("onclick",
this.Page.ClientScript.GetPostBackEventReference(
e.Item.Controls[1], string.Empty));
}
}
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
ListItemType.AlternatingItem)
{
// Get the first LinkButton control
LinkButton _singleClickButton = (LinkButton)e.Item.Controls[1];
// Get the javascript which is assigned to this LinkButton
string _jsSingle =
Page.ClientScript.GetPostBackClientHyperlink(_singleClickButton, "");
// To prevent the first click from posting back immediately
// (therefore giving the user a chance to double click)
pause the
// postback for 300 milliseconds by using setTimeout
_jsSingle = _jsSingle.Insert(11, "setTimeout(\"");
_jsSingle += "\", 300)";
// Get the panel wrapping the item
Panel itemPanelSingle = (Panel)e.Item.Controls[5];
// Add this javascript to the onclick Attribute of the panel
itemPanelSingle.Attributes["onclick"] = _jsSingle;

// Get the second LinkButton control
LinkButton _doubleClickButton = (LinkButton)e.Item.Controls[3];
// Get the javascript which is assigned to this LinkButton
string _jsDouble =
Page.ClientScript.GetPostBackClientHyperlink(_doubleClickButton, "");
// Get the panel wrapping the item
Panel _itemPanelDouble = (Panel)e.Item.Controls[5];
// Add this javascript to the ondblclick Attribute of the panel
_itemPanelDouble.Attributes["ondblclick"] = _jsDouble;
}

//snap<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
08/10/2007 - 21:07 | Warnen spam
Hallo Jens,

"Jens Wefer" schrieb

klappt auch wunderbar, nur wenn ich eine Zeile angeklickt habe
verliert die Zeile das Client-Script für onclick,
d.h. ich kann diese zeile nicht nochmal anklicken,
ich muesste vorher eine andere zeile anklicken.



Könntest Du das mal als lauffàhiges Beispiel online stellen, damit man
sich das mal anschauen kann? So wird man da nicht wirklich schlau draus.

Alternativ erstell eine neue Seite und füge dort _nur_ den Code ein, den
man zum reproduzieren des Problems wirklich benötigt (also alles raus,
was nichts damit zu tun hat, bspw. Attribute, Stylesheets, ...)

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen