问题描述
我使用asp.net的web控件Table,在后台动态增加行,可我每次添加都是把以前的行覆盖了,不能在后面直接添加,请问是什么原因呢?该如何解决?
解决方案
解决方案二:
顶起来,很舒服!
解决方案三:
TableRowtr=newTableRow();//......table.Rows.Add(tr);
解决方案四:
引用2楼dalmeeme的回复:
TableRowtr=newTableRow();//......table.Rows.Add(tr);
+1
解决方案五:
楼上的,我把我的代码贴出来你看看吧!///<summary>///加载Table(根据参数加载行数)///</summary>///<paramname="iRow">需要加载的行数</param>privatevoidInitTable(intiRow,intiTable){for(inti=0;i<iRow;i++){tr=newTableRow();td=newTableCell();td.ID="ColId"+i+1;//设置第一个单元格的IDtd.Text=(iTable+i).ToString();//设置第一个单元格文本td.Width=Unit.Pixel(60);tr.Cells.Add(td);//设置第二个单元格的ID和单元格文本提交时间td=newTableCell();td.ID="ColDate"+i+1;td.Text=DateTime.Now.ToString("yyyy-MM-dd");td.Width=Unit.Point(120);tr.Cells.Add(td);//设置第三个单元格的ID和单元格文本提交人td=newTableCell();td.ID="ColAuthor"+i+1;TextBoxtxtAuthor=newTextBox();txtAuthor.Width=Unit.Pixel(120);txtAuthor.ID="txtAuthor"+i.ToString();td.Controls.Add(txtAuthor);td.Width=Unit.Point(120);tr.Cells.Add(td);//设置第四个单元格的ID和单元格文本金额td=newTableCell();td.ID="ColMoney"+i+1;TextBoxtxtMoney=newTextBox();txtMoney.ID="txtMoney"+i.ToString();txtMoney.Width=Unit.Pixel(100);td.Controls.Add(txtMoney);td.Width=Unit.Point(100);tr.Cells.Add(td);//设置第五个单元格的ID和单元格文本审核依据td=newTableCell();td.ID="ColPayment"+i+1;TextBoxtxtPayment=newTextBox();txtPayment.ID="txtPayment"+i.ToString();txtPayment.Width=Unit.Pixel(200);td.Controls.Add(txtPayment);td.Width=Unit.Point(200);tr.Cells.Add(td);Table1.Rows.Add(tr);}iRow=Table1.Rows.Count;}
解决方案六:
我是在页面加载时先增加4行,让后点击【新增】按钮再增加一行,但是增加了新行就把之前的几行全覆盖了,只剩最新的一行!
解决方案七:
你可以把开始的表格存入ViewState中点击新增时取出ViewState赋给新的表格实行添加行
解决方案八:
引用6楼gj462375513的回复:
你可以把开始的表格存入ViewState中点击新增时取出ViewState赋给新的表格实行添加行
请问应该怎么写呢?是这样写么:ViewState["table"]=Table1;
我这样写报错了啊,如下:程序集“System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”中的类型“System.Web.UI.WebControls.Table”未标记为可序列化。
解决方案九:
tr、td不能用成员变量,要用局部变量。
解决方案十:
解决方案十一:
大家好,我还是那个问题Table添加新行,我把所有的代码都贴出来protectedvoidPage_Load(objectsender,EventArgse){intiTable=Table1.Rows.Count;if(!IsPostBack){ViewState["iRow"]=Table1.Rows.Count;}else{//InitTable(4,iTable);//ViewState["iRow"]=Table1.Rows.Count;ViewState["iRow"]=Table1.Rows.Count;}}///<summary>///加载Table(根据参数加载行数)///</summary>///<paramname="iRow">需要加载的行数</param>privatevoidInitTable(intiRow,intiTable){TableRowtr;TableCelltd;for(inti=0;i<iRow;i++){tr=newTableRow();td=newTableCell();td.ID="ColId"+i+1;//设置第一个单元格的IDtd.Text=(iTable+i).ToString();//设置第一个单元格文本td.Width=Unit.Pixel(60);tr.Cells.Add(td);//设置第二个单元格的ID和单元格文本提交时间td=newTableCell();td.ID="ColDate"+i+1;td.Text=DateTime.Now.ToString("yyyy-MM-dd");td.Width=Unit.Point(120);tr.Cells.Add(td);//设置第三个单元格的ID和单元格文本提交人td=newTableCell();td.ID="ColAuthor"+i+1;TextBoxtxtAuthor=newTextBox();txtAuthor.Width=Unit.Pixel(120);txtAuthor.ID="txtAuthor"+i.ToString();td.Controls.Add(txtAuthor);td.Width=Unit.Point(120);tr.Cells.Add(td);//设置第四个单元格的ID和单元格文本金额td=newTableCell();td.ID="ColMoney"+i+1;TextBoxtxtMoney=newTextBox();txtMoney.ID="txtMoney"+i.ToString();txtMoney.Width=Unit.Pixel(100);td.Controls.Add(txtMoney);td.Width=Unit.Point(100);tr.Cells.Add(td);//设置第五个单元格的ID和单元格文本审核依据td=newTableCell();td.ID="ColPayment"+i+1;TextBoxtxtPayment=newTextBox();txtPayment.ID="txtPayment"+i.ToString();txtPayment.Width=Unit.Pixel(200);td.Controls.Add(txtPayment);td.Width=Unit.Point(200);tr.Cells.Add(td);Table1.Rows.Add(tr);}iRow=Table1.Rows.Count;}///<summary>//////</summary>///<paramname="sender"></param>///<paramname="e"></param>protectedvoidbtnAdd_Click(objectsender,EventArgse){intirow=Convert.ToInt32(ViewState["iRow"]);irow=Table1.Rows.Count;InitTable(1,irow);}
我在button的事件里执行添加新行,但是只能添加一次,我在调试的时候发现,第一次完成了,但是table.rows.count的值还是没变,所以导致第二次添加不成功。请问这是什么原因呢?为什么table1.rows.count的值没有改变呢?