现在Table里增加一行,假如第一次增加后为2行.
再一次增加时,Table里还是1行,而不是2行。请高手们指正
TextBox itemNew = new TextBox();
itemNew.ID = "ReportItem" + Convert.ToInt32(ViewState["ItemCount"]);
itemNew.Report_OnDel += new ReportItem.DelReort(itemCurrent_Report_OnDel);TableCell cell = new TableCell();
cell.Controls.Add(itemNew);TableRow row = new TableRow();
row.Cells.Add(cell);

解决方案 »

  1.   

    给cell和row的ID属性赋值,ID值不能相同
      

  2.   

    page_load里面有没有加ispostback?
      

  3.   

    肯定的。net的 回传机制  每个控件都有一个ViewState 回传时保留状态 
      

  4.   

    类似的功能,用js就能做
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dynamicAdd.aspx.cs" Inherits="WebApp.dynamicAdd" %><!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>    <script type="text/javascript">
            function addFile() {
                var _table = document.createElement("table");
                var _tbody = document.createElement("TBODY");
                var _row;
                var _cell;
                var rlen = parseInt(document.getElementById("rowlen").value);
                for (var i = 0; i < rlen; i++) {
                    _row = document.createElement("tr");
                    for (var j = 0; j < 3; j++) {
                        _cell = document.createElement("td");
                        var div = document.createElement("div");
                        var f = document.createElement("input");
                        f.setAttribute("type", "text")
                        f.setAttribute("name", "txtCardNo")
                        f.setAttribute("size", "20")
                        div.appendChild(f)
                        var d = document.createElement("input");
                        d.setAttribute("type", "button")
                        d.setAttribute("onclick", "deteFile(this)");
                        d.setAttribute("value", "移除")
                        div.appendChild(d)
                        _cell.appendChild(div);
                        _row.appendChild(_cell);
                    }
                    _tbody.appendChild(_row);
                }
                _table.appendChild(_tbody);
                var con = document.getElementById("_container");
                con.innerHTML = "";
                con.appendChild(_table);
            }        function deteFile(o) {
                while (o.tagName != "DIV") o = o.parentNode;
                o.parentNode.removeChild(o);
            }        function getAllTd() {
                document.getElementsByTagName("td")[0].style.backgroundImage = 'url(http://img.baidu.com/img/logo-zhidao.gif)';
            }
        </script></head>
    <body>
        <form id="form1" runat="server">
        <select id="rowlen">
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
        </select>
        <input value="add" type="button" onclick="addFile()" />
        <div id="_container">
        </div>
        <input type="button" value="ok" onclick="getAllTd()" />
        </form>
    </body>
    </html>
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dynamicAdd.aspx.cs" Inherits="WebApp.dynamicAdd" %><!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>    <script type="text/javascript">
            function addFile() {
                var _table = document.createElement("table");
                var _tbody = document.createElement("TBODY");
                var _row;
                var _cell;
                var rlen = parseInt(document.getElementById("rowlen").value);
                for (var i = 0; i < rlen; i++) {
                    _row = document.createElement("tr");
                    for (var j = 0; j < 3; j++) {
                        _cell = document.createElement("td");
                        var div = document.createElement("div");
                        var f = document.createElement("input");
                        f.setAttribute("type", "text")
                        f.setAttribute("name", "txtCardNo")
                        f.setAttribute("size", "20")
                        div.appendChild(f)
                        var d = document.createElement("input");
                        d.setAttribute("type", "button")
                        d.setAttribute("onclick", "deteFile(this)");
                        d.setAttribute("value", "移除")
                        div.appendChild(d)
                        _cell.appendChild(div);
                        _row.appendChild(_cell);
                    }
                    _tbody.appendChild(_row);
                }
                _table.appendChild(_tbody);
                var con = document.getElementById("_container");
                con.innerHTML = "";
                con.appendChild(_table);
            }        function deteFile(o) {
                while (o.tagName != "DIV") o = o.parentNode;
                o.parentNode.removeChild(o);
            }        function getAllTd() {
                document.getElementsByTagName("td")[0].style.backgroundImage = 'url(http://img.baidu.com/img/logo-zhidao.gif)';
            }
        </script></head>
    <body>
        <form id="form1" runat="server">
        <select id="rowlen">
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
        </select>
        <input value="add" type="button" onclick="addFile()" />
        <div id="_container">
        </div>
        <input type="button" value="ok" onclick="getAllTd()" />
        </form>
    </body>
    </html>protected void Page_Load(object sender, EventArgs e) {
                if (!IsPostBack) {
                    if (!string.IsNullOrEmpty(Request["txtCardNo"])) {
                        string[] strCardes = Request["txtCardNo"].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string strCard in strCardes) {
                            //to do
                        }
                    }
                }
            }
      

  5.   

    datalist、gridview都是table。你要自己写程序之前,可以学学人家datalist甚至gridview是怎么设计的。
      

  6.   

    值得注意的是,以编程方式对表行或单元格所做的任何添加或修改不在向服务器的发送间保持。这是因为表行和单元格本身就是控件,而不是 Table 控件的属性。要保持对表所做的任何更改,必须在每次回送后重新构造行和单元格。实际上,如果需要进行实质性的修改,建议使用 DataList、DataGrid 或 GridView 控件,而不是 Table 控件。因此,该 Table 类主要由控件开发人员使用。