如何实现添加多行记录的功能?

程序猿GG 2010-03-15 05:24:54
如下HTML
<asp:LinkButton id="lbtn_Add_Remark" runat="server" text="add" /> <asp:LinkButton id="lbtn_Add_Remark" runat="server" text="save" /><br />

<asp:TextBox id="tbRemark" runat="server" width="120px" /> <asp:LinkButton id="lbtn_Remark" runat="server" />


我需望在单击lbtn_Add_Remark时, 在下面再添加一个文本框和一个LintButton, 使其成如下模式:

<asp:LinkButton id="lbtn_Add_Remark" runat="server" /><br />

<asp:TextBox id="tbRemark" runat="server" width="120px" /> <asp:LinkButton id="lbtn_Remark" runat="server" text="remove" /> <br />
<asp:TextBox id="tbRemark" runat="server" width="120px" /> <asp:LinkButton id="lbtn_Remark" runat="server" text="remove" />

1. 依次类推, 当我点击lbtn_Add_Remark时, 就在下面加入一行, 这个该如何实现.
2. 如果添加了多行, 如何读取各行TextBox控件中的值?



...全文
521 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序猿GG 2010-03-16
  • 打赏
  • 举报
回复
我试过, 好像有两个新的问题:
1. 只能添加一个行, 即原本只有一行, 点击"lbtn_Add_Projection"后, 会添加一行, 但再次点击时, 却不会再添加.
2. 当点击"lbtn_Remove_0" 按钮时, 会删除一行, (但我lbtn_Remove_0中没有写任何代码呀);

                    <asp:UpdatePanel ID="up_Projection" runat="server" UpdateMode="conditional">
<ContentTemplate>
<table width="724" cellpadding="0" cellspacing="0">
<tr align="center" style="background-color: #ffffff;" class="verdana12pt">
<td align="left" style="height: 14px">
<strong>PROJECTION INFORMATION</strong></td>
<td align="right" style="height: 14px">
<asp:LinkButton ID="lbtn_Add_Projection" runat="server" Text="add projection" CssClass="verdana12pt"
OnClick="lbtn_Add_Projection_Click"></asp:LinkButton>
</td>
</tr>
<tr style="background-color: #666666;">
<td colspan="2" style="height: 42px">
<table width="100%" border="0" cellpadding="2" cellspacing="1">
<tr align="center" style="background-color: #ffffff;">
<td align="left" class="verdana11pt" style="height: 17px">
<strong>Create Date</strong></td>
<td align="left" class="verdana11pt" style="height: 17px">
<strong>Projection Quantity</strong></td>
<td align="left" class="verdana11pt" style="height: 17px">
<strong>Ex Factory Date</strong></td>
<td align="left" class="verdana11pt" style="height: 17px">
<strong>Order Quantity</strong></td>
<td align="left" class="verdana11pt" style="height: 17px">
<strong>Remove</strong></td>
</tr>
<asp:PlaceHolder ID="ph_Projection" runat="server">
<tr align="center" style="background-color: #ffffff;">
<td align="left" class="verdana11pt">
<asp:HiddenField ID="hf_Style_Sheet_Projection_Id_0" runat="server" />
</td>
<td align="left" class="verdana11pt">
<asp:TextBox ID="tb_Project_Quantity_0" runat="server" CssClass="verdana11ptflatbox"
Width="90%"></asp:TextBox></td>
<td align="left" class="verdana11pt">
<asp:TextBox ID="tb_Exfactory_Date_0" runat="server" CssClass="verdana11ptflatbox"
Width="90%"></asp:TextBox></td>
<td align="left" class="verdana11pt">
<asp:TextBox ID="tb_Order_Quantity_0" runat="server" CssClass="verdana11ptflatbox"
Width="90%"></asp:TextBox></td>
<td align="left" class="verdana11pt">
<asp:LinkButton ID="lbtn_Remove_0" runat="server" Text="Remove" CssClass="verdana11pt"></asp:LinkButton>
</td>
</tr>
</asp:PlaceHolder>
</table>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>



