最后100分了.谁知道为什么我就给谁!
我已经为这个问题想了好多天了.我在页面上放了一个按钮和一个表格,ID是非功过addTable.想通过点击这个按钮添加表格的行,点击一次就添加一行.可是当我点击的时候,表格的行的数目都是只有一行,而新添加的行把旧的行覆盖掉了,请问这是怎么回事?请出示具体的方法.还有我也已经在page_load中写了不起 if(!Page.Ispostback)
{
}
谁能解决,我把这剩下的100分给谁!
private void add_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
TableRowAdd();
}
private void TableRowAdd()
{
HtmlTableRow newRow=new HtmlTableRow();
HtmlTableCell cell_1=new HtmlTableCell();
cell_1.InnerText=smallSubjectB.SelectedItem.Text;
newRow.Cells.Add(cell_1);
HtmlTableCell cell_2=new HtmlTableCell();
cell_2.InnerText=smallerSubject.SelectedItem.Text;
newRow.Cells.Add(cell_2);
HtmlTableCell cell_3=new HtmlTableCell();
cell_3.InnerText=costsB.Text;
newRow.Cells.Add(cell_3);
admin.Rows.Add(newRow);
}
问题点数:0、回复次数:23Top
1 楼zhushizu(从来就没有救世祖)回复于 2004-09-01 14:10:35 得分 0
是呀,我也是想了好久。。关注中。。。Top
2 楼yichuan1982(亦川——四川新津)回复于 2004-09-01 14:14:41 得分 0
关注中Top
3 楼joedong()回复于 2004-09-01 14:18:09 得分 0
你一次性循环添加就可以,每一次提交 HtmlTable 又都被重新实例化了。
这个和PlaceHandler的问题很类似吧Top
4 楼bushido(大饼)回复于 2004-09-01 14:18:50 得分 0
为什么不用js做,
你这样做,可以建一个session对象来保存HtmlTable对象Top
5 楼lanhai0859(猪头)回复于 2004-09-01 14:20:16 得分 0
HtmlTableRow newRow=new HtmlTableRow();
不要放到函数里Top
6 楼xzhy80(算了吧,散了吧)回复于 2004-09-01 14:24:53 得分 0
HtmlTableRow newRow=new HtmlTableRow();
每次都重新定义了一次
Top
7 楼btut2004(养鱼炒股)回复于 2004-09-01 14:30:14 得分 0
不太清楚问什么,不过你可以这样。
for (int i=0;i<rownum;i++)
{
admin.Rows.Add(newRow[i]);
}
Top
8 楼wbj_02(天朝舰队)回复于 2004-09-01 14:36:16 得分 0
lanhai0859(猪头) 如果我HtmlTableRow newRow=new HtmlTableRow()不放在函数里,那那个函数也就不能用了,那还不是一样.Top
9 楼yichuan1982(亦川——四川新津)回复于 2004-09-01 14:42:42 得分 0
我还真没遇到过这种情况
代码上看应该没错Top
10 楼passacaglia(神秘园)回复于 2004-09-01 14:44:09 得分 0
增加一行后,再按增加按钮的时候table保持的状态没有包括开始新增的一行
可以用js结合hidden来实现啊Top
11 楼wbj_02(天朝舰队)回复于 2004-09-01 14:44:49 得分 0
会不会是因为放在按钮里面的原因.我看书上例子里面用循环的添加行跟这也差不多,那个例子都可以添加得了.为什么这边就不行了.Top
12 楼jamzh(Show me the money!!!)回复于 2004-09-01 14:46:24 得分 0
用javascript!Top
13 楼wbj_02(天朝舰队)回复于 2004-09-01 14:47:56 得分 0
楼上的可不可以把代码写出来,因为我对JS不太了解.Top
14 楼wbj_02(天朝舰队)回复于 2004-09-01 14:56:29 得分 0
如果要结合JS那应该怎么写呢.Top
15 楼noahart(八卦小子)回复于 2004-09-01 15:58:28 得分 0
<input type="button" value="add" onclick="insert_row()">
<table name='tbl' id="tbl" border="1" width=300>
</table>
<script>
var i=0
function insert_row(){
i++
R=tbl.insertRow()
C=R.insertCell()
C.innerHTML="1"
C=R.insertCell()
C.innerHTML="2"
C=R.insertCell()
C.innerHTML="3"
}
</script>
Top
16 楼passacaglia(神秘园)回复于 2004-09-01 16:02:20 得分 0
下面用Session的方法绝对可以!
if(!Page.IsPostBack)
{
Session["tbRows"]=new ArrayList();
}
private void TableRowAdd()
{
HtmlTableRow newRow=new HtmlTableRow();
HtmlTableCell cell_1=new HtmlTableCell();
cell_1.InnerText=smallSubjectB.SelectedItem.Text;
newRow.Cells.Add(cell_1);
HtmlTableCell cell_2=new HtmlTableCell();
cell_2.InnerText=smallerSubject.SelectedItem.Text;
newRow.Cells.Add(cell_2);
HtmlTableCell cell_3=new HtmlTableCell();
cell_3.InnerText=costsB.Text;
newRow.Cells.Add(cell_3);
((ArrayList)Session["tbRows"]).Add(newRow);
foreach(HtmlTableRow r in (ArrayList)Session["tbRows"])
{
admin.Rows.Add(r);
}
}
Top
17 楼dxphero(火鸟hero)回复于 2004-09-01 16:12:36 得分 0
你这个画的是一行
只要你一点击按钮就会画新的一行你虽然写的是增加一行但是最终画出来的还是一行,
如果要解决你这个问题你就要利用for循环
每次添加一行就让他画一次表格
DataTable table =ds.Tables["table"].Rows;
for(int i=0;i<ds.Tables["table"].Rows.count;i++)
{
HtmlTableRow newRow=new HtmlTableRow();
HtmlTableCell cell_1=new HtmlTableCell();
cell_1.InnerText=smallSubjectB.SelectedItem.Text;
newRow.Cells.Add(cell_1);
HtmlTableCell cell_2=new HtmlTableCell();
cell_2.InnerText=smallerSubject.SelectedItem.Text;
newRow.Cells.Add(cell_2);
HtmlTableCell cell_3=new HtmlTableCell();
cell_3.InnerText=costsB.Text;
newRow.Cells.Add(cell_3);
}
table.Control.Add(newRow);Top
18 楼simonllf(simon)回复于 2004-09-01 16:41:24 得分 0
MARKTop
19 楼danlog(龙帝)回复于 2004-09-01 17:06:06 得分 0
帮你顶!Top
20 楼tianwenjie()回复于 2004-09-01 18:38:49 得分 0
只好用javascript 实现了,八卦小子的方法就可以
Top
21 楼huguojunsy(Myth)回复于 2004-09-02 08:42:54 得分 0
把你那个admin申明为那个页面static变量。因为如果不这样,每次点按钮回调后admin起始都初始化了一次。Top
22 楼Seeko0(阿 枫(终点又回到起点,到现在我才发现))回复于 2004-09-02 11:31:15 得分 0
我的方法是每次创建新行的时候,先重新创建以前创建的行Top
23 楼zjcsdnjp()回复于 2004-09-02 13:54:58 得分 0
代码没错,但要看你的admin放在什么位置了,估计可能被多次初始化Top




