La clé est de savoir quelle ligne dans la GridView était le LinkButton sur lequel vous avez cliqué. Vous pouvez le faire de plusieurs façons, mais la façon dont je l'ai implémenté est de le capturer dans l'événement RowCommand. Ensuite, vous pouvez accéder à ModalPopupExtender dans la ligne cliquée via FindControl (..).
Page:
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" runat="server" style="Display:none;" Text="Button" />
<cc1:ModalPopupExtender ID="ModalPopupExtender1" PopupControlID="Popup1" TargetControlID="Button1" BackgroundCssClass="modalBackground" runat="server" />
<asp:LinkButton ID="LinkButton1" CommandName="Popup" runat="server">Popup</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
Codebehind:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton LinkButton1 = (LinkButton)e.Row.FindControl("LinkButton1");
LinkButton1.CommandArgument = e.Row.RowIndex.ToString();
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Popup" && e.CommandArgument != null)
{
int rowIndex = Convert.ToInt32(e.CommandArgument);
ModalPopupExtender modalPopupExtender1 = (ModalPopupExtender)GridView1.Rows[rowIndex].FindControl("ModalPopupExtender1");
modalPopupExtender1.Show();
//Perform any specific processing.
Label1.Text = string.Format("Row # {0}", rowIndex);
}
}
De plus, parce que vous ouvrez le modal sur un postback de toute façon vous n'avez pas besoin en fait le ModalPopupExtender (ou le bouton caché) dans la ItemTemplate. Vous pouvez le déplacer et le mettre sur la page (par votre div popup) et pouvez simplement appeler la méthode Show().
Page:
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" CommandName="Popup" runat="server">Popup</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
CodeBehind:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Popup" && e.CommandArgument != null)
{
int rowIndex = Convert.ToInt32(e.CommandArgument);
ModalPopupExtender1.Show();
//Perform any specific processing
Label1.Text = string.Format("<Br>Row # {0}", rowIndex);
}
}
Merci, bonne chance!
J'ai essayé plusieurs façons d'y arriver. Le délégué RowDataBound configure tout correctement avec les numéros de ligne appropriés. Mais lors du clic sur LinkButton, l'extension s'affiche toujours sans publication dans le délégué RowCommand. Qu'est-ce qui ne va pas? – IAmAN00B