protected void lbtn_Add_Projection_Click(object sender, EventArgs e)
{
object obj = ViewState["Projection_Count"] ?? "1";
int int_Count = int.Parse(obj.ToString());
Literal lit1 = new Literal();
lit1.Text = "<tr align=\"center\" style=\"background-color: #ffffff;\"> <td align=\"left\" class=\"verdana11pt\"> ";
ph_Projection.Controls.Add(lit1);

HiddenField hf = new HiddenField();
hf.ID = string.Format("hf_Style_Sheet_Projection_Id_{0}", int_Count.ToString().Trim());
hf.Value = "0";
ph_Projection.Controls.Add(hf);

Literal lit2 = new Literal();
lit2.Text = " </td> <td align=\"left\" class=\"verdana11pt\"> ";
ph_Projection.Controls.Add(lit2);

TextBox tb1 = new TextBox();
tb1.ID = string.Format("tb_Project_Quantity_{0}", int_Count.ToString().Trim());
tb1.CssClass = "verdana11ptflatbox";
tb1.Width = Unit.Percentage(90);
ph_Projection.Controls.Add(tb1);

Literal lit3 = new Literal();
lit3.Text = " </td> <td align=\"left\" class=\"verdana11pt\"> ";
ph_Projection.Controls.Add(lit3);

TextBox tb2 = new TextBox();
tb2.ID = string.Format("tb_Exfactory_Date_{0}", int_Count.ToString().Trim());
tb2.CssClass = "verdana11ptflatbox";
tb2.Width = Unit.Percentage(90);
ph_Projection.Controls.Add(tb2);

Literal lit4 = new Literal();
lit4.Text = " </td> <td align=\"left\" class=\"verdana11pt\"> ";
ph_Projection.Controls.Add(lit4);

TextBox tb3 = new TextBox();
tb3.ID = string.Format("tb_Order_Quantity_{0}", int_Count.ToString().Trim());
tb3.CssClass = "verdana11ptflatbox";
tb3.Width = Unit.Percentage(90);
ph_Projection.Controls.Add(tb3);

Literal lit5 = new Literal();
lit5.Text = " </td> <td align=\"left\" class=\"verdana11pt\"> ";
ph_Projection.Controls.Add(lit5);

LinkButton lbtn = new LinkButton();
lbtn.ID = string.Format("lbtn_Remove_{0}", int_Count.ToString().Trim());
lbtn.CssClass = "verdana11pt";
lbtn.Text = "Remove";
ph_Projection.Controls.Add(lbtn);

Literal lit6 = new Literal();
lit6.Text = " </td> </tr> ";
ph_Projection.Controls.Add(lit6);

up_Projection.Update();

ViewState["Projection_Count"] = ++int_Count;
}
telankes2000 2010-03-16
  • 打赏
  • 举报
回复
用DataGrid实现
对DataTable 进行增删改操作
再绑定 这样最省事
spark_wu 2010-03-16
  • 打赏
  • 举报
回复
http://blog.csdn.net/heker2007/archive/2007/04/01/1548229.aspxhttp://blog.csdn.net/heker2007/archive/2007/04/01/1548229.aspx
这个可以满足你要的效果,虽然和你说的有差别
阿非 2010-03-16
  • 打赏
  • 举报
回复
先运行一下

jenny0810 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sandy945 的回复:]
HTML code

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<input type="hidden" id='hID' name="hNa……
[/Quote]学习
xupeihuagudulei 2010-03-15
  • 打赏
  • 举报
回复
非哥太牛了
阿非 2010-03-15
  • 打赏
  • 举报
