asp.net中的Gridview TemplateField复选框回发行为

时间:2013-08-26 13:20:51

标签: asp.net ajax c#-4.0 gridview autopostback

我在UpdatePanel中有GridView,UpdatePanel的UpdateMode设置为条件。

Gridview包含asp:CheckBox作为TemplateField,其余列是动态创建的boundfield。 Checbox AutoPostBack设置为true,我根据复选框值更新数据表(在会话内)。

这是标记:

<asp:GridView ID="ObjList" runat="server"  CssClass="ObjList" AutoGenerateColumns="false" OnRowDataBound="ObjList_RowDataBound" AutoGenerateSelectButton="false" AllowPaging="False">
    <Columns>
        <asp:TemplateField HeaderText="&nbsp">
            <HeaderTemplate>
                <asp:CheckBox AutoPostBack="true" ID="chkAll" runat="server" OnCheckedChanged="HeaderChk_Changed" />
                <asp:HiddenField ID="LinkNumIndexHead" runat="server" Value="-1" />
            </HeaderTemplate>
        <ItemTemplate>
            <asp:CheckBox AutoPostBack="true" ID="chkRow" runat="server" Checked='<%# DataBinder.Eval(Container.DataItem, "Selection")%>'
                    OnCheckedChanged="ChkRow_OnCheckChange" />                                                 
        </ItemTemplate>                                                
        </asp:TemplateField>
    </Columns>
 </asp:GridView>

仅限部署版本: 每当用户以快速方式单击2个或更多复选框时。第一个复选框的回发激活和其余的复选框都未选中。我该如何控制这种行为?

本地IIS运行时 每个复选框的回发都会触发。

在Firebug调试中,注意到第一个复选框的回发需要相当长的时间。 请告诉我如何避免这种情况。

1 个答案:

答案 0 :(得分:0)

试试这个

<asp:GridView ID="ObjList" runat="server" CssClass="ObjList" AutoGenerateColumns="false"
    OnRowDataBound="ObjList_RowDataBound" AutoGenerateSelectButton="false" AllowPaging="False">
    <Columns>
        <asp:TemplateField HeaderText="&nbsp">
            <HeaderTemplate>
                <asp:UpdatePanel runat="server">
                    <ContentTemplate>
                        <asp:CheckBox AutoPostBack="true" ID="chkAll" runat="server" OnCheckedChanged="HeaderChk_Changed" />
                    </ContentTemplate>
                </asp:UpdatePanel>
                <asp:HiddenField ID="LinkNumIndexHead" runat="server" Value="-1" />
            </HeaderTemplate>
            <ItemTemplate>
                <asp:UpdatePanel ID="UpdatePanel5" runat="server">
                    <ContentTemplate>
                        <asp:CheckBox AutoPostBack="true" ID="chkRow" runat="server" Checked='<%# DataBinder.Eval(Container.DataItem, "Selection")%>'
                            OnCheckedChanged="ChkRow_OnCheckChange" />
                    </ContentTemplate>
                </asp:UpdatePanel>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>