【发布时间】:2014-02-21 16:51:05
【问题描述】:
我在按钮点击事件上动态生成超过 1 个文本框。而且我将这些文本框的创建限制为最多 5 个。但我无法跟踪动态生成的文本框中插入的值以将其插入数据库表中。 这就是我正在做的-
<table border="1" width="1000px">
<tr>
<td class="style1">Add Text Box: </td>
<td class="style2">
<asp:TextBox ID="txt1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Add More"
onclick="Button1_Click" /><br />
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</td>
</tr>
<tr><td colspan="2" align="center">
<asp:Button ID="Button2" runat="server" Text="Submit" onclick="Button2_Click" />
<br />
</td></tr>
</table>
我的cs代码是-
public partial class DynamicTextbox : System.Web.UI.Page
{
General_Logic g1 = new General_Logic();
DataTable dt = new DataTable();
int rows = 0;
List<string> ControlIdList = new List<string>();
int Counter = 1;
protected override void LoadViewState(object SavedState)
{
base.LoadViewState(SavedState);
ControlIdList = (List<string>)ViewState["ControlIdList"];
foreach (string Id in ControlIdList)
{
Counter++;
TextBox tb = new TextBox();
tb.ID = Id;
LiteralControl linebreak = new LiteralControl();
PlaceHolder1.Controls.Add(tb);
PlaceHolder1.Controls.Add(linebreak);
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Counter <= 4)
{
Counter++;
TextBox tb = new TextBox();
tb.ID = "TextBox" + Counter;
tb.Text = "";
LiteralControl linebreak = new LiteralControl("<br />");
PlaceHolder1.Controls.Add(tb);
PlaceHolder1.Controls.Add(linebreak);
ControlIdList.Add(tb.ID);
ViewState["ControlIdList"] = ControlIdList;
}
else
{
Button1.OnClientClick = null;
Response.Write("<script>alert('Maximum Entry is 5');</script>");
}
}
protected void Button2_Click(object sender, EventArgs e)
{
try
{
string s = null;
for (int parcount = 0; parcount == parcount; parcount++)
{
s = Request.Form["Textbox" + parcount.ToString()];
if (s == null)
{
rows = g1.ExecDB("insert into tbl_products(product1) values('" + txt1.Text.ToString() + "')");
break;
}
else
{
//Label1.Text = s.ToString();
Response.Write(s);
rows = g1.ExecDB("insert into tbl_products(product1,product2,product3,product4,product5) values('" + txt1.Text.ToString() + "','" + s.ToString() + "','" + s.ToString() + "','" + s.ToString() + "','" + s.ToString() + "')");
}
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
}
写了这么多代码后,我只能从第一个文本框中插入数据,但不能从动态生成的文本框中插入数据。我在动态文本框的数据库表中得到空值。请指导我的代码哪里出了问题?
【问题讨论】:
-
您是否在 Button2_Click 事件上运行无限循环??
-
@KarthikAMR 是的。实际上,我在搜索时从某个地方得到了这个建议。