Hej,Custom Events
<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