繁体   English   中英

按钮单击事件在转发器控件中不起作用

[英]Button click event not working inside repeater control

我正在一个项目中使用中继器控件,并且在其项目数据绑定事件中添加了一些数据和两个按钮-编辑和删除。但是我的按钮的单击事件不起作用,当我单击这两个按钮中的任何一个时按钮,我的中继器数据消失了。

以下是我的代码

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页面代码

<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>

单击按钮之前的屏幕截图

在此处输入图片说明

单击按钮后的屏幕截图 在此处输入图片说明

您需要了解如何生成动态控件。 每次页面加载时(即,第一次加载时以及随后的加载/回发时),都需要使用相同的ID生成它们。

如果在页面生命周期内触发事件处理程序(例如,按钮单击事件)的按钮不存在(尚未生成),则事件处理程序将不会触发。

通常,这些症状表明您的ItemDataBound事件处理程序未在回发时触发;而是在回发时触发。 仅当请求不是回发时,您才可以绑定数据。 使事件在每个页面请求上触发都将有所帮助,但是总的来说,如果您可以一直在页面上放置这些按钮,而不是动态生成它们,那会更好。 这将为您提供更可靠的事件处理程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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