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?
8 svar · 911 visningar · startad av CatZ
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?
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?
Tänkte tyvärr fel. Men jag fortsätter att testa =)
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?
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);
}
}
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?
Du kanske borde specificera ett event som den ska trigga på också?
(Antar att UP1.ChildrenAsTriggers = true inte är ett alternativ?)
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