webForumDet fria alternativet

Imagebutton i en repeater

.NETur .NET

3 svar · 351 visningar · startad av TompusTuffing

TompusTuffingMedlem sedan jan. 20043 inlägg
#1

Jag vill i en av kolumnerna i en repeater infoga en imagebutton. Koden ser ut såhär;

----->vb-kod (code behind)

...
Dim dvVasteras As DataView
Dim dokImage As New ImageButton

    Me.dokImage.ImageUrl = "images/doc.gif"

    ds = objHuurre.hamtaAvvikelser("alla")

    dvVasteras = New DataView(ds.Tables(0))
    dvVasteras.RowFilter = "kontorNamn='västerås'"
    repVisaAvvikelser1().DataSource = dvVasteras

...

-----> html-kod
...
<ItemTemplate>
<tr>
<td class="visaAvv"><asp:ImageButton id="dokImage" runat="server"></asp:ImageButton></td>
...
</tr>
</ItemTemplate>
...

Med den här lösningen får jag "Object reference not set to an instance of an object. ". Lägger jag däremot knappen utanför repeatern så fungerar det. Vad är det jag har glömt/gjort för fel?

JonMedlem sedan juli 20011 304 inlägg
#2

Hepp!

Jag antar att du vill ha olika nbilder för olika kontor typ? Annars är det ju bara att sätta ImageUrl direkt i propertyn på aspx-sidan.

Jag vet inte på rak arm varför det blir fel för dig men jag kan förklara hur jag gör liknande saker :)

Codebehind:

protected void databound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
		{
			if(e.Item.ItemType != ListItemType.Footer && e.Item.ItemType != ListItemType.Header)
			{
				// dokImage
				Control _ctlpic = e.Item.FindControl("dokImage");
				if(_ctlpic!=null)
				{
					System.Web.UI.WebControls.ImageButton _imgDok = (System.Web.UI.WebControls.ImageButton)_ctlpic;
					_imgDok .ImageUrl = "bilder/getost.jpg";
				}
}
}

Sen måste du ange på din aspx-sida att funktionen databound ska köras vid databindning, typ:

<asp:Repeater id="repVisaAvvikelser1" runat="server" OnItemDataBound="databound"></asp:Repeater>
JosefMedlem sedan mars 20023 561 inlägg
#3

TompusTuffing: Använd gärna [kod]-taggarna när du postar kod.

PrästenMedlem sedan dec. 2000537 inlägg
#4

Mmmm förstår mycket väl ditt problem....

Jag har helt lagt ner att sätta statiska webcontroller i Repeatrar, det blir helt enkelt för mycket tjafs och maffs.
Det funkar inte när man ska göra nåt avancerat.
Därför är dynamiskt satta webcontrolls att föredra...

Design:

<asp:Repeater id="Repeater1" runat="server">
				<HeaderTemplate>
				</HeaderTemplate>
				<ItemTemplate>
				</ItemTemplate>
				<FooterTemplate>
				</FooterTemplate>
			</asp:Repeater>

CodeBeside:

private void Page_Load(object sender, System.EventArgs e)
{
ImageButton theimage=new ImageButton();
theimage.ID="dinbild";
//theimage.ImageUrl="http://www.ijiji.se/54.gif"; //sätt din bild direkt
Repeater1.Controls.Add(theimage);

}

((Image)Repeater1.FindControl("dinbild")).ImageUrl="http://www.ijijji.se/hh.gif"; // eller sätt den senare varsomhelst i din kod
262 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
134 ms — hämta forumlista (db)
125 ms — hämta statistik (db)
134 ms — hämta tråd, inlägg och bilagor (db)