我通过placeholder控件动态产生textbox控件,产生控件部分代码如下:
TextBox txttextbox = new TextBox();
txttextbox.ID="txtproduct"+strfieldnum;
PlaceHolder1.Controls.Add(txttextbox);
页面能够正常根据要求动态产生textbox控件,处理的时候我需要把动态产生的textbox控件的内容插入数据库,部分代码如下:
循环i,是判断动态产生了多少个textbox控件,Convert.ToInt32(tt.Text.Trim())这个是动态产生textbox控件的总数;
for(i=1;i<=(Convert.ToInt32(tt.Text.Trim()));i++)
{
      chanshengneibuid();//这个函数是动态产生一个id号的;
      string strinsert2;
strinsert2 = "insert into moban(mobanid,neibuid,mobanname,xiang)values(@mobanid,@neibuid,@mobanname,@xiang)";
      SqlCommand cmdinsert2 = new SqlCommand(strinsert,myconnect);
      cmdinsert2.Parameters.Add("@mobanid",mobanid.Trim());
      cmdinsert2.Parameters.Add("@neibuid",nei.Text.Trim());
      cmdinsert2.Parameters.Add("@mobanname",mobann.Text.Trim());      //问题出在这里,textbox控件的内容不知道怎么赋值给@xiang变量,就是不知道该怎么取得textbox控件的id;
      cmdinsert2.Parameters.Add("@xiang",("txtproduct"+i).Text.Trim());
      cmdinsert2.Connection.Open();
      cmdinsert2.ExecuteNonQuery();
      cmdinsert2.Connection.Close();
}

