将ASP经典表转换为ASP.NET Repeater

时间:2017-07-18 18:01:37

标签: asp.net vb.net session repeater

我正在努力使这个网站现代化。我有一个以旧样式生成的报告表,如:

Dim sTable = "<table class=""stat"">"
sTable = sTable & "<thead><tr><th colspan=20><Status Report: " & Session("ProcessYear") & "</th></tr>"

我正在将其转换为转发器,但我不知道如何在<HeaderTemplate>中包含会话数据。我有:

<asp:Repeater id="Dashboard" runat="server">
<HeaderTemplate>
    <table class="stat">
        <thead>
            <tr><th colspan="20">Appeal Status Report: ???? </th></tr>
...

有些候选人是asp:PlaceHolder,有类似<%# ((RepeaterItem)Container.Parent.Parent).DataItem %>(请参阅Accessing parent data in nested repeater, in the HeaderTemplate),但我对于引用的内容感到茫然。

遗憾的是,无法重构会话依赖关系。有什么想法吗?我对ASP.NET很新。我的这个页面的CodeFile是在VB.NET中。

1 个答案:

答案 0 :(得分:1)

您需要查看On Item Data Bound event,以便在绑定期间执行一些代码隐藏工作。

您想要检查项目对象,确定its a header row,是否会访问您的会话对象。

粗略的适应可能看起来像:

  

ASPX

<asp:Repeater id="Dashboard" runat="server" OnItemDataBound="ItemDataBound">
<HeaderTemplate>
    <table class="stat">
        <thead>
            <tr>
                <th colspan="20">
                    Appeal Status Report: <asp:Label ID="YourLabel"/>
                </th>
            </tr>
        ...
    ...
...
  

背后的代码

void ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
{
    if (e.Item.ItemType == ListItemType.Header) 
    {
        ((Label)e.Item.FindControl("YourLabel")).Text = Session["YourSession"];
    }
}

您也可以使用页脚,项目和交替项目进行操作。