Вы упоминаете, что
"он принимает расширение последнего исполняемого файла и применяется ко всем"
... потому что ItemDataBound
выполняется много раз - один раз для каждый элемент данных, который вы передаете повторителю.
Тем не менее, внутри этого обработчика событий вы затем просматриваете все элементы повторителя (не только тот, который связан стекущее событие) и применить одно и то же изменение к каждому по очереди.Таким образом, к тому времени, когда вы выполнили ItemDataBound для каждого элемента данных, вы, конечно, увидите только результат, относящийся к последнему элементу, потому что это был последний раз, когда вы перебирали все элементы, и оннаписал любые предыдущие изменения.
Другая странная вещь заключается в том, что вы, кажется, повторно связываете свой Repeater внутри события ItemDataBound того же самого ретранслятора.Это не имеет смысла и кажется, что это создает круговой процесс.Повторитель должен быть привязан к базе данных только один раз во время запроса страницы, возможно, во время Page_Load или где-либо еще, что имеет смысл для вашего приложения.Вы должны переместить этот код куда угодно.
Если вы определили свое событие ItemDataBound
со всеми аргументами, вы можете получить элемент ретранслятора current и просто воздействовать на элементы внутри этого ..Примерно так:
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 для документации.