代码之家  ›  专栏  ›  技术社区  ›  Mitesh Jain

在gridview中,updatepanel不工作

  •  1
  • Mitesh Jain  · 技术社区  · 12 年前

    html代码

    <asp:GridView ID="gridprodlist" runat="server" AutoGenerateColumns="False" EmptyDataText="No record" Width="100%">
    <Columns>
    <asp:TemplateField HeaderText="Edit&lt;br/&gt;Delete&lt;br/&gt;Disable">
    <ItemTemplate>
    <table cellpadding="0" cellspacing="0" border="0">
         <tr>
            <td valign="top">
             <asp:UpdatePanel ID="UpdatePanel100" runat="server">
                <ContentTemplate>
            <asp:CheckBox ID="chkdis" runat="server" AutoPostBack="True" OnCheckedChanged="chkdis_CheckedChanged" ValidationGroup='<%# Eval("pid") %>' Text="Disable" />
                </ContentTemplate>
              </asp:UpdatePanel>
             </td>
        </tr>
    </table>
    </ItemTemplate>
    <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
    

    .cs代码

    protected void chkdis_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox chkdis = (CheckBox)sender;
        int id = Convert.ToInt32(((CheckBox)sender).ValidationGroup);
    
        if (chkdis.Checked == true)
        {
    
        }
        else
        {
    
        }
    
    }
    

    我已经把更新面板放在了网格视图中,但点击复选框后,我的页面仍然会刷新。 我该怎么办? 我不想刷新我的页面

    4 回复  |  直到 12 年前
        1
  •  2
  •   Tim Schmelter    12 年前

    尝试注册此 CheckBox 作为来自codebehind的异步回发控件:

    protected void Page_Init(Object sender, EventArgs e)
    {
         gridprodlist.DataBound += GridprodList_DataBound;
    }  
    
    private void GridprodList_DataBound(Object sender, EventArgs e)
    {
        ScriptManager sm = ScriptManager.GetCurrent(Page);
        foreach(GridViewRow row in gridprodlist.Rows)
        {
            CheckBox chkdis = (CheckBox) row.FindControl("chkdis");
            sm.RegisterAsyncPostBackControl(chkdis);
        }
    }
    

    它只在第一次工作,但第二次我的页面得到 刷新

    然后尝试使用 RowCreated 这是在每一行的每次回发时触发的:

    ScriptManager sm = ScriptManager.GetCurrent(Page);
    
    private void GridprodList_RowCreated(Object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkdis = (CheckBox) e.Row.FindControl("chkdis");
            sm.RegisterAsyncPostBackControl(chkdis);
        }
    }
    
        2
  •  2
  •   Brian Mains    12 年前

    尝试将UpdatePanel从GridView中移出,并将整个GridView封装在UpdatePanel中,看看这是否有什么不同。

        3
  •  0
  •   Mrinal Saurabh    12 年前

    它不能这样工作,因为 GridView已转换为表 同时被渲染。更新面板肯定不会在渲染时添加到每一行中。因此,最好的方法是将网格视图放在更新面板中。

        4
  •  0
  •   user240141 user240141    12 年前

    将UpdatePanel移到GridView之外,并将GridView包装在UpdatePanel中。如果您仍然需要对某些控件进行回发,则在UpdatePanel的结束标记之前使用。

    <Triggers> 
    <PostBackTriggers ControlId="YourControlId"/>
    <Triggers>
    </asp:UpdatePanel>