页面上写了个
<asp:table id="t1" runat="server"></asp:table>
控件,然后我根据数据库读出的数据,往这个表里面动态加行,用这样的语句:
TableRow tr=new TableRow();
TableCell tc=new TableCell();
tc.Text="xx";
tr.Cells.Add(tc);
t1.Rows.Add(tr);这样结果是对了,行和列都动态加上去了,但是一旦触发了页面的服务器端按钮,激发了服务器端事件,刚才加的行全都消失了。这个问题该如何解决?(因为自定义的表形式比较复杂,不适合用DataGrid,才想到这个办法,谁知道有这么个大问题,真是太郁闷了!)

解决方案 »

  1.   

    添加个判断:if(!Page.isPostBack)
                 {
                  }
      

  2.   

    你的table的enableDateView是否为true?看样子好像是没保存视图状态造成的,在pageLoade里面跟踪以下,看传上来的table内容是否正确
      

  3.   

    在PageLoad里重新调用这个方法
    TableRow tr=new TableRow();
    TableCell tc=new TableCell();
    tc.Text="xx";
    tr.Cells.Add(tc);
    t1.Rows.Add(tr);
    就Ok了
      

  4.   

    这个方法是在一个按钮的点击事件里加的,就是一点按钮,就动态生成这个表格,但是生成以后再点了其他按钮的话,这些就全没了。和ispostback应该没有关系吧,不是页面初始化时调用的。我把动态加上的TableRow和TableCell的EnableViewState属性都手工设置成true了也没用。底楼同志你说的方法当然可以,问题是我这个方法要读取大量数据,速度很慢,如果每个按钮我都重来一次,显然不好啊。
      

  5.   

    我来帮你吧!主要看page_load
    private void Page_Load(object sender, System.EventArgs e)
    {
    if (ViewState["AddControl"]!= null)

    DropDownList DropDown = new DropDownList(); 
    PlaceHolder1.Controls.Add(DropDown);
    DropDown.ID="ControlID"; 

    }private void Addbtn_Click(object sender, System.EventArgs e)
    {
    DropDownList DropDown = new DropDownList(); 
    PlaceHolder1.Controls.Clear(); 
    PlaceHolder1.Controls.Add(DropDown); 
    DropDown.ID="ControlID"; 
    DropDown.Width=200;
    DropDown.Items.Add(new ListItem("北京","0"));
    DropDown.Items.Add(new ListItem("上海","1"));
    DropDown.Items.Add(new ListItem("河北","2"));
    ViewState["AddControl"] = true; 
    }
      

  6.   

    动态生成web服务器端控件当然只能像kingergold() 或者我这样。没办法。
    你要动态生成客户端控件就没这么麻烦了。呵呵
      

  7.   

    if(!Page.isPostBack)
                 {
                  }
    放这里就应该没事了
      

  8.   

    .net下这种动态添加控件的状态保存问题是最头疼的,简单的办法就是用session或者viewstate保存,在事件里面先读取它们的内容,如果为空再从数据库取。