Just nu i M3-nätverket
Gå till innehåll

Vill ha referens till huvudsidan från en web user control.


niclascolleen

Rekommendera Poster

niclascolleen

Hej alla glada!

 

Jag har ett problem med en textbox som ligger i min web user control.

 

När eventen/funktionen txtRowAmount_TextChanged anropas på kontrollen så vill jag ha hämta innehållet från en textbox på själva huvudsidan.

 

Går detta? Skulle vilja skriva typ;

 

strSupplier = MainPage.txtSupplier.Text

 

MVH

Niclas

 

Länk till kommentar
Dela på andra webbplatser

En kontroll ska inte anropa objekt utanför sin egen klass. Skapa istället en Public Property i kontrollen till vilken du skickar in värdet från MainPage.

 

Länk till kommentar
Dela på andra webbplatser

niclascolleen

Tack för snabbt svar.

 

Jag har dock problemet att det är först när man ändrar texten i webbkontrollen som jag vill läsa av innehållet i textboxen från huvudsidan.

 

Går detta att känna av från huvudsidan?

 

Länk till kommentar
Dela på andra webbplatser

Du kan definiera ditt eget event som du exponerar utåt.

 

1) I din webbkontrollklass, deklarera först:

    Public Event RowAmountChanged()

 

2) I procedure txtRowAmount_TextChanged lägg till:

RaiseEvent RowAmountChanged()

 

3) Nu kan du från ditt huvudformulär lägga till funktionen

Private Sub  ctrlDinWebbKontroll_RowAmountChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctrlDinWebbKontroll.RowAmountChanged

 

där du då kan skicka in värdet i kontrollen. Gör detta via en publik funktion i kontrollen, ex. ctrlDinWebbKontroll.DoSomething(txtSupplier.Text)

 

4) Lägg till i kontrollen denna funktion:

Function DoSomething(ByVal sSupplier)
 ' Gör något med värdet
End Function

[inlägget ändrat 2004-10-14 17:36:30 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

niclascolleen

Det var en helt pefekt idé, jag får det bar ainte riktigt att fungera, jag har lagt in koden enligt följande:

 

WebForm:

<kod>

Protected WithEvents ctrlDinWebbKontroll As WebUserControl2

 

Private Sub ctrlDinWebbKontroll_RowAmountChanged() Handles ctrlDinWebbKontroll.RowAmountChanged

ctrlDinWebbKontroll.setSupplierID("10000")

End Sub

</kod>

 

och i

 

Web control:

<kod>

Public Event RowAmountChanged()

 

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

RaiseEvent RowAmountChanged()

End Sub

 

Function setSupplierID(ByVal sSupplier)

TextBox2.Text = sSupplier

End Function

</kod>

 

Vore hemskt tacksam (och glad!) om du kunde svara på varför det inte fungerar?

MVH Niclas

 

Länk till kommentar
Dela på andra webbplatser

Pröva att deklarera kontrollen som Friend samt lägg till Public framför setSupplier:

 

[color="#0000ff"]Friend [/color]WithEvents ctrlDinWebbKontroll As WebUserControl2
....
[color="#0000ff"]Public [/color]Function setSupplierID(ByVal sSupplier)

 

[inlägget ändrat 2004-10-15 11:37:09 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

niclascolleen

Hej igen!

 

Har du fortfarande tid så;

 

Det konstiga är att om jag sätter ut brytpunkter överallt så stannar han aldrig i

Public Sub ctrlDinWebbKontroll_RowAmountChanged() Handles ctrlDinWebbKontroll.RowAmountChanged
	ctrlDinWebbKontroll.setSupplierID("10000")
End Sub

Det känns som om raiseevent inte biter?

Har du något förslag?

MVH Niclas

 

Länk till kommentar
Dela på andra webbplatser

Det känns som om raiseevent inte biter?

 

Hm, jag måste erkänna att jag aldrig testat detta i ASP.net miljö utan enbart i Windowssystem. Vanliga kontroller måste i ASP.Net ha AutoPostBack satt till true,vad jag förstått, för att händelser ska skickas till serverna automatiskt. Har du denna parameter satt i din kontroll?

 

Länk till kommentar
Dela på andra webbplatser

niclascolleen

Jovars, autopostback är satt till true, debuggern går in i funktionen

	Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
	RaiseEvent RowAmountChanged()
End Sub

 

Den går bara inte in i raiseeventet, utan ner på end sub och sen har den debuggat färdigt. Men jag får ju inga felmedellanden.

Har jag kanske missat ngn import fil?

 

Länk till kommentar
Dela på andra webbplatser

Hm, jag har ingen bra kod att testa med själv. Om du vill får du gärna maila webbkontrollfilerna till mig, så kan jag testa från ett eget projekt

 

Länk till kommentar
Dela på andra webbplatser

Urk, nu har jag läst allt som finns att läsa om IPostBackDataHandler och relaterat material, men jag får bara inte till det. Det närmaste jag kommer är att exponera click-events från en submit-knapp utåt, men det hjälper föga.

 

 

Länk till kommentar
Dela på andra webbplatser

niclascolleen

Tack ändå för all tid du lagt ned, och för idén med att använda events.

 

Jag hittade i en news group ett väldigt liknande fall, och däri fanns en länk till ett dokument.

Dokumenetet återfinns:

 

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconbubblingcommandevent.asp

 

och newsgroup tråden var:

 

http://groups.google.se/groups?hl=sv&lr=&threadm=OYMxI9TJBHA.1464%40tkmsftngp05&rnum=1&prev=/groups%3Fq%3Draiseevent%2520%2522public%2520event%2522%2520%2522web%2520user%2520control%2522%26svnum%3D100%26hl%3Dsv%26lr%3D%26sa%3DN%26tab%3Dig

 

Jag tycker den är hyffsat svårläst, men tänkte jag skulle göra ett försök, har du tid att ta en titt, skulle det ju vara väldigt angenämt:)

 

MVH Niclas

 

Länk till kommentar
Dela på andra webbplatser

Synd att snubben som fick sitt problem med bubbling inte kunde varit solidarisk nog att posta sin lösning.

Jag testade lite, men jag kan inte exponera TextChanged utåt, ska läsa lite mer i MS dokument.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...