protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "edit")
        {
            e.Item.Controls.Clear();
            EditText = new TextBox();
            EditText.CssClass = "text width15p";
            e.Item.Controls.Add(EditText);            EditBut = new LinkButton();
            EditBut.EnableViewState = true;
            EditBut.ID = "EditBut";
            EditBut.CssClass = "btn floatleft";
            EditBut.Text = "保 存";
            EditBut.CommandName = "save";
            EditBut.CommandArgument = e.CommandArgument.ToString();
            e.Item.Controls.Add(EditBut);
            EditBut.Click += new System.EventHandler(EditClick);
        }
    }这个EditBut点击后消失,就是回发后这个控件消失。怎么样让他不消失,请各路高手指教。

解决方案 »

  1.   

    给你个参考地址:
    http://blog.csdn.net/liudongyue1987/archive/2009/05/04/4148942.aspx
      

  2.   

    你得把这个控件序列化成字符串发回去,然后在page_Load里反序列化出来
      

  3.   

    你postback 后动态添加的控件是肯定不存在的
    建议
    1:postback 后再绑定一次(这个不实用)
    2.先放控件,设置属性 visable = false, 然后也绑定事件,当command 是edit 的时候再 显示出来
      

  4.   


    比较“科学”的处理流程比较清晰简单,在控件的事件中很少修改控件,而是采取“V-->C-->M-->V”这种控制形式,即控件的事件中仅修改系统模型数据(而不是修改任何控件)。事实上,你可以在声明界面时使用绑定表达式等方法,根据数据来绑定出Repeater1的列,其中的文本和按钮的Visible属性可以绑定到数据属性上,而Repeater1_ItemCommand事件中只要修改数据属性然后调用一句“Repeater.DataBind();”就可以了。
      

  5.   

    然后调用一句“Repeater.DataBind();”就可以了  -->  然后调用一句“Repeater1.DataBind();”就可以了
      

  6.   

    hehe,我完全赞同sp1234的看法,就楼主的案例没有必要动态创建控件
      

  7.   

    http://blog.csdn.net/liudongyue1987/archive/2009/05/04/4148942.aspx
      

  8.   

    谢谢各位的回复,不动态创建控件那应该怎么弄呢?
    调用一句Repeater1.DataBind();后Repeater1其他行消失了。