我在后台写自动生成表格,表格里自动生成textbox,输入数据提交数据库,
我点一下“生成一行”按钮就生成一行,void bind()必须在pageload()里边,写入数据库的时候才能得到textbox的值,这样就出问题了,按牛执行了,pageload要在下一次提交服务器的时候才执行,就是生成行不能马上出来,用Response.Redirect(HttpContext.Current.Request.RawUrl);刷新,页面上不出现表格
用Page.RegisterStartupScript("refresh","<script>parent.top.history.go(0);</script>");刷新,就出现弹出窗口,要重新提交服务器,一直不会消失,
真郁闷,哪为高手给我解决了???下边是生成表函数和按钮执行事件。
void bind()
{
if(ViewState["begin"]==null)
{
ViewState["begin"]=0;
}
j=int.Parse(ViewState["begin"].ToString());
card.CellPadding=0;
card.CellSpacing=0;
for(int i=1;i<=j;i++)
{
TableRow tr=new TableRow();
for(int m=0;m<14;m++)
{
TableCell tc=new TableCell();
switch(m)
{
case 9:
DropDownList zhuorpin=new DropDownList();
zhuorpin.ID="d_transport_by"+i+m;
zhuorpin.Width=80;
zhuorpin.Items.Add(new ListItem("主单","0"));
zhuorpin.Items.Add(new ListItem("拼单","1"));
tc.Controls.Add(zhuorpin);
break;
case 10:
DropDownList pay_mode=new DropDownList();
pay_mode.ID="d_transport_by"+i+m;
pay_mode.Width=80;
pay_mode.Items.Add(new ListItem("现金","0"));
pay_mode.Items.Add(new ListItem("记帐","1"));
pay_mode.Items.Add(new ListItem("到付","2"));
tc.Controls.Add(pay_mode);
break; case 12:
DropDownList transport_by=new DropDownList();
transport_by.ID="d_transport_by"+i+m;
transport_by.Width=80;
transport_by.Items.Add(new ListItem("航空","0"));
transport_by.Items.Add(new ListItem("铁路","1"));
tc.Controls.Add(transport_by);
break;
default:
TextBox tb=new TextBox();
tb.ID="tb"+i+m;
tb.Width=80;
tc.Controls.Add(tb);
break;
}
tr.Cells.Add(tc);
card.Rows.Add(tr);
this.Panel1.Controls.Add(card);
}
}

} private void Button2_Click(object sender, System.EventArgs e)
{
if(ViewState["begin"]==null)
{
ViewState["begin"]=0;
}
        
ViewState["begin"]=int.Parse(ViewState["begin"].ToString())+1;
                   }

