最近一个专案(VB.NET)中,其中有一个功能,就是让用户在后台管理跑马灯图片。可以实现上传图片,更新图片和删除图片。Insus.NET使用asp.net的asp:FileUpload来上传与使用asp:DataList来显示。上传,显示与删除图片也许对大家来说没有什么困难,此篇博文是分享更新图片的功能。首先选择DataList的某一张图片,然后为更新选择图片文件,最后进行更新。先看演示动画:
为DataList写一个事件:OnItemCreated="DataListGallery_ItemCreated"
在vb.net写这个事件:
View Code
Protected Sub DataListGallery_ItemCreated(sender As Object, e As DataListItemEventArgs)
'判断编辑铵钮是否是在DataList的AlternatingItem或是Item内。
If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then
'编辑铵钮对象是否为空
If e.Item.FindControl("ImageButtonEdit") IsNot Nothing Then
'不为空的话,把对象转为ImageButton控件
Dim ImageButtonEdit As ImageButton = DirectCast(e.Item.FindControl("ImageButtonEdit"), ImageButton)
'为ImageButton写Click事件。
AddHandler ImageButtonEdit.Click, AddressOf ImageButtonEdit_Click
End If
End If
End Sub
'判断编辑铵钮是否是在DataList的AlternatingItem或是Item内。
If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then
'编辑铵钮对象是否为空
If e.Item.FindControl("ImageButtonEdit") IsNot Nothing Then
'不为空的话,把对象转为ImageButton控件
Dim ImageButtonEdit As ImageButton = DirectCast(e.Item.FindControl("ImageButtonEdit"), ImageButton)
'为ImageButton写Click事件。
AddHandler ImageButtonEdit.Click, AddressOf ImageButtonEdit_Click
End If
End If
End Sub
当用户click时,需要改变当前栏位背景Color,还有一个重点的地方,是要获取图片的主键,并用session保存起来。
View Code
Private Sub ImageButtonEdit_Click(sender As Object, e As ImageClickEventArgs)
'把sender对象转换为ImageButton控件
Dim imageButton As ImageButton = DirectCast(sender, ImageButton)
'把ImageButton控件的Parent控件转为DataListItem
Dim dataListItem As DataListItem = DirectCast(imageButton.Parent, DataListItem)
'改变栏位背景Color
dataListItem.BackColor = Drawing.Color.Red
'获取主键关保存至Session中
Session("SlideMarqueeGalleryId") = Me.DataListGallery.DataKeys(dataListItem.ItemIndex).ToString()
End Sub
'把sender对象转换为ImageButton控件
Dim imageButton As ImageButton = DirectCast(sender, ImageButton)
'把ImageButton控件的Parent控件转为DataListItem
Dim dataListItem As DataListItem = DirectCast(imageButton.Parent, DataListItem)
'改变栏位背景Color
dataListItem.BackColor = Drawing.Color.Red
'获取主键关保存至Session中
Session("SlideMarqueeGalleryId") = Me.DataListGallery.DataKeys(dataListItem.ItemIndex).ToString()
End Sub
更新事件:
View Code
Protected Sub btnUpdate_Click(sender As Object, e As EventArgs)
'如果用户没有选择将要编辑的图片,提示用户选择。Session为空,即是用户没有选择图片
If String.IsNullOrEmpty(DirectCast(Session("SlideMarqueeGalleryId"), String)) Then
objInsusJsUtility.JsAlert("选择将要编辑的图片。")
Return
End If
'判断是否有选择图片
If Not Me.FileUpload2.HasFile Then
objInsusJsUtility.JsAlert("选择上传文件。")
Return
End If
'使用IO名称空间下Path静态方法GetExtension()获取图片的扩展名,也就是获取图片格式
Dim extension As String = System.IO.Path.GetExtension(Me.FileUpload2.PostedFile.FileName)
'创建文件名,包括路径
Dim newFileName As String = Guid.NewGuid().ToString() & extension
'创建文件,存储在专案中临时目录中
Dim file As String = Server.MapPath(InsusBase.TemporaryDirectory() & newFileName)
'保存文件
Me.FileUpload2.SaveAs(file)
'判断是否为图片,此方法参考:http://www.cnblogs.com/insus/archive/2012/03/08/2385054.html
If Not IsImage(file) Then
objInsusJsUtility.JsAlert("选择图片格式文件再上传。")
Return
End If
'把文件转为流
Dim stm As Stream = Me.FileUpload2.PostedFile.InputStream
Try
objSlideMarqueeGallery.Update(extension, stm, DirectCast(Session("SlideMarqueeGalleryId"), String))
Data_Binding()
objInsusJsUtility.JsAlert("图片成功上传。")
Catch ex As Exception
objInsusJsUtility.JsAlert(ex.Message)
End Try
'上传更新成功之后,要清除Session
Session("SlideMarqueeGalleryId") = Nothing
End Sub
'如果用户没有选择将要编辑的图片,提示用户选择。Session为空,即是用户没有选择图片
If String.IsNullOrEmpty(DirectCast(Session("SlideMarqueeGalleryId"), String)) Then
objInsusJsUtility.JsAlert("选择将要编辑的图片。")
Return
End If
'判断是否有选择图片
If Not Me.FileUpload2.HasFile Then
objInsusJsUtility.JsAlert("选择上传文件。")
Return
End If
'使用IO名称空间下Path静态方法GetExtension()获取图片的扩展名,也就是获取图片格式
Dim extension As String = System.IO.Path.GetExtension(Me.FileUpload2.PostedFile.FileName)
'创建文件名,包括路径
Dim newFileName As String = Guid.NewGuid().ToString() & extension
'创建文件,存储在专案中临时目录中
Dim file As String = Server.MapPath(InsusBase.TemporaryDirectory() & newFileName)
'保存文件
Me.FileUpload2.SaveAs(file)
'判断是否为图片,此方法参考:http://www.cnblogs.com/insus/archive/2012/03/08/2385054.html
If Not IsImage(file) Then
objInsusJsUtility.JsAlert("选择图片格式文件再上传。")
Return
End If
'把文件转为流
Dim stm As Stream = Me.FileUpload2.PostedFile.InputStream
Try
objSlideMarqueeGallery.Update(extension, stm, DirectCast(Session("SlideMarqueeGalleryId"), String))
Data_Binding()
objInsusJsUtility.JsAlert("图片成功上传。")
Catch ex As Exception
objInsusJsUtility.JsAlert(ex.Message)
End Try
'上传更新成功之后,要清除Session
Session("SlideMarqueeGalleryId") = Nothing
End Sub