【问题标题】:why checkbox_CheckedChanged event does not fired?为什么 checkbox_CheckedChanged 事件没有触发?
【发布时间】:2013-05-01 15:57:18
【问题描述】:

我正在使用我在 aspx 文件中的 gridview 来做这件事

<asp:GridView ID="gridDepartement" runat="server" CellPadding="4" ForeColor="Black" 
                    GridLines="Horizontal" AutoGenerateColumns="False" BackColor="White" 
                    BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" AllowSorting="True" >
                    <Columns>
                        <asp:templatefield>
                            <HeaderTemplate>
                                 <asp:CheckBox ID="cbSelectAll"   
                                    runat="server" AutoPostBack="true"
                                    OnCheckedChanged="cbSelectAll_CheckedChanged" />  
                            </HeaderTemplate>
                            <itemtemplate>
                                <asp:CheckBox Id="cbSelectOne" runat="server"/>
                            </itemtemplate>
                        </asp:templatefield>
                        <asp:CommandField ShowEditButton="True" ItemStyle-Width="20"/>
                        <asp:CommandField ShowDeleteButton="True" ItemStyle-Width="20"/>
                        <asp:CommandField ShowSelectButton="True" ItemStyle-Width="20"/>
                        <asp:boundfield headertext="Departement Code" datafield="departementcode" 
                            ItemStyle-HorizontalAlign="Center"/>
                        <asp:boundfield headertext="Departement Name" datafield="departementname"
                             ItemStyle-HorizontalAlign="Center" />
                        <asp:boundfield headertext="Created By" datafield="createby"
                             ItemStyle-HorizontalAlign="Center" />
                        <asp:boundfield headertext="Created Date" datafield="createdate"
                             ItemStyle-HorizontalAlign="Center" />
                        <asp:boundfield headertext="Updated By Name" datafield="updateby"
                             ItemStyle-HorizontalAlign="Center" />
                        <asp:boundfield headertext="Last Update" datafield="lastupdate"
                             ItemStyle-HorizontalAlign="Center" />
                    </Columns>
                    <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
                    <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
                    <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
                    <SortedAscendingCellStyle BackColor="#F7F7F7" />
                    <SortedAscendingHeaderStyle BackColor="#4B4B4B" />
                    <SortedDescendingCellStyle BackColor="#E5E5E5" />
                    <SortedDescendingHeaderStyle BackColor="#242121" />
                </asp:GridView>

并且我想在单击复选框标题时检查所有复选框,因此我将一个事件添加到我的网格中,并将此代码添加到复选框 checkchanged 事件中:

 protected void cbSelectAll_CheckedChanged(object sender, EventArgs e)
        {
            bool chkFlag = false;

            CheckBox cbHD = (CheckBox)gridDepartement.HeaderRow.FindControl("cbSelectAll");

            if (cbHD.Checked)
            {
                chkFlag = true;
            }
            foreach (GridViewRow dr in gridDepartement.Rows)
            {
                CheckBox chk = (CheckBox)dr.Cells[0].FindControl("cbSelectOne");
                chk.Checked = chkFlag;
            }
        }

页面加载代码:

 protected void Page_Load(object sender, EventArgs e)
        {
            //if(!IsPostBack)
            //{
                DataSourceDepartement dpt = new DataSourceDepartement();

                DataSourceDepartementTableAdapters.departementTableAdapter
                adp = new DataSourceDepartementTableAdapters.departementTableAdapter();

                //bind gridview to datatable
                gridDepartement.DataSource = adp.GetDataDepartement();
                gridDepartement.DataBind();
            //}
        }

好的,它现在正在工作,但现在的问题是,我的复选框事件仅在值变为选中/true 时触发,但是当我取消选中它/将其变为 false 时,它​​不会触发,我应该修复什么部分?

【问题讨论】:

  • 在哪个事件上绑定了gridview?
  • 我用页面加载代码编辑了我的帖子。
  • 我发布了一个答案,看看它

标签: c# asp.net checkbox


【解决方案1】:

为什么要在服务器端做这件事。用java脚本做。这对于性能水平会更好。使用此代码::: `function CheckAll(objparentcheckbox) { var HeaderCheckboxControl = objparentcheckbox var table = getParentByTagName(HeaderCheckboxControl, 'table');

        //get all the control of the type INPUT in the base control.
        var Inputs = table.getElementsByTagName("input");

        for (var n = 0; n < Inputs.length; ++n)
            if (Inputs[n].type == 'checkbox') {
                Inputs[n].checked = HeaderCheckboxControl.checked;
            }
        return false;
    } and in grid::::   <HeaderTemplate>
                                        <asp:CheckBox ID="ChkSelectAll" onclick="CheckAll(this)" runat="server" />
                                    </HeaderTemplate>`

【讨论】:

  • prince 它显示此错误 ReferenceError: getParentByTagName is not defined.
  • 我不知道为什么会出现这个错误。您可以使用 Fire Bug 控制台检查此错误。否则,我有一个更好的解决方案给你。请查看此链接 :::::aspdotnet-suresh.com/2011/03/…
【解决方案2】:

您的 Gridview 在复选框事件之前再次绑定,这就是为什么不调用您的事件而不是回发的原因,因此请将您的 gridview 绑定语句放在以下块中。

  if (!Page.IsPostBack)
        {
 gridDepartement.DataSource = adp.GetDataDepartement();
                gridDepartement.DataBind();
}

【讨论】:

  • 我试过了,但问题是,如果我在 !page.ispostback 中放入绑定代码,在回发后,我的网格不会显示任何内容。
【解决方案3】:
function SelectAll(objcheckbox)
         {
             var HeaderCBControl = objcheckbox;
             //var table = getParentByTagName(HeaderCBControl, 'table');
             var Inputs = document.getElementById('CenterContent_gridDepartement').getElementsByTagName("input");

             for (var n = 0; n < Inputs.length; ++n)
                 if (Inputs[n].type == 'checkbox')
                 {
                     Inputs[n].checked = HeaderCBControl.checked;
                 }
             return false;
         }
       </script>

【讨论】:

    猜你喜欢
    • 2011-04-04
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多