updatepanel中gridview内的复选框

时间:2013-04-10 05:49:53

标签: asp.net gridview updatepanel autopostback

我的第一列中有gridview checkbox。我设置checkbox的{​​{1}}属性。 autopostback="true"位于gridview内。当updatepanelcheckbox时,我想让一个checked可见,哪个面板位于更新面板之外。我用检查点检查代码,这是通过代码,但它无法正常工作。任何人都可以帮助我吗?..

提前致谢。

我的代码在这里供您参考......

HTML代码:

panel

C#代码:

<asp:Panel ID="ploperation" runat="server" CssClass="plop" Visible="False">
    <asp:LinkButton ID="lbtnasspam" runat="server" CssClass="panelbtn" Font-Names="Calibri"
                    Font-Size="14px" Font-Underline="False" OnClick="lbtnasspam_Click">Report As Spam</asp:LinkButton>
</asp:Panel>

 <asp:UpdatePanel ID="up" runat="server">
     <ContentTemplate>
         <asp:GridView ID="gvmail" runat="server" AllowPaging="True" AutoGenerateColumns="False">

              <Columns>
                  <asp:TemplateField>
                      <ItemTemplate>
                          <asp:CheckBox ID="chkchild" runat="server" AutoPostBack="true" OnCheckedChanged="chkchild_CheckedChanged"/>
                      </ItemTemplate>
                      <ItemStyle Width="15px" />
                  </asp:TemplateField>
              </Columns>         
         </asp:GridView>
     </ContentTemplate>                        
</asp:UpdatePanel>

3 个答案:

答案 0 :(得分:1)

您可以使用initializeRequest - 当发生异步回发时会引发此事件(当您检查gridview中的复选框时,它会启动异步回发,因为它位于更新面板中)。

只需将ploperation更改为div而不是<asp:Panel,您可以使用javascript来显示/隐藏它:

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_initializeRequest(initializeRequest);

    function initializeRequest(sender, args) {
        document.getElementById('ploperation').style.display = 'block';
    }

</script>
<asp:UpdatePanel ID="up" runat="server">
    <ContentTemplate>
        <asp:GridView ID="gvmail" runat="server" AllowPaging="True" AutoGenerateColumns="False">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:CheckBox ID="chkchild" runat="server" AutoPostBack="true" />
                    </ItemTemplate>
                    <ItemStyle Width="15px" />
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>
<div id="ploperation" style="display:none;" runat="server">
    <asp:LinkButton ID="lbtnasspam" runat="server" CssClass="panelbtn" Font-Names="Calibri"
        Font-Size="14px" Font-Underline="False" OnClick="lbtnasspam_Click">Report As Spam</asp:LinkButton>
</div>
</form>

或者你可以坚持你的方式,只需将<asp:Panel放在UpdatePanel内 - &gt; ContentTemplate

答案 1 :(得分:0)

更新面板执行部分页面加载.... check link

因此,如果您想要显示您的面板,请将其包含在更新面板中。

答案 2 :(得分:0)

将UpdatePanel放在要更改的控件上,而不是放在GridView上。不要忘记在Triggers部分引用GridView。例如,如果要更改标签文本,请使用以下代码:

<asp:UpdatePanel ID="up" runat="server">
<ContentTemplate>
    <asp:Label ID="Label1" runat="server" Text="" />
</ContentTemplate>
<Triggers>
        <asp:AsyncPostBackTrigger ControlID="gvmail"  />
</Triggers>
</asp:UpdatePanel>

<asp:GridView ID="gvmail" runat="server" AllowPaging="True" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="chkchild" runat="server" AutoPostBack="true" OnCheckedChanged="chkchild_CheckedChanged"/>
            </ItemTemplate>
            <ItemStyle Width="15px" />
        </asp:TemplateField>
    </Columns>         
</asp:GridView>