К сожалению, класс System.Web.UI.WebControls.Table в ASP.NET Web Forms не сохранит никаких изменений, внесенных в него из кода, если только вы не приложите некоторые усилия для восстановления его состояния при каждой обратной передаче..
Чтобы быть как можно ближе к тому, что вы уже сделали, вы можете сделать следующее:
Отобразить tblMainReport внутри asp: PlaceHolder:
<div class="scroll" style="overflow: visible">
<asp:PlaceHolder runat="server" ID="tblMainReportPlaceHolder">
<asp:Table ID="tblMainReport" runat="server" CellPadding="2"
CellSpacing="2" HorizontalAlign="Center" GridLines="Both" Width="100%">
</asp:Table>
</asp:PlaceHolder>
</div>
Затем в вашем методе GetDetailReconciliation добавьте сохраненный экземпляр сеанса tblMainReport к вашему заполнителю:
if (Session["tblMyMainReport"] != null)
{
tblMainReportPlaceHolder.Controls.Clear();
tblMainReportPlaceHolder.Controls.Add((Control)Session["tblMyMainReport"]);
}
Это должно восстановить сохраненный экземпляр таблицы таким способом, который позволит веб-формам отображать его.
Ниже приведен рабочий обобщенный пример этого подхода:
Разметка
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebSandbox.WebForm1" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button Text="Generate Table" runat="server" ID="generateTableButton" OnClick="generateTableButton_Click" />
<asp:Button Text="Restore Table" runat="server" ID="restoreTableButton" OnClick="restoreTableButton_Click" />
<asp:PlaceHolder runat="server" ID="tblMainReportPlaceHolder">
<asp:Table ID="tblMainReport" runat="server" CellPadding="2"
CellSpacing="2" HorizontalAlign="Center" GridLines="Both" Width="100%">
</asp:Table>
</asp:PlaceHolder>
</div>
</form>
</body>
</html>
Код позади
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebSandbox
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void generateTableButton_Click(object sender, EventArgs e)
{
var cell1 = new TableCell
{
Text = "Cell 1"
};
var cell2 = new TableCell
{
Text = "Cell 2"
};
var row = new TableRow();
row.Cells.Add(cell1);
row.Cells.Add(cell2);
tblMainReport.Rows.Add(row);
Session["tblMyMainReport"] = tblMainReport;
}
protected void restoreTableButton_Click(object sender, EventArgs e)
{
tblMainReportPlaceHolder.Controls.Clear();
tblMainReportPlaceHolder.Controls.Add((Control)Session["tblMyMainReport"]);
}
}
}
В качестве альтернативы, вы можете просто вызывать логику, используемую для построения вашей таблицы, каждый раз, когда она вам нужна для визуализации.