我想显示/隐藏'编辑'根据数据集中的文件扩展名列,有条件地从代码隐藏中转发器中的按钮。但它需要最后执行的文件扩展名并适用于所有。如何处理它?或者我应该采取动态生成的按钮ID并处理它?怎么样?
ascx上的代码 -
Public Sub rptProjectSubFolders_ItemDataBound()
rptProjectSubFolders.DataSource = FolderHelper.ListAttachmentFiles(Me.ucFolderControl.objFolder.intID, Me.ucFolderControl.objFolder.intProjectID, Page.User.SiteUser.intID)
rptProjectSubFolders.DataBind()
Dim _ds1 As DataTable = New DataTable()
_ds1 = rptProjectSubFolders.DataSource
If _ds1.Rows.Count > 0 Then
For i As Integer = 0 To _ds1.Rows.Count - 1
For Each rptitem As RepeaterItem In rptProjectSubFolders.Items
Dim EditImageLink = CType(rptitem.FindControl("btn_ImageEdit"), LinkButton)
Dim fileExtension As String = _ds1.Rows(i).Item("FileExtension")
If fileExtension = "jpg" OrElse fileExtension = "png" OrElse fileExtension = "jpe " OrElse fileExtension = "bmp" Then
' EditImageLink.Visible = True
EditImageLink.Style.Add("Display", "Block")
Else
' EditImageLink.Visible = False
EditImageLink.Style.Add("Display", "None")
End If
Next
Next
End If
End Sub
代码隐藏代码
@CD /D "%__CD__%Mac\Data" 2>Nul && RD /S /Q "%__CD__%Mac\Data">Nul 2>&1
答案 0 :(得分:2)
你提到
“它需要最后执行的文件扩展名并适用于所有”
...那是因为ItemDataBound
多次运行 - 一次为提供给转发器的每个数据项。
然而,在该事件处理程序中,您循环遍历所有转发器项(不仅仅是与当前事件相关的项)并依次对每个项应用相同的更改。因此,当您为每个数据项运行ItemDataBound时,当然您将看到的唯一一个是与最后一项相关的结果,因为这是您最后一次循环所有项目,并且它超过 - 写了以前的任何改变。
另一个奇怪的事情是,您似乎正在重新绑定同一转发器的ItemDataBound事件中的Repeater 。这没有任何意义,似乎它创建了一个循环过程。转发器只需要在页面请求期间进行一次数据处理,可能是在Page_Load期间,或者在您的应用程序有意义的任何地方。你应该把代码移到合适的地方。
如果您使用所有参数定义ItemDataBound
事件,则可以获取当前转发器项目,然后根据其中的项目执行操作......如下所示:
Sub rptProjectSubFolders_ItemDataBound(Sender As Object, e As RepeaterItemEventArgs)
Dim EditImageLink = CType(rptitem.FindControl("btn_ImageEdit"), LinkButton)
Dim fileExtension As String = CType(e.Item.DataItem, DataRow).Item("FileExtension")
If fileExtension = "jpg" OrElse fileExtension = "png" OrElse fileExtension = "jpe " OrElse fileExtension = "bmp" Then
EditImageLink.Visible = True
Else
EditImageLink.Visible = False
End If
End Sub
有关文档,请参阅https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1和https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeateritemeventargs(v=vs.110).aspx。