icaaqMedlem sedan okt. 20005 273 inlägg Ett problem fixat....det första löste jag så här
[red][font=courier]
<asp:datalist id="DataList1" runat="server" cssclass="poll" cellpadding="4" OnItemCreated="R1_ItemCreated" >
<headertemplate>
<asp:label id="Label1" runat="server" cssclass="underline"/>
</headertemplate>
[/font][/red]
Och sedan kör jag denna för att kolla om det är rätt label...
[red][font=courier]
public void R1_ItemCreated(Object Sender, DataListItemEventArgs e)
{
poll myPoll = new poll();
myPoll.Open();
string Question = myPoll.Question.ToString();
// Loop through and get all the controls
foreach(Control ctrl in e.Item.Controls)
{
// Did we get a Web Control
Label lbl1 = (Label)e.Item.FindControl("Label1");
// If the lbl1 is null it's not our label
if(lbl1 != null)
{
lbl1.Text = Question;
}
}
}
[/font][/red]
Nu skulle jag bara vilja ha hjälp med den andra frågan :l
PatrikBMedlem sedan mars 20002 836 inlägg Har denna koden (testkod):
Dim AuthorTemp As String
Sub Page_Load(Sender As Object, E As EventArgs)
Dim _skin As String = "default.ascx"
Dim ConnectionString As String = "server=(local);database=pbGuestbook;trusted_connection=true"
Dim _book As New Guestbook(ConnectionString)
_book.LoadEntries()
'## - get rid. only for testing --
If _book.Messages.count > 0 Then
AuthorTemp = _book.Messages(0).Author
End If
'## -- end get rid --
dgGuestbook.DataSource = _book.Messages
dgGuestbook.DataBind()
.... etc.
innanför script taggarna
sedan i min footer:
<FooterTemplate>
<% =AuthorTemp%>
</FooterTemplate>
funkar fin fint
cya,
PatrikB
NETworkMedlem sedan juni 20011 732 inlägg Jag är iofs ganska säker på att du kan skriva typ:
((Label)DataList1.Controls[0].Controls[0]).Text = "blah";
...för att komma åt din label i din header. Så slipper du en loop menar jag. :) Eller har du testat det utan att få det att funka? Funkar för mig här...
Fråga B vill även jag ha svar på, även om PatrikBs förslag säkert funkar så kommer säkert den dagen då man vill ha tag på en riktig kontroll där. Ska testa mer lite senare, eller om du löser det först Icaaq, du brukar ju svara så bra på dina egna frågor! :)
icaaqMedlem sedan okt. 20005 273 inlägg Tack PatrikB detta funkade precis som vag ville.......så jag gjorde så på headertemplate´n med ......Jag insåg att det var lite overkill att lägga frågan i en label....
Tack igen
mvh icaaq
NETworkMedlem sedan juni 20011 732 inlägg icaaqMedlem sedan okt. 20005 273 inlägg
NETwork skrev:
Jag är iofs ganska säker på att du kan skriva typ:
((Label)DataList1.Controls[0].Controls[0]).Text = "blah";
Jag testade med din kod men jag får bara
Specified argument was out of the range of valid values. Parameter name: index
Så jag får det inte att funka ......kanske man kunde få se lite av din fungerande kod NETwork?
mvh icaaq
NETworkMedlem sedan juni 20011 732 inlägg Detta verkar vara det rätta sättet att lösa det på:
private void testa(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
//Om vi är i headerrn:
if (e.Item.ItemType == ListItemType.Header) {
// ...så kör du en findcontrol på ditt DataGridItemEvent:
((Label)e.Item.FindControl("test")).Text = "TJO!";
}
}
Fungerar lika bra på footern, en alternatingItem eller någon annan del i din datagrid!
icaaqMedlem sedan okt. 20005 273 inlägg Men då måste jag sätta in OnItemCreated="testa" i min <asp:datalist> eller ?
NETworkMedlem sedan juni 20011 732 inlägg Glöm det där med controls[0].Controls[0], den är troligtvis beroende av en mängd faktorer, jag hade nog mest tur som hittade den just där... försök med koden ovan istället!
Redigerat: Jag tror att en headertemplate är en kontroll (inte ett item) precis som din label. Eftersom headern är den första kontrollen så finns den följdaktligen här myDatagrid.Controls[0] - alltid. I denna kan du sedan ha kontroller... som då blir Controls[0].Controls[0] den första kontrollen i din headeritemcontrol... jag tror det funkar så iaf.
NETworkMedlem sedan juni 20011 732 inlägg
icaaq skrev:
Men då måste jag sätta in OnItemCreated="testa" i min <asp:datalist> eller ?
Du använder inte codebehind/vs.net?
Nej, jag tror att du ska skriva onItemDataBound="FunktionensNamn" (i din datagrid alltså). Och då kan du nog inte ha funktionen private heller... sätt den till public. Med vs.net skriver du bara funktionens namn på raden ItemDataBound under dina events på din datagrid och trycker på enter så skapas funktionen automatiskt!
<asp:DataGrid id="myDataGrid" onItemDataBound="myFunction" Runat=Server>
public void myFunction(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
//Om vi är i headerrn:
if (e.Item.ItemType == ListItemType.Header) {
// ...så kör du en findcontrol på ditt DataGridItemEvent:
((Label)e.Item.FindControl("myLabel")).Text = "TJO!";
}
}
icaaqMedlem sedan okt. 20005 273 inlägg Jo, jag använder cb/vs.net
Men om jag ska sätta mig i "design view" på min aspx sida får jag
Could not open in design view. Quote values differently inside a '<% ... value ...%>' block
hmmm ska kolla lite på asp.net hur jag kan få bort det.....
NETworkMedlem sedan juni 20011 732 inlägg DÅ har du fel (alltså ojämnt) antal " i dina kodblock ... har du mycket kod på sidan så kan det vara som att leta efter en nål i en höstack... ;)
icaaqMedlem sedan okt. 20005 273 inlägg Är det bara inom mina template´s eller på hela sidan :q
NETworkMedlem sedan juni 20011 732 inlägg Jaa... inom eller runt dina <%# %> alltså.
icaaqMedlem sedan okt. 20005 273 inlägg Jag ser inget fel....
[red]
<asp:datalist id="DataList1" runat="server" cssclass="poll" cellpadding="4" >
<headertemplate>
<span class="underline"><asp:label id="myLabel" /></span>
</headertemplate>
<ItemTemplate>
·<asp:linkbutton commandargument="<%#DataBinder.Eval(Container.DataItem, "pk_id", "{0:G}")%>" onclick="vote" runat="server" cssclass="four"><%# DataBinder.Eval(Container.DataItem, "f_answ", "{0:G}") %>:</asp:linkbutton><span class="percent"><%# MakePercent(DataBinder.Eval(Container.DataItem, "f_hits", "{0:G}"), DataBinder.Eval(Container.DataItem, "NoOfAnswers", "{0:G}"))%></span></td>
<tr>
<td>
<table class="bar" cellspacing="0">
<tr>
<td class="bar" width="<%# MakePercent(DataBinder.Eval(Container.DataItem, "f_hits", "{0:G}"), DataBinder.Eval(Container.DataItem, "NoOfAnswers", "{0:G}"))%>"><img src="images/nocansee.png"></td>
<td class="barend"><img src="images/barend.png" align="top"></td>
</tr>
</table>
</ItemTemplate>
<footertemplate>
Totalt antal röster: <span class="bold"></span>st
</footertemplate>
</asp:datalist>[/red]
Kan nån se vad som är fel :)
mvh icaaq
NETworkMedlem sedan juni 20011 732 inlägg Du kan inte ha " både runt dina kodblock och i dem. Då avslutas ditt kodblock vid första " i denna, alltså innan pk_id...
CommandArgument='<%#DataBinder.Eval(Container.DataItem, "pk_id", "{0:G}")%>'
icaaqMedlem sedan okt. 20005 273 inlägg Så hädanefter är det singelfnuttar som gäller..... :o
NETworkMedlem sedan juni 20011 732 inlägg Japp!
Vänta du tills du behöver tre nivåer... då får du problem. Har för mig att vi löste det på nåt sätt genom att skicka tillbaka till en funktion som bytte ut dem mot något annat som växlade tillbaka dem igen i ett javascript... hua. Nåja, det var nåt special special som antagligen borde ha gjorts på ett mycket mycket bättre sätt! ;)
Får du det att fungera förresten? Hittar du dina kontroller i footern och headern?
icaaqMedlem sedan okt. 20005 273 inlägg Det gör jag säkert.....Jag måste först lämmna barnen på dagis sen ska jag ge mig på det igen.......*återkommer*
icaaqMedlem sedan okt. 20005 273 inlägg Det funkade.....tack så mycket.......Jag ska fina till koden lite sen får ni se resultatet.....