点击删除按钮,动态生成的控件全部消失,谁能帮我看看?
KemuControl.ascx<table class="style1">
    <tr>
        <td colspan="2">
<asp:Label ID="kemu_name" runat="server"></asp:Label>
        </td>
    </tr>
    <tr>
        <td colspan="2">
<asp:Image ID="kemu_img" runat="server" Height="100px" Width="100px" />
        </td>
    </tr>
    <tr>
        <td>
<asp:LinkButton ID="edit" runat="server" >编辑</asp:LinkButton>
        </td>
        <td><asp:LinkButton ID="shanchu" runat="server" >删除</asp:LinkButton>
        </td>
    </tr>
</table>后台文件 public partial class KemuControl : System.Web.UI.UserControl
    {
        private string kemu_id;
        public string kemu_ID
        {
            set { this.kemu_id = value; }
            get { return kemu_id; }        }
        public string kemu_Name
        {
            set { this.kemu_name.Text = value; }        }
        public string obj_Img
        {
            set { this.kemu_img.ImageUrl = value; }        }
        public string shanchu_ID
        {
            set { this.shanchu.ID = value; }
            get { return shanchu.ID; }        }
        protected void Page_Load(object sender, EventArgs e)
        {                //this.del.Click += new EventHandler(del_Click);
                string sql = "select * from [obj] where obj_id='" + this.kemu_id + "'";
                SqlCommand cmd = new SqlCommand();
                SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, sql, null);
                if (dr.Read())
                {
                    this.kemu_name.Text = dr.GetString(1);
                    this.shanchu.Click += new EventHandler(shanchu_Click);
                    this.kemu_img.ImageUrl = "../kemu/" + dr.GetString(1) + ".png";                }
                dr.Close();        }        protected void edit_Click(object sender, EventArgs e)
        {        }
        protected void shanchu_Click(object sender, EventArgs e)
        {
                string sql = "delete from obj where obj_id='" + this.kemu_ID + "'";
                SqlCommand cmd = new SqlCommand();
                using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
                {
                    conn.Open();
                    SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sql, null);
                    System.IO.File.Delete(Server.MapPath("/admin/kemu/" + this.kemu_name.Text + ".png"));                }
            }
        }
Default.aspx<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
<link href="~/Styles/ModalUpdateProgress.css" rel="stylesheet" type="text/css" />
<link href="~/pix/msgbox/default.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
       
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
    <uc1:uscMsgBox ID="msgbox" runat="server" ></uc1:uscMsgBox>
    <div>
     <asp:Table ID="Table1" runat="server">
         
        </asp:Table>
    </div>        <asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="add" PopupControlID="add_kemu" 
        BackgroundCssClass="modalProgressGreyBackground" CancelControlID="cancel">
        </asp:ModalPopupExtender>
  <asp:Button ID="add" runat="server" Text="添加" />
</ContentTemplate></asp:UpdatePanel> <asp:ModalUpdateProgress ID="ModalUpdateProgress1" runat="server"
                            AssociatedUpdatePanelID="UpdatePanel1" BackgroundCssClass="modalProgressGreyBackground">
                            <ProgressTemplate>
                                <div class="modalPopup">
                                Loading..
                                  <img src="../pix/loading.gif" width ="18px" height="18px" align="middle" alt=""/></div>
                            </ProgressTemplate>
                </asp:ModalUpdateProgress><asp:Panel ID="add_kemu" runat="server" style="display:none" >
        <p>科目名称:<asp:TextBox ID="add_kemu_name" runat="server"></asp:TextBox>
        </p>
    <asp:FileUpload ID="AsyncFileUpload1" runat="server"/>
        <asp:LinkButton ID="save_kemu" runat="server" Text="保存科目" onclick="save_kemu_Click"></asp:LinkButton>
        <asp:LinkButton ID="cancel" runat="server" Text="取消"></asp:LinkButton>
