2010-07-16 78 views
1

ModalPopupExtender如何使用包含要在点击时显示模式的LinkBut​​ton的GridView TemplateField?我想要更新单击该行中的“编辑”LinkBut​​ton时的详细信息数据行。在模态显示之前需要通过代码隐藏加载一堆数据。ModalPopupExtender GridView ItemTemplate

我尝试以下,但我不能在事件处理函数中执行Modal1.Show(),因为它是在一个TemplateField:

​​

谢谢, 马克

回答

3

的关键是知道这行的GridView是被点击的LinkBut​​ton。您可以通过几种方法来实现,但实现方式是在RowCommand事件中捕获它。然后,您可以通过FindControl(..)访问点击行中的ModalPopupExtender。

页:

<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> 

代码隐藏:

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); 
     } 
    } 

此外,因为您是在回发反正打开模式,你实际上并不需要的ModalPopupExtender(或隐藏按钮)在ItemTemplate中。你可以将它移出并放在页面上(通过你的popup div),并且可以简单地调用Show()方法。

页:

<asp:TemplateField> 
    <ItemTemplate> 
    <asp:LinkButton ID="LinkButton1" CommandName="Popup" runat="server">Popup</asp:LinkButton> 
    </ItemTemplate> 
</asp:TemplateField> 

代码隐藏:

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); 
     } 
    } 

谢谢,祝你好运!

+0

我试过几种方法来实现这一点。 RowDataBound委托使用适当的行号正确设置所有内容。但在LinkBut​​ton单击后,扩展程序总是弹出,不会回发到RowCommand委托。怎么了? – IAmAN00B 2012-07-30 16:18:56

相关问题