在一个asp转发器项目中渲染标记

时间:2012-09-12 15:06:06

标签: asp.net .net vb.net repeater

好吧,想想如何正确地提出问题。

我有一个返回一些反馈细节的数据表。该数据表包含两家公司的反馈。基于每个数据行中的指示符区分数据表的反馈。

转发器按日期顺序排序(最新的第一个)。如果公司是A和B,公司A的反馈将始终列在顶部,因为它们是最新的。我已经提出了一个图像和一些措辞,提到列出的反馈是否是公司B的反馈。

Public Function RenderTitle(ByVal objItem As Object) As String
        Select Case objItem
            Case 1
                Return String.Empty
            Case 0
                Return "Feedback below obtained whilst a member of our sister company  " & "<img src=""../img/logo.png"" />"
            Case Else
                Return String.Empty
        End Select
    End Function 

如果反馈属于公司B,则会呈现标题。

问题:我不希望在公司B的所有项目中呈现标题。我希望它只在属于公司B的第一项(反馈)中呈现。我怎样才能实现这一目标?

2 个答案:

答案 0 :(得分:2)

可以使用两种技术来完成基于数据格式化DataList或Repeater控件的内容。

第一种技术是为ItemDataBound事件创建一个事件处理程序,该事件处理程序在数据源中的每条记录绑定到新的DataListItem或RepeaterItem时触发。在ItemDataBound事件处理程序中,可以检查当前项的数据,然后格式化可以应用于模板的内容,或者对于DataListItems,可以应用于整个项本身。

或者,可以通过格式化功能实现自定义格式。格式化函数是一种可以从DataList或Repeater的模板调用的方法,该模板返回要在其位置发出的HTML。通常,格式化函数返回的HTML由绑定到当前项的值确定。这些值可以作为标量值传递到格式化函数中,也可以传入绑定到项目的整个对象(例如ProductsRow实例)。

http://msdn.microsoft.com/en-us/library/bb510136.aspx

答案 1 :(得分:1)

你可以尝试这样的事情......(丑陋的代码和未经测试)

HTML

...
<asp:HiddenField ID="hdnIsTitleRenderd" runat="server"/>
...

<强> CODE

Page_Load()
    If Not IsPostBack
         hdnIsTitleRenderd.Value = "False"
    End If
End  Sub 

Public Function RenderTitle(ByVal objItem As Object) As String
       Select Case objItem
            Case 1
                Return String.Empty
            Case 0
                If Convert.ToBoolean(hdnIsTitleRenderd.Value) = False
                       hdnIsTitleRenderd.Value = "True"
                       Return "Feedback below obtained whilst a member of our sister company  " & "<img src=""../img/logo.png"" />"
                Else
                    Return String.Empty
                End If
            Case Else
                    Return String.Empty
        End Select
End Function