我有一张表,默认情况下如下:
<table width="650" id="myTable" runat="server">
<tbody>
<tr>
<td class="cellWidth300 bottomBorder topBorder">Column1</td>
<td class="cellWidth125 leftBorder topBorder bottomBorder textCenter">Column2</td>
<td class="cellWidth100 leftBorder topBorder bottomBorder textCenter">Column3</td>
<td class="cellWidth125 leftBorder rightBorder topBorder bottomBorder textRight">Column4</td>
</tr>
<tr>
<td class="cellWidth300"><input type="text" size="29" runat="server"/></td>
<td class="cellWidth125 leftBorder textCenter"><input type="text" size="9" class="units commas" runat="server"/></td>
<td class="cellWidth100 leftBorder textCenter"><input type="text" size="8" class="value commas" runat="server"/></td>
<td class="cellWidth125 leftBorder rightBorder textRight"><input type="text" size="11" readonly="readonly" tabindex="-1" class="totalA1 autoTotal" runat="server"/> </td>
</tr>
<tr>
<td class="cellWidth300"><input id="Text2" type="text" size="29" runat="server"/></td>
<td class="cellWidth125 leftBorder textCenter"><inputtype="text" size="9" class="units commas" runat="server"/></td>
<td class="cellWidth100 leftBorder textCenter"><input type="text" size="8" class="value commas" runat="server"/></td>
<td class="cellWidth125 leftBorder rightBorder textRight"><input type="text" size="11" readonly="readonly" tabindex="-1" class="totalA1 autoTotal" runat="server"/> </td>
</tr>
<tr>
<td class="cellWidth300"><input type="text" size="29" runat="server"/></td>
<td class="cellWidth125 leftBorder textCenter"><input type="text" size="9" class="units commas" runat="server"/></td>
<td class="cellWidth100 leftBorder textCenter"><input type="text" size="8" class="value commas" runat="server"/></td>
<td class="cellWidth125 leftBorder rightBorder textRight"><input type="text" size="11" readonly="readonly" tabindex="-1" class="totalA1 autoTotal" runat="server" /> </td>
</tr>
</tbody>
</table>
我有一大块jquery,每次在最后一行输入内容时都会生成一个新行。它看起来像这样:
var _addRow ='<tr>' +
'<td width="300"><input type="text" size="29" runat="server" ></td>' +
'<td width="125" class="leftBorder textCenter"><input type="text" size="9" class="units commas" runat="server" /></td>' +
'<td width="100" class="leftBorder textCenter"><input type="text" size="8" class="value commas" runat="server" /></td>' +
'<td width="125" class="leftBorder rightBorder textRight"><input type="text" size="11" readonly="readonly" tabindex="-1" class="totalA1 autoTotal" runat="server" /> </td>' +
'</tr>';
function initialize() {
$(document).on('keypress', '#myTable tr:last input', AddRowToMyTable);
}
function AddRowToMyTable() {
$('#myTable tr:last').after(_addRow);
}
这一切都非常棒。
现在,我做了一些需要回发的事情。其中之一是我用XML保存表中的数据,另一个是我可以用表格中的数据创建PDF。每次回发时,它都会在数据到达之前丢失所有动态生成的数据。也就是说,如果我写了一个包含所有数据的XML文件,那么经过第三行(非动态生成的最后一行)的任何内容都不会显示出来。
奇怪的是,有一段时间我把这一切都搞定了。当时,我以为我保存了数据并立即重新加载以恢复我的表格,但这不再适用,我不知道为什么。
我的第一个主要问题是:如果我回发到服务器,是否也不应该发送动态行中的所有数据?也就是说,如果我在第6行有数据,即使它在回发完成后会丢失,它是否应该在被删除之前仍然被发送到服务器?我的保存算法如下:
private void WriteMyTableToXML()
{
HtmlInputText tContent;
HtmlTableRow tRow;
int i = 1; //First row is headers, which we don't want.
_Writer.WriteStartElement("MyTable");
while (i < tblCropsAndFeed.Rows.Count - 1) // last row should always be blank. We can skip it
{
tRow = tblCropsAndFeed.Rows[i];
_Writer.WriteStartElement("Entry");
string tInputBox0 = tRow.Cells[0].Controls[0].ClientID;
tContent = (HtmlInputText)tRow.FindControl(tInputBox0);
_Writer.WriteStartElement("name");
_Writer.WriteString(tContent.Value);
_Writer.WriteEndElement();
string tInputBox1 = tRow.Cells[1].Controls[0].ClientID;
tContent = (HtmlInputText)tRow.FindControl(tInputBox1);
_Writer.WriteStartElement("units");
_Writer.WriteString(tContent.Value);
_Writer.WriteEndElement();
string tInputBox2 = tRow.Cells[2].Controls[0].ClientID;
tContent = (HtmlInputText)tRow.FindControl(tInputBox2);
_Writer.WriteStartElement("value");
_Writer.WriteString(tContent.Value);
_Writer.WriteEndElement();
_Writer.WriteEndElement();
i++;
}
_Writer.WriteEndElement();
}
其次,实际上只是保留页面的状态。这样的事情不存在吗?
If(IsPostBack)
{
DontResetThePage();
}
答案 0 :(得分:1)
所以我认为这里最好的选择是使用带有服务器端绑定的ASP GridView。当您在gridview中编辑或添加行时,它将使用您从创建的XML文件中提供的数据在回发时自动重建。