动态增加HtmlTable的Row时,Postback后消失了,怎么办? 这是自然的,你做的新增并没有进入viewstate 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if(!Page.IsPostBack){HtmlTableRow tr = new HtmlTableRow();HtmlTableCell td = new HtmlTableCell();td.InnerHtml="aaa";tr.Cells.Add(td);ht.Rows.Add(tr);//ht是界面上的一个Htmltable} 我也碰到过,不要用if(!ispostboak)检测,它会再建立page_load(..){HtmlTableRow tr = new HtmlTableRow();HtmlTableCell td = new HtmlTableCell();td.InnerHtml="aaa";tr.Cells.Add(td);ht.Rows.Add(tr);//ht是界面上的一个Htmltable} 假如td.Control.Add(new TextBox());tr.Cells.Add(td);页面回传了虽然消失,但再调用动态创建行过程再新建立后,居然还可以保留在单元格文本框中输入的内容,真奇怪,大家说说这是为什么 刚刚才发了一帖相关的:http://expert.csdn.net/Expert/TopicView1.asp?id=2555813 还是手动维护ViewState嘛和我一样 给你一段注意别放在ispostback加上protected System.Web.UI.HtmlControls.HtmlTable ta;HtmlTableRow row4 = new HtmlTableRow(); Label string4 = new Label(); ds = conadd.ExecuteSqlDs("select colname, colhy, length from confor(int i= 0;i<ds.Tables[0].Rows.Count;i++){ HtmlTableCell cell40 = new HtmlTableCell(); HtmlTableCell cell41 = new HtmlTableCell(); string4 = new Label(); string4.ID = "Label"+ds.Tables[0].Rows[i]["colname"].ToStrin string4.Text = ds.Tables[0].Rows[i]["colhy"].ToString(); cell40 = new HtmlTableCell(); cell40.Controls.Add(string4); text4 = new TextBox[ds.Tables[0].Rows.Count]; text4[i] = new TextBox(); text4[i].ID = ds.Tables[0].Rows[i]["colname"].ToString(); text4[i].Width = 100; text4[i].ToolTip ="自定义货币类型!"; stringtext4.Add(text4[i].ID); cell41 = new HtmlTableCell(); cell41.Controls.Add(text4[i]); row4 = new HtmlTableRow(); row4.Cells.Add(cell40); row4.Cells.Add(cell41); ta.Rows.Add(row4);}//**************************************************************HtmlTableRow rowvv = new HtmlTableRow();rowvv.Align = "center";Button Btn = new Button();Btn.ID = "Btn_0";Btn.Width = 60;Btn.Height = 20;Btn.Text = "提 交";Btn.BorderStyle = BorderStyle.Solid ;Btn.CssClass = "aa";Btn.BorderWidth = 1;Button BtnLook = new Button();BtnLook.ID = "Btn_1";BtnLook.Width = 60;BtnLook.Height = 20;BtnLook.Text = "查 看";BtnLook.CausesValidation = false;BtnLook.BorderStyle = BorderStyle.Solid ;BtnLook.CssClass = "aa";BtnLook.BorderWidth = 1;HtmlTableCell cell = new HtmlTableCell();cell.ColSpan = 2;cell.Controls.Add(Btn);cell.Controls.Add(BtnLook); rowvv.Cells.Add(cell);ta.Rows.Add(rowvv);Btn.Click +=new EventHandler(AddButton_Click);BtnLook.Click +=new EventHandler(ButtonLook_Click); 加一个string[]的属性get时从ViewState里取set时往ViewState里存Load时:if (!PostBack) { 初始化此属性(可以用数据库的结果填充)}else { 将页面内控件的值填充写入属性(这相当于保存当前视图状态)}绑定时: 将此属性内的值依次写入控件的值(这相当于恢复视图状态) Html控件没有ViewState来保存原来的值,方法有2:一个是不要加if(!IsPostBack)判断,每次进入Page_Load事件时给他付值,第二是把Html对象设置为静态Static变量。///////////////////建议:想这种动态加在行的行为,最好用web control 来做,因为他们都有ViewState来保存状态值。 哈哈,同志们//定义一个模块级变量,记录动态增加记录数private int intAddRows = 0;private void Page_Load(object sender, System.EventArgs e){ if (ViewState["intAddRows"] != null) { intAddRows = (int)ViewState["intAddRows"]; } // 在此调用增加行函数或语句 for(int i=0 ; i < intAddRows;i++) { //... }}private void btnContinue_Click(object sender, System.EventArgs e){ intAddRows ++; ViewState["intAddRows"] = intAddRows;} 好谢谢大家,问题解决了!感谢 uno(钢盅郭子) liuzhonghe(呆头鹅) flygoldfish(flygoldfish) 不用在设计界面拉出HtmlTable 控件public class WebForm5 : System.Web.UI.Page { protected System.Web.UI.WebControls.Button Button1; protected static HtmlTable ht=new HtmlTable(); private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { HtmlTableRow tr = new HtmlTableRow(); HtmlTableCell td = new HtmlTableCell(); td.InnerHtml="aaa"; tr.Cells.Add(td); ht.Rows.Add(tr);// Page.Controls.Add(ht); } } private void Button1_Click(object sender, System.EventArgs e) { HtmlTableRow tr = new HtmlTableRow(); HtmlTableCell td = new HtmlTableCell(); td.InnerHtml="aaa"; tr.Cells.Add(td); ht.Rows.Add(tr); Page.Controls.Add(ht); }} asp.net 创建word问题 asp.net button单击后的问题? 继续IE6问题 asp.net 中数据的保存,主要想知道session的有关问题 Jquery的Ajax之get方法能不能跨域? 如何判断页面控件的类型?。。。高手们。。。 关于ASP.NET的错误,请高手给以解决 我有个关于asp.net调用数据库方面的问题向各位高手请教!! 我想慢慢地开始写一个论坛,可是........?><>>? .net会应用广泛吗? 如何在DATAGRID中增加,删除一行? 200分,求救!!!SN-K ThePHile.SNk 在命令行中输入,怎么不行?
{
HtmlTableRow tr = new HtmlTableRow();
HtmlTableCell td = new HtmlTableCell();
td.InnerHtml="aaa";
tr.Cells.Add(td);
ht.Rows.Add(tr);//ht是界面上的一个Htmltable
}
page_load(..)
{
HtmlTableRow tr = new HtmlTableRow();
HtmlTableCell td = new HtmlTableCell();
td.InnerHtml="aaa";
tr.Cells.Add(td);
ht.Rows.Add(tr);//ht是界面上的一个Htmltable
}
td.Control.Add(new TextBox());
tr.Cells.Add(td);
页面回传了虽然消失,但再调用动态创建行过程
再新建立后,居然还可以保留在单元格文本框中输入的内容,真奇怪,大家说说这是为什么
http://expert.csdn.net/Expert/TopicView1.asp?id=2555813
Label string4 = new Label();
ds = conadd.ExecuteSqlDs("select colname, colhy, length from con
for(int i= 0;i<ds.Tables[0].Rows.Count;i++)
{ HtmlTableCell cell40 = new HtmlTableCell();
HtmlTableCell cell41 = new HtmlTableCell();
string4 = new Label();
string4.ID = "Label"+ds.Tables[0].Rows[i]["colname"].ToStrin
string4.Text = ds.Tables[0].Rows[i]["colhy"].ToString();
cell40 = new HtmlTableCell();
cell40.Controls.Add(string4); text4 = new TextBox[ds.Tables[0].Rows.Count];
text4[i] = new TextBox();
text4[i].ID = ds.Tables[0].Rows[i]["colname"].ToString();
text4[i].Width = 100;
text4[i].ToolTip ="自定义货币类型!";
stringtext4.Add(text4[i].ID);
cell41 = new HtmlTableCell();
cell41.Controls.Add(text4[i]); row4 = new HtmlTableRow();
row4.Cells.Add(cell40);
row4.Cells.Add(cell41);
ta.Rows.Add(row4);
}
//**************************************************************HtmlTableRow rowvv = new HtmlTableRow();
rowvv.Align = "center";
Button Btn = new Button();
Btn.ID = "Btn_0";
Btn.Width = 60;
Btn.Height = 20;
Btn.Text = "提 交";
Btn.BorderStyle = BorderStyle.Solid ;
Btn.CssClass = "aa";
Btn.BorderWidth = 1;Button BtnLook = new Button();
BtnLook.ID = "Btn_1";
BtnLook.Width = 60;
BtnLook.Height = 20;
BtnLook.Text = "查 看";
BtnLook.CausesValidation = false;
BtnLook.BorderStyle = BorderStyle.Solid ;
BtnLook.CssClass = "aa";
BtnLook.BorderWidth = 1;HtmlTableCell cell = new HtmlTableCell();
cell.ColSpan = 2;
cell.Controls.Add(Btn);
cell.Controls.Add(BtnLook);
rowvv.Cells.Add(cell);
ta.Rows.Add(rowvv);
Btn.Click +=new EventHandler(AddButton_Click);
BtnLook.Click +=new EventHandler(ButtonLook_Click);
set时往ViewState里存Load时:
if (!PostBack) {
初始化此属性(可以用数据库的结果填充)
}
else {
将页面内控件的值填充写入属性(这相当于保存当前视图状态)
}绑定时:
将此属性内的值依次写入控件的值(这相当于恢复视图状态)
方法有2:一个是不要加if(!IsPostBack)判断,每次进入Page_Load事件时给他付值,第二是把Html对象设置为静态Static变量。
///////////////////
建议:想这种动态加在行的行为,最好用web control 来做,因为他们都有ViewState来保存状态值。
//定义一个模块级变量,记录动态增加记录数
private int intAddRows = 0;private void Page_Load(object sender, System.EventArgs e)
{
if (ViewState["intAddRows"] != null)
{
intAddRows = (int)ViewState["intAddRows"];
} // 在此调用增加行函数或语句
for(int i=0 ; i < intAddRows;i++)
{
//...
}
}private void btnContinue_Click(object sender, System.EventArgs e)
{
intAddRows ++;
ViewState["intAddRows"] = intAddRows;
}
public class WebForm5 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected static HtmlTable ht=new HtmlTable();
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
HtmlTableRow tr = new HtmlTableRow();
HtmlTableCell td = new HtmlTableCell();
td.InnerHtml="aaa";
tr.Cells.Add(td);
ht.Rows.Add(tr);//
Page.Controls.Add(ht);
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
HtmlTableRow tr = new HtmlTableRow();
HtmlTableCell td = new HtmlTableCell();
td.InnerHtml="aaa";
tr.Cells.Add(td);
ht.Rows.Add(tr);
Page.Controls.Add(ht);
}
}