</asp:Panel>    </form>
</body>
</html>
Default.aspx.csprotected void addcontrol()
        {
                string sql = "select * from [obj]";
                SqlCommand cmd = new SqlCommand();
                int i = 0;
                SqlDataReader r = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, sql, null);
                System.Web.UI.WebControls.TableRow tr = new TableRow();
                while (r.Read())
                {
                    i = i + 1;
                    System.Web.UI.WebControls.TableCell tc = new TableCell();
                    KemuControl kemu = (KemuControl)LoadControl("~/admin/control/KemuControl.ascx");//加载object用户控件;
                    //PlaceHolder1.Controls.Add(kemu);
                    kemu.EnableViewState = true;
                    kemu.ID = r.GetString(1) + Convert.ToString(i);
                    kemu.kemu_ID = Convert.ToString(r.GetInt32(0));
                    kemu.shanchu.ID = Convert.ToString(r.GetInt32(0));
                    kemu.shanchu.Click += new EventHandler(shanchu_Click);
                    tc.Controls.Add(kemu);
                    tr.Controls.Add(tc);
                    if (i % 5 == 0)
                    {
                        this.Table1.Rows.Add(tr);
                        tr = new TableRow();
                    }
                    if (i % 5 != 0)
                    {
                        this.Table1.Rows.Add(tr);
                    }
            }
                r.Close();        }        protected void shanchu_Click(object sender, EventArgs e)
        { 
                addcontrol();        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                addcontrol();
            }
        }        protected void save_kemu_Click(object sender, EventArgs e)
        {
            
            string s = ConfigurationManager.ConnectionStrings["siteconn"].ConnectionString;
            SqlConnection conn = new SqlConnection(s);
            conn.Open();
            SqlCommand sqlcom = conn.CreateCommand();
            sqlcom.CommandText = "select * from [obj] where obj_name='" + add_kemu_name.Text + "'";
            SqlDataReader r = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, sqlcom.CommandText, null);
            
            if (r.Read())
            {
                msgbox.AddMessage("已存在此科目!", msgbox.enmMessageType.Attention);
                
            }
            else 
            {
                try
                {
                     string sql = "insert into [obj] (obj_name) values ('" + add_kemu_name.Text + "')";
                     SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sql, null);
                     save_img();
                     //msgbox.AddMessage("添加科目成功!", msgbox.enmMessageType.Success);
                     addcontrol();
                     
                }
                catch (Exception ex)
                {
                    msgbox.AddMessage(ex.Message, msgbox.enmMessageType.Error);
                }
                conn.Close();
            
        }
            
        }
问题:添加科目的时候可以实时刷新动态生成的用户控件,可是点击用户控件的删除按钮是,动态生成的用户控件全部消失。若去掉if (!IsPostBack)则可以执行删除,可是添加删除都要点击两次,回发后才会刷新,谁能帮帮我??

解决方案 »

  1.   

    动态创建控件那一段放到Page_Init中试一下
      

  2.   

    我说的是你的protected void addcontrol()这个方法
    要放在aspx的Page_Init中调用
      

  3.   

    Refer:
    http://www.cnblogs.com/insus/p/3197194.html
      

  4.   

    点击添加的时候Table能实时更新了,但是点击用户控件的删除时需要点两次才能把用户控件从Table中移除,this.Table1.Controls.Remove();里面怎么写呢,我想点击删除的时候把该用户控件从Table中移除
      

  5.   

    你的代码太多,而描述只有一句话。博客园有一种令人讨厌的恶习,许多动不动上来没说几句话,就来一句“废话少说,懒得解释,上代码”,然后就抄袭一大堆代码来填充篇幅。看到这种懒得分析解释的帖子,我也懒得看代码。而你的问题恰恰是这种风格的,你的代码太多了,让人发愁去看。我随便搜一下以前回复的帖子,获取可以帮助你了解一点点asp.net控件开发的基本知识:http://bbs.csdn.net/topics/380169102
      

  6.   

    已自行解决了,绑定时先this.Table1.Controls.Clear();就OK了