解决方案 »

  1.   

    我的意思是通过这个循环怎么从小到大,一个一个的取得textbox的id,然后一个一个的插入到数据库
      

  2.   

    tokavencai(天堂里的猫) PlaceHolder1.FindControl("TextBoxID")
    请问这一句就是取得textbox的id吗?
      

  3.   

    PlaceHolder1.FindControl("TextBoxID")
    ===========================================if (!IsPostBack)
    {
            //动态产生或装载控件
            //也许需要连接控件事件处理函数
           //加到父控件的Controls
    }里生成或装载了动态控件。当控件在客户端触发,postback到服务器端时,IsPostBack==true,这些控件没有被重新生成,怎么能触发事件?所以答案是,当你需要动态生成或装载控件时,应该在if (!IsPostBack)之外做。我问为什么想在if (!IsPostBack)之内做呢?回答是想只生成一次,跟在ASPX页面里一样<form id="form1" runat=server>
    <asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>#%&%#&%^#&,你怎么会认为这个控件只生成一次呢?这些玩意也不是魔术,想生成一个Button对象,你需要用Button btn = new Button();需要触发它的Click事件,你需要用btn.Click += new EventHandler(YourHandler);即使象包含<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>的页面,它也是被转化成C#或VB文件,编译成assembly,然后再被执行的啊不信?加一个页面,TestControls.aspx:<%@ Page Debug="true" %>
    <%@ Import Namespace="System.Data"%>
    <%@ Import Namespace="System.Data.SqlClient"%><form id="form1" runat=server>
    <asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>
    <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="false" GridLines="Both">
    <Columns>
     <asp:TemplateColumn HeaderText="Name">
     <ItemTemplate><%# DataBinder.Eval(Container.DataItem,"Name")%></ItemTemplate>
     </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    </form>
    <script language="C#" runat="server">
    void Button_Click(Object sender, EventArgs e)
    {
      Button btn = (Button)sender;
      Response.Write(btn.Text + " is clicked<BR>");
    }void Page_Load(Object sender, EventArgs e)
    {
       
     Button btn = new Button();
     btn.ID = "Button2";
     btn.Text = "Button2";
     btn.Click += new EventHandler(Button_Click);
     form1.Controls.Add(btn);
       if (!IsPostBack)
       {
     SqlDataAdapter da = new SqlDataAdapter("select Name=au_fname + ' ' + au_lname from authors", "server=localhost;database=pubs;uid=sa;pwd=;");
     DataTable dt = new DataTable();
     da.Fill(dt);
     DataGrid1.DataSource = dt.DefaultView;
     DataGrid1.DataBind();
       }
     
    //}//这是故意的</script>把最后一个“}”注释掉,然后在浏览器里向你的服务器调用TestControls.aspx
      

  4.   

    goody9807() ( )我根本没有在if (!IsPostBack)之内做啊,我的全部代码是:
    private void Page_Load(object sender, System.EventArgs e)
    {
    // Put user code to initialize the page here
    int intcounter;
    if(!IsPostBack)
    {
    ViewState["productfieldcount"]=1;
    }
    //if(ViewState["productfieldcount"]>1)
    //{
    if(Convert.ToInt32(ViewState["productfieldcount"])>1)
    {
    for(intcounter=2;intcounter<=(Convert.ToInt32(ViewState["productfieldcount"].ToString()));intcounter++)
    {
    addproductfield(intcounter);
    }
    tt.Text=ViewState["productfieldcount"].ToString();
    }
    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: This call is required by the ASP.NET Web Form Designer.
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {    
    this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();
    this.sqlCommand1 = new System.Data.SqlClient.SqlCommand();
    this.sqlCommand2 = new System.Data.SqlClient.SqlCommand();
    this.Button2.Click += new System.EventHandler(this.Button2_Click);
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    // 
    // sqlConnection1
    // 
    this.sqlConnection1.ConnectionString = "data source=172.18.58.10;initial catalog=dxxg;password=message;persist security i" +
    "nfo=True;user id=message;workstation id=GAOLIN;packet size=4096";
    // 
    // sqlCommand1
    // 
    this.sqlCommand1.CommandText = "[Seqval]";
    this.sqlCommand1.CommandType = System.Data.CommandType.StoredProcedure;
    this.sqlCommand1.Connection = this.sqlConnection1;
    this.sqlCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue, false, ((System.Byte)(10)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
    this.sqlCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 16));
    this.sqlCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@currval", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Output, false, ((System.Byte)(10)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
    this.sqlCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@date", System.Data.SqlDbType.DateTime, 8, System.Data.ParameterDirection.Output, false, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
    // 
    // sqlCommand2
    // 
    this.sqlCommand2.CommandText = "[Seqval]";
    this.sqlCommand2.CommandType = System.Data.CommandType.StoredProcedure;
    this.sqlCommand2.Connection = this.sqlConnection1;
    this.sqlCommand2.Parameters.Add(new System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue, false, ((System.Byte)(10)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
    this.sqlCommand2.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 16));
    this.sqlCommand2.Parameters.Add(new System.Data.SqlClient.SqlParameter("@currval", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Output, false, ((System.Byte)(10)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
    this.sqlCommand2.Parameters.Add(new System.Data.SqlClient.SqlParameter("@date", System.Data.SqlDbType.DateTime, 8, System.Data.ParameterDirection.Output, false, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void Button1_Click(object sender, System.EventArgs e)
    {
    ViewState["productfieldcount"]=Convert.ToInt32(ViewState["productfieldcount"])+1;
    addproductfield(Convert.ToInt32(ViewState["productfieldcount"]));
    }
    private void addproductfield(int strfieldnum)
    {
    //LiteralCountrol litlabel;
    Label txttextlabel = new Label();
    //add literal control
    int strnum;
    txttextlabel.ID="product"+strfieldnum;
    strnum=strfieldnum+1;
    //LiteralControl lilabel = new LiteralControl();
    txttextlabel.Text="<p><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模板项 "+ strnum +":</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    PlaceHolder1.Controls.Add(txttextlabel);
    //add textbox control TextBox txttextbox = new TextBox();
    txttextbox.ID="txtproduct"+strfieldnum;
    PlaceHolder1.Controls.Add(txttextbox);
    tt.Text = strfieldnum.ToString();
    }
    private void chanshengneibuid()
    {
    String neibuid="";
    sqlCommand2.Parameters["@name"].Value = "neibuid";
    sqlCommand2.Connection.Open();
    sqlCommand2.ExecuteNonQuery();
    neibuid = sqlCommand2.Parameters["@currval"].Value.ToString();
    neibuid = neibuid.PadLeft(4,'0');
    sqlCommand2.Connection.Close();
    nei.Text = neibuid;
    //test = neibuid;
    }
      

  5.   

    private void Button2_Click(object sender, System.EventArgs e)
    {
    SqlConnection myconnect = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
    SqlDataAdapter sqlDataAdapterc = new SqlDataAdapter("select * from moban where mobanname = @mobanname ",myconnect);
    DataSet dataSetc = new DataSet();
    sqlDataAdapterc.SelectCommand.Parameters.Add("@mobanname", SqlDbType.Char,30).Value = mobann.Text.Trim();
    sqlDataAdapterc.Fill(dataSetc,"daihao");
    if (dataSetc.Tables["daihao"].Rows.Count != 0)
    {
    Response.Write ("<script language='javascript'>alert('对不起!该用户组名已经存在,请更换用户名重新申请!')</script>");
    }
    if (dataSetc.Tables["daihao"].Rows.Count == 0)
    {
    String mobanid="";
    sqlCommand1.Parameters["@name"].Value = "mobanid";
    sqlCommand1.Connection.Open();
    sqlCommand1.ExecuteNonQuery();
    mobanid = sqlCommand1.Parameters["@currval"].Value.ToString();
    mobanid = mobanid.PadLeft(4,'0');
    sqlCommand1.Connection.Close();
                    
    /*String neibuid="";
    sqlCommand2.Parameters["@name"].Value = "neibuid";
    sqlCommand2.Connection.Open();
    sqlCommand2.ExecuteNonQuery();
    neibuid = sqlCommand2.Parameters["@currval"].Value.ToString();
    neibuid = mobanid.PadLeft(4,'0');
    sqlCommand2.Connection.Close();*/
    //string test;
    chanshengneibuid();
    string strinsert;
    strinsert = "insert into moban(mobanid,neibuid,mobanname,xiang)values(@mobanid,@neibuid,@mobanname,@xiang)";
    SqlCommand cmdinsert = new SqlCommand(strinsert,myconnect);
    cmdinsert.Parameters.Add("@mobanid",mobanid.Trim());
    cmdinsert.Parameters.Add("@neibuid",nei.Text.Trim());
    cmdinsert.Parameters.Add("@mobanname",mobann.Text.Trim());
    cmdinsert.Parameters.Add("@xiang",xiangyi.Text.Trim());
    cmdinsert.Connection.Open();
    cmdinsert.ExecuteNonQuery();
    cmdinsert.Connection.Close();
    chanshengneibuid();
    string strinsert1;
    strinsert1 = "insert into moban(mobanid,neibuid,mobanname,xiang)values(@mobanid,@neibuid,@mobanname,@xiang)";
    SqlCommand cmdinsert1 = new SqlCommand(strinsert,myconnect);
    cmdinsert1.Parameters.Add("@mobanid",mobanid.Trim());
    cmdinsert1.Parameters.Add("@neibuid",nei.Text.Trim());
    cmdinsert1.Parameters.Add("@mobanname",mobann.Text.Trim());
    cmdinsert1.Parameters.Add("@xiang",xianger.Text.Trim());
    cmdinsert1.Connection.Open();
    cmdinsert1.ExecuteNonQuery();
    cmdinsert1.Connection.Close();
    int i;
    for(i=1;i<=(Convert.ToInt32(tt.Text.Trim()));i++)
    {
        string ww;
    ww=PlaceHolder1.FindControl("TextBoxID");
    chanshengneibuid();
    string strinsert2;
    strinsert2 = "insert into moban(mobanid,neibuid,mobanname,xiang)values(@mobanid,@neibuid,@mobanname,@xiang)";
    SqlCommand cmdinsert2 = new SqlCommand(strinsert,myconnect);
    cmdinsert2.Parameters.Add("@mobanid",mobanid.Trim());
    cmdinsert2.Parameters.Add("@neibuid",nei.Text.Trim());
    cmdinsert2.Parameters.Add("@mobanname",mobann.Text.Trim());
    cmdinsert2.Parameters.Add("@xiang",(PlaceHolder1.FindControl("TextBoxID").Text.Trim()));
    cmdinsert2.Connection.Open();
    cmdinsert2.ExecuteNonQuery();
    cmdinsert2.Connection.Close();
    }
    //cmdinsert.Parameters.Add("@xiang2",xianger.Text.Trim());
    /*if((Convert.ToInt32(tt.Text.Trim()))>2)
    {
    cmdinsert.Parameters.Add("@xiang3",txtproduct2.Text.Trim());
    }
    if((Convert.ToInt32(tt.Text.Trim()))>3)
    {
    cmdinsert.Parameters.Add("@xiang4",txtproduct3.Text.Trim());
    }
    if((Convert.ToInt32(tt.Text.Trim()))>4)
    {
    cmdinsert.Parameters.Add("@xiang5",txtproduct4.Text.Trim());
    }*/
    //cmdinsert.Connection.Open();
    //cmdinsert.ExecuteNonQuery();
    //cmdinsert.Connection.Close();
    Response.Write ("<script language='javascript'>alert('添加模板成功!')</script>");
    }
    }


    }
    }
      

  6.   

    你试下这个函数吧,过程改一下应该就可以了public string GetText()
    {
    for(.....)
    {
     string str="";
     Control t = PlaceHolderID.FindControl(TextBoxID);//这里TextBoxID是你前面命名的TextBox的ID,PlaceHoldeID也一样
     if(t is TextBox)
     {
      str+=((TextBox)t).Text;
     } 
     return str;
    }
    }
      

  7.   

    chanshengneibuid();//这个函数是动态产生一个id号的;为什么不用System.Guid.NewGuid().ToString(),这个是个40位的绝对唯一id,再用东西记录下就可以了。
      

  8.   

    chanshengneibuid();这个不是重点!
      

  9.   

    搞定!感谢各位!感谢kavencai(天堂里的猫)