webForumDet fria alternativet

ControlID på en LinkButton Inuti en GridView?

.NET

8 svar · 911 visningar · startad av CatZ

Medlem sedan jan. 20022 440 inlägg
Frågan#1

Hej!

Jag har följande kod

<asp:TemplateField ShowHeader="False">
	<ItemStyle HorizontalAlign="Center" />

	<ItemTemplate>

		<asp:LinkButton ID="lbtnPrintInvoice" runat="server" CommandArgument='<%# Eval("InvoiceID") %>'
			CommandName="PrintInvoice" OnClick="PrintInvoice">Skriv ut</asp:LinkButton>

	</ItemTemplate>

</asp:TemplateField>

Den vill jag kunna köra en en PostBackTrigger på

<Triggers>
	<asp:PostBackTrigger ControlID="???" />
</Triggers>

Går det på nåt enkelt sätt?

Medlem sedan jan. 20022 440 inlägg
#2

Jag försöker igen.

Jag har en updatepanel, i den update paneln ligger en gridview och i den gridview'n finns en LinkButton som jag vill komma åt och låta vara postbacktrigger.

Hur lyckas jag med det?

Medlem sedan dec. 200435 inlägg
#3

Tänkte tyvärr fel. Men jag fortsätter att testa =)

Medlem sedan jan. 20022 440 inlägg
#4

Försöker med nedan kod men får självklart en nullreference execption!

Dim ap As AsyncPostBackTrigger = New AsyncPostBackTrigger
ap.ControlID = GridView1.FindControl("lbtnPrintInvoice").UniqueID
UP1.Triggers.Add(ap)

Hur ska jag annars komma åt den?

Medlem sedan juni 20003 076 inlägg
#5

Hittar kontrollen gör du genom OnRowDataBound.
Sorry, men jag kan bara C#, men du kan nog översätta! :)

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
             AsyncPostBackTrigger ap = new AsyncPostBackTrigger();
             ap.ControlID = e.row.FindControl("lbtnPrintInvoice").UniqueID;
             UP1.Triggers.Add(ap);
        }
    }
Medlem sedan jan. 20022 440 inlägg
#6
If e.Row.RowType = DataControlRowType.DataRow Then
	Dim pt As New PostBackTrigger()
	pt.ControlID = e.Row.FindControl("lbtnPrintInvoice").UniqueID
	UP1.Triggers.Add(pt)
End If

Tack för hjälpen så långt, nu verkar den ju hitta id'na och jag hoppas att den sparar mina triggers men det hjälper inte.

Måste jag ställa in min UpdatePanel på något särskilt?

Medlem sedan mars 20023 561 inlägg
#7

Du kanske borde specificera ett event som den ska trigga på också?

(Antar att UP1.ChildrenAsTriggers = true inte är ett alternativ?)

Medlem sedan jan. 20022 440 inlägg
#8

/red

Är det klick eventet eller kommandot som ska läggas till i triggern i så fall?

Medlem sedan jan. 20022 440 inlägg
#9

Nu har jag löst det och som det vänliga pucko jag är så postar jag givetvis hela lösningen för er allihop! :)

Protected Sub GridView1_RowDataBound1(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

	If e.Row.RowType = DataControlRowType.DataRow Then
		ScriptManager.GetCurrent(Me).RegisterPostBackControl(e.Row.FindControl("lbtnPrintInvoice"))
	End If

End Sub

Det här fick mig att lära mig två saker.

1. Det går inte skapa PostBackTriggers programmatiskt i en UpdatePanel av förklarliga skäl. Updatepanelen är ju där för att uppdatera endas sig själv så man måste ta hjälp av ScriptManagern för att kunna låta kontroller i UpdatePanelen köra över den asynkroniska update.

2. Det går alldeles utmärkt att anropa ScriptManager som ligger i en MasterPage från den sidan där man binder kontrollerna ( i mitt fall default.aspx ).

Hoppas att det hjälper någon? :stud

250 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)