简体   繁体   中英

Button click event not working inside repeater control

I am working on a project where I am using a repeater control and in its item data bound event I am adding some data and two buttons-edit and delete.But click event of my buttons is not working and when I click any of these two buttons my repeater data get disappeared.

Following is my code

protected void fillrptmapping()
{
    ds = objcce1.selectSubject(schoolcode);
    rptmapping.DataSource = ds;
    rptmapping.DataBind();
}
protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Label lblsubcode = (Label)e.Item.FindControl("lblsubcode");
        Table tblmapping = (Table)e.Item.FindControl("tblmapping");
        int subcode =Convert.ToInt32(lblsubcode.Text.ToString());
        DataSet ds1 = new DataSet();
        ds1 = objcce1.selectSubjectskillmapping(schoolcode);
        DataSet ds2 = new DataSet();
        ds2 = objcce1.selectAssessfullmapping(schoolcode);
        DataRow[] dr1;
        DataRow[] dr2;

                TableRow tr = new TableRow();
                tr.Width = 300;
                TableCell tc = new TableCell();
                tr.Width = 300;
                tc.Height = 100;
                //selecting skillmappingcodes
                dr1 = ds1.Tables[0].Select("subjectgroupcode='" + subcode + "'");
                for (int j = 0; j < dr1.Length; j++)
                {
                    Label lblskill = new Label();
                    lblskill.CssClass = "lblskilltxt";
                    lblskill.Text = dr1[j]["skillname"].ToString() + "<br/>";
                    tc.Controls.Add(lblskill);
                    dr2 = ds2.Tables[0].Select("skillmappingcode='" + dr1[j]["skillmappingcode"] + "'");
                    for (int k = 0; k < dr2.Length; k++)
                    {
                        ImageButton imgedit = new ImageButton();
                        imgedit.ImageUrl = "../Images/edit.jpg";
                        imgedit.Width = 25;
                        imgedit.Height = 25;
                        imgedit.ID = dr2[k]["assessmentareamappingcode"].ToString();
                        imgedit.Click += new ImageClickEventHandler(imgeditassessmapping_OnClick);
                        //Button btnedit = new Button();
                        //btnedit.ID = dr2[k]["assessmentareamappingcode"].ToString();
                        //btnedit.Click += new System.EventHandler(this.imgeditassessmapping_OnClick);
                        ImageButton imgdelete = new ImageButton();
                        imgdelete.Width = 25;
                        imgdelete.Height = 25;
                        imgdelete.ImageUrl = "../Images/delete.jpg";
                        imgdelete.Click += new ImageClickEventHandler(this.imgdeleteassessmapping_OnClick);
                        Label lblarea = new Label();
                        lblarea.Text = dr2[k]["assessmentareaname"].ToString() + "<br/><br/>";
                        tc.Controls.Add(btnedit);
                        tc.Controls.Add(imgdelete);
                        tc.Controls.Add(lblarea);
                    }
                }
                //selecting subjectgroup in area table
                dr2 = ds2.Tables[0].Select("subgroupcode='" + subcode + "'");
                for (int l = 0; l < dr2.Length; l++)
                {
                    ImageButton imgedit = new ImageButton();
                    imgedit.Width = 25;
                    imgedit.Height = 25;
                    imgedit.ImageUrl = "../Images/edit.jpg";
                    imgedit.Click += new ImageClickEventHandler(this.imgeditassessmapping2_OnClick);
                    ImageButton imgdelete = new ImageButton();
                    imgdelete.Width = 25;
                    imgdelete.Height = 25;
                    imgdelete.ImageUrl = "../Images/delete.jpg";
                    imgdelete.Click += new ImageClickEventHandler(this.imgdeleteassessmapping2_OnClick);
                    Label lblarea = new Label();
                    lblarea.Text = dr2[l]["assessmentareaname"].ToString() + "<br/>";
                    tc.Controls.Add(imgedit);
                    tc.Controls.Add(imgdelete);
                    tc.Controls.Add(lblarea);
                }
                tr.Cells.Add(tc);
                tblmapping.Rows.Add(tr);            
    }
}
protected void imgeditassessmapping_OnClick(object sender,EventArgs e)
{
    Button img = sender as Button;
    string assessmappingcode = img.ID;
    ds =objcce1.selectAssessSkill(schoolcode, assessmappingcode);
    foreach (ListItem item in drpsubjectoption.Items)
    {
        if (item.Value == ds.Tables[0].Rows[0]["subjectgroupcode"].ToString())
        {
            item.Selected = true;
        }
    }
    rblmapping.SelectedIndex = 0;
    spanskill.Visible = true;
    drpmappingskill.Visible = true;
    foreach (ListItem item in drpmappingskill.Items)
    {
        if (item.Value == ds.Tables[0].Rows[0]["skillcode"].ToString())
        {
            item.Selected = true;
        }
    }
    pnlassessmapping.Visible = true;
    foreach (ListItem item in drpassessmapping.Items)
    {
        if (item.Value == ds.Tables[0].Rows[0]["assessmentareacode"].ToString())
        {
            item.Selected = true;
        }
    }
    foreach (ListItem item in drpmarkingtype.Items)
    {
        if (item.Text == ds.Tables[0].Rows[0]["type"].ToString())
        {
            item.Selected = true;
        }
    }
    foreach (ListItem item in rbldesc.Items)
    {
        if (item.Text == ds.Tables[0].Rows[0]["desindreq"].ToString())
        {
            item.Selected = true;
        }
    }
    btnsavemapping.Text = "Update";
}
protected void imgdeleteassessmapping_OnClick(object sender,ImageClickEventArgs e)
{
}

ASPX page code

<asp:Repeater ID="rptmapping" runat="server" OnItemDataBound="rep_ItemDataBound" >
                    <HeaderTemplate></HeaderTemplate>
                    <ItemTemplate>
                        <table>
                            <tr>
                                <td>
                                    <asp:Label ID="lblsubcode" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "subgroupcode")%>'></asp:Label>
                                    <asp:Label ID="lblsubject" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "subname")%>'></asp:Label>
                                    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="imgeditassessmapping_OnClick"/>
                                </td>
                            </tr>   
                            <tr>
                                <td>
                                    <asp:Table ID="tblmapping" runat="server" Width="300" BorderColor="Black" GridLines="both"></asp:Table>
                                </td>
                            </tr>                         
                         </table>
                    </ItemTemplate>
                </asp:Repeater>

Screenshot before button click

在此处输入图片说明

Screenshot after button click 在此处输入图片说明

You need to understand how your dynamic controls are being generated. They will need to be generated with the same IDs each time your page loads (ie on first load and on subsequent loads/post backs).

If the button doesn't exist (hasn't been generated) at the stage of the page lifecycle where it fires event handlers (eg button click events) then the event handler won't fire.

In general, the symptoms suggest that your ItemDataBound event handler isn't firing on postback; you may only be data binding if the request is not a postback. Getting the event to fire on each page request will help, but overall it would be better if you could have those buttons on the page all of the time, rather than dynamically generate them. That would give you a more reliable event handler.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM