asp.net - Cómo asignar la ID de control de UpdatePanel Trigger con los botones de gridview
triggers (4)
Intente registrar el control posterior de la publicación del código detrás de esta manera:
protected void grdExpense_RowCreated(object sender, GridViewRowEventArgs e)
{
LinkButton btnAdd = (LinkButton)e.Row.Cells[0].FindControl("btnAdd");
if (btnAdd != null)
{
ScriptManager1.RegisterAsyncPostBackControl(btnAdd);
}
}
Actualmente tengo un UpdatePanel para el uso de jQuery Dialog, que contiene un GridView.
Y ese GridView contiene un control FileUpload en el pie de página y EmptyDataTemplate
Para que el control FileUpload funcione en JavaScript, sé que necesitamos activarlo.
Sin embargo, el botón que quiero asignar como disparador está dentro de la plantilla de GridView ...
cuando se presiona el botón btnAdd, se guardará el archivo en el control FileUpload.
Aquí está el código:
<asp:UpdatePanel ID="upnlEditExpense" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAdd"/>
</Triggers>
......................
........................
.........................
<asp:GridView runat="server" ID="grdExpense" ShowHeader="True" ShowFooter="True"
AutoGenerateColumns="False">
<Columns>
...................
<asp:TemplateField>
<FooterTemplate>
<asp:LinkButton runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click"></asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:UpdatePanel>
Si coloco el ID del botón directamente en el ID de control del disparador como este, aparece un error diciendo que btnAdd no se pudo encontrar ...
¿Qué debo hacer para que funcione el control FileUpload?
Esto funciona
protected void grdExpense_RowCreated(object sender, GridViewRowEventArgs e)
{
LinkButton btnAdd = (LinkButton)e.Row.Cells[0].FindControl("btnAdd");
if (btnAdd != null)
{
ScriptManager.GetCurrent(this).RegisterPostBackControl(btnAdd);
}
}
En lugar de agregar un activador a upnlEditExpense, tal vez pueda intentar agregar un panel de actualización alrededor del botón de enlace dentro de la plantilla sin desencadenantes ...
<asp:TemplateField>
<FooterTemplate>
<asp:UpdatePanel ID="upnlBtnAdd" runat="server">
<ContentTemplate>
<asp:LinkButton runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click"></asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
</FooterTemplate>
</asp:TemplateField>
Tuve un problema similar y esta publicación me ayudó, pero descubrí que registrar el control en el administrador de scripts solo funciona si Updatepanels UpdateMode está establecido en "Siempre". Si se establece en "Condicional", este enfoque no funciona.
Encontré otro enfoque que siempre funciona, que es agregar activadores al panel de actualización en el evento DataBound () de gridview:
Dim CheckBoxTrigger As UpdatePanelControlTrigger = New AsyncPostBackTrigger()
Dim SelectCheckBox As CheckBox
For i = 0 To GridViewEquipment.Rows.Count - 1 Step 1
SelectCheckBox = GridViewEquipment.Rows(i).Cells(12).FindControl("CheckBoxSign")
CheckBoxTrigger.ControlID = SelectCheckBox.UniqueID
UpdatePanelEquipment.Triggers.Add(CheckBoxTrigger)
Next