none
请教asp.net 页面table控件,count总是为0 RRS feed

  • 问题

  • 请教asp.net 页面table控件,为什么count值总是为0,我都手动添加行和列了。

    代码如下:

        <asp:Table ID="Table1" runat="server">
        </asp:Table>

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                 TableRow tr = new TableRow();
                TableCell td = new TableCell();
                Label myL = new Label();
                myL.Text = "XXX";
                td.Controls.Add(myL);
                tr.Cells.Add(td);
                Table1.Rows.Add(tr);
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(this.Table1.Rows.Count.ToString());
        }

     

    输出总是为0,请问怎么解决? 谢谢!

    2010年8月11日 8:47

答案

全部回复

  • 因为你是动态创建的。!IsPostBack,Button1_Click是IsPostback=true了,因此不走你创建的那段代码了,应该是0
    【孟子E章】
    2010年8月12日 5:40
    版主
  • 把if (!IsPostBack)删掉应该可以达到你想要的结果

    点击按钮后会重载页面

    2010年8月12日 9:45
  • 版主您好,我的意图是这样的,不好描述,请看如下代码:

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
               
                DataTable dt = new DataTable();
                SqlDataAdapter sda = new SqlDataAdapter("select * from mytable", "connectionstring");
                sda.Fill(dt);
                int n=dt.Rows.Count;
                for (int i = 0; i < n; i++)
                {
                    TextBox tb = new TextBox();
                    tb.Text = dt.Rows[i][0].ToString();

                    HtmlTableRow tr = new HtmlTableRow();
                    HtmlTableCell td = new HtmlTableCell();

                    td.Controls.Add(tb);
                    tr.Cells.Add(td);
                    mytable.Rows.Add(tr); //mytable为HtmlTable控件
                }
               
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            int n = mytable.Rows.Count;
            for (int i = 0; i < n; i++)
            {
                TextBox tb=(TextBox)(mytable.Rows[i].Cells[0].Controls[0]);
                updataSQL(tb.Text); //更新数据库中的一条记录
            }
        }

    请问我应该怎么做才能现实这样的功能呢?谢谢。

    2010年8月12日 9:58
  • 这是服务器控件和html控件的一个区别,html控件没有viewstate,不能保存其状态,页面一回发你的mytable的状态就丢失了

    这种情况下你应该用服务器控件,如GridView之类的

    2010年8月12日 11:01
  • 如果我把它放到if(!IsPostBack)外的话,就达不到更新数据库的作用了,因为那值都是数据库里的值。呵呵,现在对表单提交的动作有点懵了,为什么要重新加载页面后才提交,而不是直接把表单提交到服务器呢?

    2010年8月13日 1:47
  • 这个办法我也想过。谢谢你们!
    2010年8月13日 1:47
  • 不明白你到底要怎么做。设置控件初始值的过程要写在if(!IsPostBack)里,点击按钮后把修改后的数据提交,有什么问题么?

     

    2010年8月13日 2:52
  • 为什么不使用服务器控件DataGrid进行数据绑定?
    2010年8月16日 6:53