2013-11-27 118 views
0

動態內容我有一個表,默認情況下,看起來就像這樣:保留在回發

<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"/>&nbsp;</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"/>&nbsp;</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" />&nbsp;</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" />&nbsp;</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

你是否加載任何初始數據,或者它只是簡單的HTML和.NET控件沒有約束力? – Bobby5193

+0

這只是純html和.NET控件,沒有約束力 – mkautzm

+0

你每次都寫同一個xml文件嗎?像你一直在覆蓋,或附加數據? – Bobby5193

回答

1

所以我相信這裏最好的選擇是使用帶有服務器端綁定的ASP GridView。當您編輯或添加行到gridview時,它將在回發時使用您從創建的XML文件提供的數據自動重建。