回复

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<input type="hidden" id='hID' name="hName" />
<asp:TextBox ID="tbRemark" runat="server" Width="120px" /> 
<asp:LinkButton ID="lbtnAdd" runat="server" OnClientClick="document.getElementById('hID').value=1;" Text="add" />
<asp:PlaceHolder ID="ph" runat="server"></asp:PlaceHolder>
<asp:LinkButton ID="lbtnSave" runat="server" Text="save" OnClientClick="document.getElementById('hID').value=0;"
onclick="lbtnSave_Click" />
</form>
</body>
</html>



protected void Page_Load(object sender, EventArgs e)
{
string flag = Request.Form["hName"] ?? string.Empty;
if (flag.Length != 0)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);

if (flag == "1")
{
index++;
}

TextBox txt;
LinkButton lbtn;
for (int i = 0; i < index; i++)
{
txt = new TextBox();
txt.ID = string.Format("tbRemark{0}", i);
ph.Controls.Add(txt);

lbtn = new LinkButton();
lbtn.ID = string.Format("lbtnAdd{0}", i);
lbtn.Text = "add";
lbtn.OnClientClick = "document.getElementById('hID').value=1;";
ph.Controls.Add(lbtn);
}
ViewState["count"] = index;
}
}

protected void lbtnSave_Click(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";

int index;
int.TryParse(count.ToString(), out index);

Response.Write(string.Format("一共新增了{0}个文本框<br>", index));

for (int i = 0; i < index; i++)
{
Response.Write(string.Format("第{0}个文本框的值是{1}<br>", i + 1, (ph.FindControl(string.Format("tbRemark{0}", i)) as TextBox).Text));
}
}
阿非 2010-03-15
  • 打赏
  • 举报
回复

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<input type="hidden" id='hID' name="hName" />
<asp:TextBox ID="tbRemark" runat="server" Width="120px" /> 
<asp:LinkButton ID="lbtnAdd" runat="server" OnClientClick="document.getElementById('hID').value=1;" Text="add" />
<asp:PlaceHolder ID="ph" runat="server"></asp:PlaceHolder>
<asp:LinkButton ID="lbtnSave" runat="server" Text="save" OnClientClick="document.getElementById('hID').value=0;"
onclick="lbtnSave_Click" />
</form>
</body>
</html>
[code=C#]
protected void Page_Load(object sender, EventArgs e)
{
string flag = Request.Form["hName"] ?? string.Empty;
if (flag.Length != 0)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);

if (flag == "1")
{
index++;
}

TextBox txt;
LinkButton lbtn;
for (int i = 0; i < index; i++)
{
txt = new TextBox();
txt.ID = string.Format("tbRemark{0}", i);
ph.Controls.Add(txt);

lbtn = new LinkButton();
lbtn.ID = string.Format("lbtnAdd{0}", i);
lbtn.Text = "add";
lbtn.OnClientClick = "document.getElementById('hID').value=1;";
ph.Controls.Add(lbtn);
}
ViewState["count"] = index;
}
}

protected void lbtnSave_Click(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";

int index;
int.TryParse(count.ToString(), out index);

Response.Write(string.Format("一共新增了{0}个文本框<br>", index));

for (int i = 0; i < index; i++)
{
Response.Write(string.Format("第{0}个文本框的值是{1}<br>", i + 1, (ph.FindControl(string.Format("tbRemark{0}", i)) as TextBox).Text));
}
}

[/code]
程序猿GG 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sandy945 的回复:]
服务器端的要刷新的
[/Quote]

我可以加一个UpdatePanel控件呀, 刷新倒不怕, 只要好读取数据就行,,
有好的方法没?
阿非 2010-03-15
  • 打赏
  • 举报
回复
服务器端的要刷新的
zhouxiaobo123 2010-03-15
  • 打赏
  • 举报
回复
绑顶.....
程序猿GG 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sandy945 的回复:]
js 还是 服务器端?
[/Quote]

服务器端,不要JS的
阿非 2010-03-15
  • 打赏
  • 举报
回复
js 还是 服务器端?

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