关于repeater 动态添加行,保存画面上值的问题

各位朋友好。
我现在有一个添加的页面,需要添加明细信息,并且可以添加行数。
刚进入画面时,明显行的输入框都是空白的,输入后,点击保存。

页面代码(明显行的项目比较多,现在只列出一个:名称)

<asp:Repeater ID="m1Repeater" runat="server">
<tr>
<td><%#Container.ItemIndex+1%> </td>
<td><asp:TextBox ID="txtName" runat="server"></asp:TextBox></td>
</tr>
</asp:Repeater>

<asp:Button ID="btnAdd" runat="server" Text="添加一行" OnClick="btnAdd_Click" />


c#代码

//画面初始化事件
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//默认包含三行数据(分包商)
DataTable m1Dt = new DataTable();
for (int i = 0; i < 3; i++)
{
DataRow m1Dr = m1Dt.NewRow();
m1Dt.Rows.Add(m1Dr);
}

m1Repeater.DataSource = m1Dt;
m1Repeater.DataBind();
this.ViewState["M1"] = m1Dt;
}
}

//添加明细输入行
protected void btnAddSupplier_Click(object sender, EventArgs e)
{
DataTable dt = (DataTable)this.ViewState["M1"];
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);

m1Repeater.DataSource = dt;
m1Repeater.DataBind();

this.ViewState["M1"] = dt;
}



现在的问题就是 画面输入数据后,点击【添加一行】按钮,画面刷新,页面上之前输入的数据就全清空了,我现在也明白,问题就是出现在 添加一行时,重新绑定了 DataTable,把数据弄没了。 但我一直没想到什么好办法,能把输入的值保留下来。或者有没有其他的办法来处理 这种 输入多行数据的问题,不用repeater也可以。

请各位大侠多多指教。
...全文
432 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yasire 的回复:]
你是写进去viewstate了,但是你没读。

C# code
protected void btnAddSupplier_Click(object sender, EventArgs e)
{
DataTable dt = (DataTable)this.ViewState["M1"];
DataRow dr = dt.NewRow();
……
[/Quote]

谢谢你的回答。我试了一下,还是不行。
我感觉我这边最主要的问题,是因为 DataTable 与 repeater里面的数据没绑定起来。
因为Repeater 每行是一个 文本输入框,这个值怎么与DataTable绑定呢?
每次重新绑定时,DataTable里面是空数据的,只能保证Repeater的行数是正确的,但输入的数据就没了。
huiyuan659 2010-07-09
  • 打赏
  • 举报
回复
保存到Session里面

或者直接先更新到数据库里
yasire 2010-07-09
  • 打赏
  • 举报
回复
你是写进去viewstate了,但是你没读。
protected void btnAddSupplier_Click(object sender, EventArgs e)
{
DataTable dt = (DataTable)this.ViewState["M1"];
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);

m1Repeater.DataSource = dt;
m1Repeater.DataBind();

this.ViewState["M1"] = dt;
}

这里,只更新this.ViewState["M1"] = dt;,然后再执行page_load里的绑定,前提是page_load绑定的数据要从viewstate里取。
showrock 2010-07-09
  • 打赏
  • 举报
回复
点保存的时候就保存到数据库,这样页面刷新了,新加的数据会再一次读出来
要么就用ajax提交,成功后再拼tr
yasire 2010-07-09
  • 打赏
  • 举报
回复
 protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//默认包含三行数据(分包商)
DataTable m1Dt = new DataTable();
for (int i = 0; i < 3; i++)
{
DataRow m1Dr = m1Dt.NewRow();
m1Dt.Rows.Add(m1Dr);
}

m1Repeater.DataSource = m1Dt;
m1Repeater.DataBind();
this.ViewState["M1"] = m1Dt;


这里给m1Repeater的数据源应该是从ViewState读出来的。

62,050

社区成员

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

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

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

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