解决方案 »

  1.   

    不是很理解你的情况,你看看这个跟你的像不想,这是我以前做的
    http://www.keepbalance.net/silentwins/mydesign/login.aspx
    随便注册个账号,然后点发表论文,在下面有一串增加参与作者和减少参与作者按钮,你看看是不是跟你的情况差不多?
      

  2.   

    //增加论文页面
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace MyDesign
    {
    /// <summary>
    /// Add1 的摘要说明。
    /// </summary>
    public class Add1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.TextBox txtAuthor1;
    protected System.Web.UI.WebControls.PlaceHolder plhAuthorFields;
    protected System.Web.UI.WebControls.Button Button1;
    protected System.Web.UI.WebControls.Button btnSubmit;
    protected System.Web.UI.WebControls.Button btnDel;
    protected System.Web.UI.WebControls.TextBox txtName;
    protected System.Web.UI.WebControls.DropDownList dropNo;
    protected System.Web.UI.WebControls.DropDownList dropDepartment;
    protected System.Web.UI.WebControls.TextBox txtRe;
    protected System.Web.UI.WebControls.Label test;
    protected System.Web.UI.WebControls.TextBox txtMagzine;
    private SqlConnection cn = new SqlConnection();
    protected System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1;
    protected System.Web.UI.WebControls.Button btnReset;
    static int intLID;

    public void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if (! IsPostBack )
    {
    ViewState[ "AuthorFieldCount" ] = 1;
    test.Text="1";
    }
    else
    for ( int intCounter = 2 ; intCounter <= (int)ViewState ["AuthorFieldCount"]; intCounter++)
    AddAuthorField( intCounter.ToString() );
    } //增加作者数目
    public void AddAuthorFieldCount( object s, EventArgs e ) 
    {   
    ViewState[ "AuthorFieldCount" ] = (int)ViewState[ "AuthorFieldCount" ] + 1;
    // for ( int intCounter = 2 ; intCounter <= (int)ViewState ["AuthorFieldCount"]; intCounter++)
    AddAuthorField( ViewState[ "AuthorFieldCount" ].ToString() );
    } //增加输入作者的TextBox
    public void AddAuthorField( string  strFieldNum ) 
    {
    LiteralControl litLabel;
    TextBox txtTextBox;
    test.Text=strFieldNum.ToString(); //增加标签
    litLabel = new LiteralControl();
    //litLabel.ID = "litLabel" + strFieldNum;
    litLabel.Text = "<p><b>作者学号 " + strFieldNum + ":</b> ";
    plhAuthorFields.Controls.Add( litLabel ); //增加TextBox
    txtTextBox = new TextBox();
    txtTextBox.ID = "txtAuthor" + strFieldNum;
    plhAuthorFields.Controls.Add( txtTextBox );

    } //减少作者数目
    public void DelAuthorFieldCount( object s ,EventArgs e)
    {
    if ((int)ViewState[ "AuthorFieldCount" ] == 1)

    Page.RegisterClientScriptBlock("error","<script language='Javascript'>alert('再删就没有作者啦!')</script>");
    return;
    }
    else 
    {
    ViewState[ "AuthorFieldCount" ]=(int)ViewState[ "AuthorFieldCount" ] - 1;
    DelAuthorField( (int)ViewState[ "AuthorFieldCount" ] );
    //for ( int intCounter = 2 ; intCounter <= (int)ViewState ["AuthorFieldCount"]; intCounter++)
    // AddAuthorField(intCounter.ToString() ); 
    //本来intCounter为ViewState["AuthorFieldCount'],没有循环,启用Page_load的循环,因Page_Load先于空间事件,故页面多显示一个控件
    }
     
    }
     
    //减少输入作者用的TextBox
    public void DelAuthorField( int strFieldNum)
    {    
    test.Text=strFieldNum.ToString();
    //foreach(Control ctr in plhAuthorFields.Controls)
    //{
    // if(ctr.ID=="txtBox"+(strFieldNum))
    // {
    // plhAuthorFields.Controls.Remove(ctr);
    // }
    // for(int i=strFieldNum - 2;i<=strFieldNum;i++)
    // { // foreach(Control c in plhAuthorFields.Controls)
    // {
    // if(c.ID=="litLabel" + i.ToString())
    // {   test.Text=c.ID;
                
                //原来就这么两行代码,弄得我心力交瘁啊,所有注释的代码都因此而起-_-!!!
                                //一用Remove()就出错,参数明明都是对的,用RemoveAt()就好了
    plhAuthorFields.Controls.RemoveAt( strFieldNum*2 + 1);
                plhAuthorFields.Controls.RemoveAt( strFieldNum*2);

    //this.Response.Write("<script>window.document.reload();</script>");
    //ViewState[ "AuthorFieldCount" ]=(int)ViewState[ "AuthorFieldCount" ] - 1;
    // }
    // }
    // }
    // } }

    //提交事件
    public void btnSubmit_Click( object s, EventArgs e ) 
    {
        
    try
    {
    //防止重复提交
    btnSubmit.Enabled=false;
    SqlCommand cmdInsert1;
    SqlParameter paraReturnValue;


    //intLID = 1; //for ( int intCounter = 2 ; intCounter <= (int)ViewState ["AuthorFieldCount"]; intCounter++)
    // AddAuthorField( intCounter.ToString() );

    cn.ConnectionString = (@"Server=(local);uid=silentwins;pwd=1061sdj;database=Killua") ;
    cn.Open(); cmdInsert1 = new SqlCommand("InsertLW",cn);
    cmdInsert1.CommandType = CommandType.StoredProcedure;
    cmdInsert1.Parameters.Add("@Name",txtName.Text);
    cmdInsert1.Parameters.Add("@Department",dropDepartment.SelectedItem.Text);
    cmdInsert1.Parameters.Add("@magzine",txtMagzine.Text);
    cmdInsert1.Parameters.Add("@No",dropNo.SelectedItem.Value);
    cmdInsert1.Parameters.Add("@Re",txtRe.Text); paraReturnValue = cmdInsert1.Parameters.Add("@LID",SqlDbType.Int);
    paraReturnValue.Direction = ParameterDirection.Output;

    cmdInsert1.ExecuteNonQuery();
    intLID = Convert.ToInt32(cmdInsert1.Parameters["@LID"].Value); //对TextBox的数据进行插入
    foreach (Control c in plhAuthorFields.Controls)
    {    
    if(c.GetType() == typeof(TextBox))
    {
    TextBox tb = (TextBox)c;
    test.Text = tb.Text; SqlCommand cmdInsert2;
    cmdInsert2 = new SqlCommand(" Insert 论文发表(序列号,学号) Values (@LID,@ID)",cn);
    cmdInsert2.Parameters.Add("@LID",intLID);
    cmdInsert2.Parameters.Add("@ID",tb.Text);
    cmdInsert2.ExecuteNonQuery();
    } }

    cn.Close();
    }
    catch(Exception exObj)
    {
    Response.Redirect("Error.aspx");
    } //跳转到提示增加数据成功的页面,String.Format为静态格式化字符串方法
    Response.Redirect(String.Format( "Add1Succeed.aspx?lid={0}",intLID));
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.btnReset.Click += new System.EventHandler(this.btnReset_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion //重新设置事件
    private void btnReset_Click(object sender, System.EventArgs e)
    {
    txtName.Text = "";
                txtMagzine.Text = "";
    txtRe.Text = "";
    dropDepartment.SelectedIndex = 0;
    dropNo.SelectedIndex = 0;
    foreach (Control c in plhAuthorFields.Controls)
    {    
    if(c.GetType() == typeof(TextBox))
    {
    TextBox tb = (TextBox)c;
    tb.Text = "";
    }
    }
    }
    }
    }