Jag har två usercontrols i en sida, i den ena har jag en dropdownlist och i den andra en repeater.
Nu skulle jag vilja visa olika data i repeatern på den andra usercontrolen utifrån värdet på den första usercontrolens dropdownlist.
Jag har kommit en bit på vägen och det fungerar hyfsat men värdet från dropdownen släpar och repeatern visar alltid värdet från föregående val i dropdownlisten.
Nån som sitter inne med en bra lösning för att få repeatern att visa rätt data direkt man byter värde på dropdownlisten?
Usercontrol med dropdown:
<%@ Control Language="VB" %>
<script runat="server">
Public ReadOnly Property tabell() As String
Get
Return dropdownlist.SelectedItem.ToString
End Get
End Property
</script>
Usercontrol med repeater:
<%@ Control Language="VB" %>
<script runat="server">
Public WriteOnly Property tabell() As String
Set(ByVal value As String)
rp1.DataSource = objDatabas.visabocht(value)
rp1.DataBind()
End Set
End Property
</script>
aspx-sidan:
<script runat="server">
Sub page_load(ByVal obj As Object, ByVal e As EventArgs)
If sok.tabell <> "" Then
visa.tabell = sok.tabell
End If
End Sub
</script>
BrimbaMedlem sedan dec. 19995 875 inlägg Lägg ett event på din UC med dropdownen.
Populera sedan din rpt property när eventet triggas.
Du kan exempelvis låta aspx-sidan penumerera på eventet.
Okej, låter ju exakt som vad jag är ute efter. men hur populerar jag en property vid ett event? och vad innebär att prenumerera(antar att det är vad som ska stå) på ett event?
BrimbaMedlem sedan dec. 19995 875 inlägg I din DDL-kontroll skapar du ett event, och låter det triggas på indexChange.
public event EventHandler DropDownListUpdated;
private void myDdl_SelectedIndexChanged(object sender, System.EventArgs e){
DropDownListUpdated("myDdl", null);
}
I din aspx-sida, så lägger du till eventet
this.myDdlControl.DropDownListUpdated += new EventHandler(ddl_Updated);
protected void ddl_Updated(object sender, EventArgs e)
{
myRptControl.DataSource = newDataSource;
myRptControl.Bind();
}
När eventet triggas fårn din ddl-kontroll så lägger du på en ny datakälla och binder om den.
Propertyn DataSource får du således exponera från din repeaterkontroll. Likaså kan du behöva bygga en Bind-metod, som binder din datakälla till repeatern.
Har suttit och kliat mig i huvet ett tag nu.. men det blev lite för svårt när jag ska försöka översätta det där till vb som jag är van vid. Kan du utveckla lite mer?
Nu har jag fått till det med dina bitar i c#, stort tack för dom, fungerar sjukt bra och snabbt.
Men som sagt jag skulle vilja kunna göra samma sak helt i VB, är det möjligt??
nu ser det ut såhär:
aspx-sida:
<%@ Page Language="C#" %>
<%@ Register TagPrefix="m" TagName="sok" Src="test_sok.ascx" %>
<%@ Register TagPrefix="m" TagName="visa" Src="test_visa.ascx" %>
<script runat="server">
void page_load(object sender, EventArgs e){
this.sok.DropDownListUpdated += new EventHandler(ddl_Updated);
}
protected void ddl_Updated(object sender, EventArgs e){
DropDownList dd = (DropDownList)sender;
visa.tabell = dd.SelectedValue;
}
</script>
<html>
<body>
<form id="form1" runat="server">
<m:sok ID="sok" runat="server" />
<m:visa ID="visa" runat="server" />
</form>
</body>
</html>
test_sok.ascx:
<%@ Control Language="C#" %>
<script runat="server">
public event EventHandler DropDownListUpdated;
private void ddl_val_SelectedIndexChanged(object sender, System.EventArgs e)
{
DropDownListUpdated(ddl_val, null);
}
</script>
.
.
.
test_visa.ascx
<%@ Control Language="VB" %>
<script runat="server">
Dim objDatabas As New GF.databas
Public WriteOnly Property tabell() As String
Set(ByVal value As String)
dg1.DataSource = objDatabas.visabocht(value)
dg1.DataBind()
End Set
End Property
</script>
.
.
.
BrimbaMedlem sedan dec. 19995 875 inlägg Det kan du naturligtvis.
Gå gärna igenom denna 'guide', som kan hjälpa dig konvertera c# till vb.net
http://www.harding.edu/USER/fmccown/WWW/vbnet_csharp_comparison.html
Fint, var 'raiseevent' och 'addhandler' jag saknade i min vb-kod :r
TravoniMedlem sedan okt. 20041 556 inlägg Jo, men hur lärorikt är det.. bättre om man får läsa och fundera lite ;)