Custom Events
Hej,
<b>edit2: löste det! Lösning finns i koden</b>
Grundproblem. 1 aspx-sida med 2 usercontrols. Den ena är en databasdriven meny som hämtar 3 värden att använda i select-sats för den andra som är en gridview.
Har googlat och fått en uppsjö med infallsvinklar, de flesta ett snäpp över min nuvarande begreppsförmåga.
Min infallsvinkel för stunden är Custom Events och det försöker jag vrida skallen runt genom ett exempel. Men jag får det inte att fungera.
I exemplet finns 1 aspx-sida och 1 usercontrol med en ddl. Vid val i user controlens ddl ska label på aspx-sidan ändras, men det blir inte så. Har testat i selectedindexchanged att lägga in valfri text på label på usercontrollen men den skriver bara ut om jag hämtar värden från ddl.
Vad jag behöver förstå är förutsättningarna för att ett event i en usercontroll kan uppfattas av en annan usercontrol vilket jag hoppades kunna åstadkomma genom att börja med att försöka överföra eventet till aspx-sidan. Resultatet ska bli att valet i ddl från usercontrol skrivs ut i label på aspx-sidan.
Kan lösa grundproblemet genom att plocka ut gridview från usercontrol och använda findcontrol, men jag lär mig gärna det här.
<b>edit: AutoEventWireup="true" i båda filerna</b>
usercontrol testctrl.ascx
Imports System.Data.Odbc Imports System.Web.UI.WebControls Public MustInherit Class testctrl Inherits System.Web.UI.UserControl 'Protected WithEvents ddlBooks As System.Web.UI.WebControls.DropDownList ' enligt exempel ska denna deklareras men jag får felmeddelande om att den redan är deklarerad Public Event ListChanged(ByVal sender As Object, ByVal e As BookListArgs) Public con As New OdbcConnection(strConnection) 'hämtas från en klass jag inte har med i import här '#Region " Web Form Designer Generated Code " 'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub '#End Region Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load If Not Page.IsPostBack Then Try fillddl() Catch ex As Exception lblTest.Text = Err.Description End Try End If End Sub Sub fillddl() Try Dim objDS As New Data.DataSet Dim objDA As New OdbcDataAdapter Dim strSql As String = "Select * from mainCategory" con.Open() objDA = New OdbcDataAdapter(strSql, con) objDA.Fill(objDS, "cat") Dim dt1 As Data.DataTable = objDS.Tables("cat") ddlBooks.DataSource = dt1 ddlBooks.DataBind() con.Close() Catch ex As Exception lblTest.Text = Err.Description End Try End Sub Public Class BookListArgs Inherits EventArgs Public bookSelected As String End Class Public Sub ddlBooks_SelectedIndexChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles ddlBooks.SelectedIndexChanged lblTest.Text = ddlBooks.SelectedItem.ToString() 'lägger jag in tex "event" här händer inte något, detta är en label i usrcontrollen Dim bla As New BookListArgs() bla.bookSelected = ddlBooks.SelectedItem.ToString() RaiseEvent ListChanged(sender, bla) End Sub End Class
aspx-sidan
Public Class testausrctrl Inherits System.Web.UI.Page Public WithEvents ddlBooks As System.Web.UI.WebControls.DropDownList Public WithEvents testctrl As testctrl Public Event ListChanged(ByVal sender As Object, ByVal e As testctrl.BookListArgs) Private Sub Booklist1_ListChanged(ByVal sender As System.Object, _ ByVal e As testctrl.BookListArgs) _
<b>Här var tankevurpan, kontrollen på sidan heter testctrl1</b>
Handles testctrl.ListChanged lblBook.Text = "Selected: " & e.bookSelected End Sub
Svara