我很难理解中继器应该如何工作以及我应该如何使用它们。基本上,我有一个标签,一组图像按钮,以及转发器中的div。当您单击按钮时,我想填充使用这些转发器创建的div(因此转发器的每次迭代都有不同的div)。
看起来很简单,但我却无法工作。请帮帮我!
如果有帮助的话,这是我的一些代码。
(我的数据来源)
<asp:sqldatasource runat="server" id="dtsSpecialNotes" connectionstring="connection string" providername="System.Data.SqlClient"> /asp:sqldatasource
(我的转发器)
<asp:Repeater id="rptSpecialNotes" runat="server">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
</ItemTemplate>
</asp:Repeater>
(一些代码背后,我有一个方法来填充在页面加载时调用的转发器)
rptSpecialNotes.DataSource = dtsSpecialNotes
rptSpecialNotes.DataBind()
Dim imbMotion As New ImageButton
Dim imbAttachments As New ImageButton
imbMotion.ImageUrl = "images/controls/Exclaim.png"
imbMotion.Width = "40"
imbMotion.Height = "40"
imbMotion.AlternateText = "Add Motion"
imbMotion.ID = "imbMotion" & listSpecialNotesCounter
imbAttachments.ImageUrl = "images/controls/Documents.png"
imbAttachments.Width = "40"
imbAttachments.Height = "40"
imbAttachments.AlternateText = "Add Document"
imbAttachments.ID = "imbAttachments" & listSpecialNotesCounter
rptSpecialNotes.Controls.Add(lblTitle)
rptSpecialNotes.Controls.Add(imbMotion)
以下是我遇到的问题:
我非常感谢任何帮助。我只是无法掌握这些中继控件。
答案 0 :(得分:0)
您要做的是使用ItemDataBound
事件填充转发器,而不是通过项目集合。这将针对您分配给DataSource
的集合中的每个项目进行调用。
这是我在处理转发器数据绑定和ItemDataBound事件时所做的事情,我将使用此示例的新闻项列表:
' Bind my collection to the repeater
Private Sub LoadData()
Dim newsList As List(Of News) = dao.GetNewsList()
rptrNews.DataSource = newsList
rptrNews.DataBind()
End Sub
' Every item in the data binded list will come through here, to get the item it will be the object e.Item.DataItem
Protected Sub rptrNews_ItemDataBound(sender As Object, e As RepeaterItemEventArgs)
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
' Get the current item that is being data bound
Dim news As News = DirectCast(e.Item.DataItem, News)
' Then get all the controls that are within the <ItemTemplate> or other sections and populate them with the correct data, in your case it would be an image
Dim ltlHeadline As Literal = DirectCast(e.Item.FindControl("ltlHeadline"), Literal)
Dim ltlContent As Literal = DirectCast(e.Item.FindControl("ltlContent"), Literal)
ltlHeadline.Text = news.Headline
ltlContent.Text = news.Teaser
End If
End Sub
或者,您可以在标记代码中完成所有操作,并仅在后面的代码中分配数据源和调用数据绑定。为了达到这个目的,您可以按如下方式定义您的ItemTemplate(再次使用新闻):
<ItemTemplate>
<tr>
<td><%#Container.DataItem("Headline")%></td>
<td><%#Container.DataItem("Teaser")%></td>
</tr>
</ItemTemplate>