最近一个专案(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