![]() |
|
|
|||||||
| .NET I detta forum diskuteras ämnen som berör .NET-plattformen, bland annat asp.net. |
![]() |
|
|
Trådverktyg | Visningsalternativ |
|
|
#1 |
|
Medlem
Registrerad: 2004-10-20
Ort: Ystad
Inlägg: 1 524
Lösningar: 37 |
Findcontrol() ifrån UC = nullExeption
Kod:
Partial Class custom_pager
Inherits System.Web.UI.UserControl
Public Sub Page_Load(ByVal obj As Object, ByVal e As EventArgs) Handles MyBase.Load
Dim lbl As Label = CType(Page.FindControl("msg"), System.Web.UI.WebControls.Label)
lbl.Text = "Raggadaggadooom!"
End Sub
End Class
I verkligheten så hade jag tänkt att hämta controllens id med "me.parent.id" men bara som ett test så försökte jag mig på detta. Hur gör jag?
__________________
Qui rogat, non errat |
|
|
|
|
|
Markerad som löst av Travoni #2 |
|
Medlem
Registrerad: 2004-10-20
Ort: Ystad
Inlägg: 1 524
Lösningar: 37 |
mmm, jag var tvungen att köra en rekursiv funktion...
Kod:
Public Overloads Overrides Sub DataBind()
Dim lbl As Label = CType(FindControlByID(Page.Controls, "msg"), Label)
If TypeOf lbl Is Label Then
lbl.Text = "Raggadaggadooom!"
End If
MyBase.DataBind
End Sub
Public Function FindControlByID(ByVal controls As ControlCollection, ByVal id As String) As Control
Dim found As Control = Nothing
For Each control As Control In controls
If control.HasControls Then
found = FindControlByID(control.Controls, id)
If Not (found Is Nothing) Then
' break
End If
End If
If control.ID = id Then
found = control
' break
End If
Next
Return found
End Function
__________________
Qui rogat, non errat Senast redigerad av Travoni, 2006-10-16 klockan 18:48 |
|
|
|
|
|
#3 |
|
Medlem
Kalebass Registrerad: 1999-12-09
Ort: Norrköping
Inlägg: 6 095
Lösningar: 1232 |
Flytta upp kontrollen
" If control.ID = id Then" ovanför den andra if-satsen, så lär prestanda bli rätt så mycket bättre, om du dessutom "return control" på en gång. Man kan också tänka sig att använda vanliga FindControl inne i loopen, eftersom den internt arbetar mot en snabb Hashtabell. |
|
|
|
|
|
#4 |
|
Medlem
Registrerad: 2004-10-20
Ort: Ystad
Inlägg: 1 524
Lösningar: 37 |
Ok, jag hajjar, bra för en annan gång.
Jag tänkte göra en vanlig UC och använda som templateelement i en grid, men kom på att jag skall göra en iTemlate i stället, vilket är betydligt bättre för mitt ändamål.
__________________
Qui rogat, non errat |
|
|
|
|
|
#5 |
|
Medlem
Registrerad: 2004-05-09
Inlägg: 356
Lösningar: 5 |
Någon som snabbt bara kan skriva om funktionerna till C#?
|
|
|
|
|
|
#6 |
|
Medlem
Registrerad: 2004-10-20
Ort: Ystad
Inlägg: 1 524
Lösningar: 37 |
Bokmärk: http://www.developerfusion.co.uk/uti...btocsharp.aspx
Kod:
public override void DataBind()
{
Label lbl = ((Label)(FindControlByID(Page.Controls, "msg")));
if (lbl is Label) {
lbl.Text = "Raggadaggadooom!";
}
base.DataBind();
}
public Control FindControlByID(ControlCollection controls, string id)
{
Control found = null;
foreach (Control control in controls) {
if (control.HasControls) {
found = FindControlByID(control.Controls, id);
if (!((found == null))) {
}
}
if (control.ID == id) {
found = control;
}
}
return found;
}
__________________
Qui rogat, non errat |
|
|
|
|
|
#7 |
|
Medlem
Kalebass Registrerad: 1999-12-09
Ort: Norrköping
Inlägg: 6 095
Lösningar: 1232 |
Men hellre:
Kod:
public override void DataBind()
{
Label lbl = FindControlByID(Page.Controls, "msg") as Label;
if (lbl!=null) {
lbl.Text = "Raggadaggadooom!";
}
base.DataBind();
}
public Control FindControlByID(ControlCollection controls, string id)
{
Control found = null;
foreach (Control control in controls) {
if (control.ID == id) {
return control;
}
if (control.HasControls) {
found = FindControlByID(control.Controls, id);
if (found != null) {
return found;
}
}
}
return found;
}
__________________
"Leksak ansvarig till vara rensade med vätska de/vi/du/ni är till vara avbröt från omskapare framför rensningen" Senast redigerad av emission, 2007-05-15 klockan 17:06 |
|
|
|
|
|
#8 |
|
Medlem
Registrerad: 2001-01-11
Ort: Sthlm
Inlägg: 2 997
Lösningar: 4 |
Buggrättning
[kod] public override void DataBind() { Label lbl = FindControlByID(Page.Controls, "msg") as Label; if (lbl!=null) { lbl.Text = "Raggadaggadooom!"; } base.DataBind(); } public Control FindControlByID(ControlCollection controls, string id) { Control found = null; foreach (Control control in controls) { if (control.ID == id) { return control; } if (control.HasControls()) { found = FindControlByID(control.Controls, id); if (found != null) { return found; } } } return found; }
__________________
Andreas |
|
|
|
![]() |
| Trådverktyg | |
| Visningsalternativ | |
|
|