我正在使用 asp.net [ c# ] ..
我的问题是关于添加新行;如果我单击该按钮(就像每次单击该按钮时一样,它将添加新行)。我认为这很容易做到..但它不存在。我不知道是什么东西不见了。
我的代码是 [ 默认3.aspx ] :
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div align="center">
<asp:Table ID="Table1" runat="server">
<asp:TableRow>
<asp:TableCell style="border-style:solid" >
<asp:Label ID="Label1" runat="server" Text="LABEL = 1 ">
</asp:Label>
</asp:TableCell>
<asp:TableCell style="border-style:solid" >
<asp:Label ID="Label2" runat="server" Text="LABEL = 2 ">
</asp:Label>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell style="border-style:solid" >
<asp:Label ID="Label3" runat="server" Text="LABEL = 3 ">
</asp:Label>
</asp:TableCell>
<asp:TableCell style="border-style:solid" >
<asp:Label ID="Label4" runat="server" Text="LABEL = 4 ">
</asp:Label>
</asp:TableCell>
</asp:TableRow>
</asp:Table>
<asp:Button ID="Button1" runat="server" Text="Add More"
onclick="Button1_Click" />
</div>
</form>
</body>
</html>
对于我的 C# [ 默认3.aspx.cs ] :
protected void Button1_Click(object sender, EventArgs e)
{
TableRow NewRow1 = new TableRow();
//1st cell
TableCell NewCell1 = new TableCell();
NewCell1.Style.Add("border-style","solid");
// new lebel
Label newLable1 = new Label();
count = count + 1; // just for change number in label text
newLable1.Text = "NewLabel = "+ count;
// adding lebel into cell
NewCell1.Controls.Add(newLable1);
// adding cells to row
NewRow1.Cells.Add(NewCell1);
//2ed cell
TableCell NewCell2 = new TableCell();
NewCell2.Style.Add("border-style", "solid");
Label newLable2 = new Label();
count = count + 1;
newLable2.Text = "NewLabel = " + count;
NewCell2.Controls.Add(newLable2);
NewRow1.Cells.Add(NewCell2);
//adding row into table
Table1.Rows.Add(NewRow1);
}
我不知道问题是什么..我什至给每个控件一个 ID.我尝试了其他方法但没有奏效.
如果有人可以帮助我,请.我觉得错过了一些重要的东西,但我不知道它是什么..
如Walid回答中分享的问题中所述,请按照以下步骤操作:
-
创建表行的全局列表,如下所示:
List<TableRow> TableRows
-
在按钮中,单击将新创建的行添加到列表:
TableRow row1=new TableRow(); TableRows.add(row1);
-
在
OnInit
方法中,只需将所有行添加到表中:foreach ( TableRow row in TableRows ) { Table1.Rows.Add(row); }
它将解决您的问题。
您需要保持控件(表)的状态。
在此处查看对非常相似问题的明确解释 ASP.NET 动态创建的控件和回发
您可以通过以下方式添加行:
TableRow row1=new TableRow();
TableRows.add(row1);
但问题是:
- 单击按钮,将一行添加到表中。
- 再次单击同一按钮,然后您已经创建的第一行不再存在,因为 ASP.NET 是无状态的。
解决方案:确保每次单击按钮时,都存在已创建的行数据。