📄 imagesdialogvb.aspx.vb
字号:
'/ <summary>
'/ Gets the data images data from the database and binds the grid
'/ </summary>
Private Sub BindImagesGrid()
Dim dv As New DataView(GetCurrentResult())
GetSortFields()
If Not (sortedBy Is Nothing) AndAlso sortedBy <> "" Then
dv.Sort = sortedBy + " " + sortedOrder
End If
gridCurrentImages.DataSource = dv
If gridCurrentImages.PageSize * gridCurrentImages.CurrentPageIndex >= dv.Count And _
gridCurrentImages.CurrentPageIndex > 0 Then
gridCurrentImages.CurrentPageIndex = gridCurrentImages.CurrentPageIndex - 1
End If
gridCurrentImages.DataBind()
End Sub 'BindImagesGrid
'/ <summary>
'/ Converts an image object to a byte array, easily insertable to the database
'/ </summary>
'/ <param name="image"></param>
'/ <returns></returns>
Private Function GetByteArray(ByVal image As System.Drawing.Image) As Byte()
Dim ms As New MemoryStream
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
Return ms.ToArray()
End Function 'GetByteArray
'/ <summary>
'/ Searches in the session for the stored result and returns it if found, else
'/ returns the full data table
'/ </summary>
'/ <returns></returns>
Private Function GetCurrentResult() As DataTable
If Session("CurrentResult") Is Nothing Then
Return GetCurrentImagesFromDB()
Else
Return CType(Session("CurrentResult"), DataTable)
End If
End Function 'GetCurrentResult
'/ <summary>
'/ Stores the given result in the Session
'/ </summary>
'/ <param name="result"></param>
Private Sub StoreCurrentResult(ByVal result As DataTable)
Session("CurrentResult") = result
End Sub 'StoreCurrentResult
'/ <summary>
'/ Searches for the stored sort values in the viewstate and if finds them,
'/ returns their respective values
'/ </summary>
Private Sub GetSortFields()
If Not (ViewState("SortedBy") Is Nothing) Then
sortedBy = ViewState("SortedBy").ToString()
If Not (ViewState("SortedOrder") Is Nothing) Then
sortedOrder = ViewState("SortedOrder").ToString()
Else
sortedOrder = "ASC"
End If
Else
sortedBy = Nothing
sortedOrder = Nothing
End If
End Sub 'GetSortFields
'/ <summary>
'/ Sets the global sorting members to the given new ones, and also
'/ stores them in the viewstate for use when sorting
'/ </summary>
'/ <param name="SortedBy"></param>
'/ <param name="SortedOrder"></param>
Private Sub SetSortFields(ByVal SortedBy As String, ByVal SortedOrder As String)
SortedBy = SortedBy
SortedOrder = SortedOrder
ViewState("SortedBy") = SortedBy
ViewState("SortedOrder") = SortedOrder
End Sub 'SetSortFields
'/ <summary>
'/ Switches the sorting fields, returns if the pageIndex should be set to 0
'/ </summary>
'/ <returns></returns>
Private Function SwitchSortFields(ByVal newSortBy As String) As Boolean
Dim initPaging As Boolean = False
GetSortFields()
If Not (sortedBy Is Nothing) AndAlso sortedBy.ToLower() = newSortBy.ToLower() Then
If sortedOrder = "DESC" Then
sortedOrder = "ASC"
Else
sortedOrder = "DESC"
End If
SetSortFields(sortedBy, sortedOrder)
Else
initPaging = True
SetSortFields(newSortBy, "ASC")
End If
Return initPaging
End Function 'SwitchSortFields
#End Region
#Region "Eventhandlers"
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
htmlRowMessage.Visible = False
'init the search results in the session when opening for the first time
StoreCurrentResult(GetCurrentImagesFromDB())
BindImagesGrid()
End If
End Sub 'Page_Load
Private Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
'Check if the file is not empty
If htmlIFImage.PostedFile Is Nothing Then
SetMessage("No file was uploaded")
Return
End If
If htmlIFImage.PostedFile.FileName = "" OrElse htmlIFImage.PostedFile.InputStream.Length = 0 Then
SetMessage("No file was uploaded")
Return
End If
Dim errorOccured As Boolean = False
Dim image As System.Drawing.Image
Try
image = System.Drawing.Image.FromStream(htmlIFImage.PostedFile.InputStream)
Catch
errorOccured = True
SetMessage("File was not an image")
Return
End Try
errorOccured = SaveImageToDb(image, Path.GetFileName(htmlIFImage.PostedFile.FileName))
If Not errorOccured Then
SetMessage("A database error occured")
Return
Else
SetMessage("")
StoreCurrentResult(GetCurrentImagesFromDB())
BindImagesGrid()
End If
End Sub 'btnUpload_Click
Private Sub gridCurrentImages_OnItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles gridCurrentImages.ItemDataBound
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
'Get the current binded data
Dim row As DataRowView = CType(e.Item.DataItem, DataRowView)
'Assign thumbnail image properties
Dim htmlImgThumbnail As HtmlImage = CType(e.Item.FindControl("htmlImgThumbnail"), HtmlImage)
If Not (htmlImgThumbnail Is Nothing) Then
htmlImgThumbnail.Alt = String.Format(htmlImgThumbnail.Alt, row("FileName"))
htmlImgThumbnail.Src = String.Format(htmlImgThumbnail.Src, row("FileName"))
End If
'Assign image selecting Html Anchor's properties (calls the javascript function)
Dim htmlAnchorImageSelector As HtmlAnchor = CType(e.Item.FindControl("htmlAnchorImageSelector"), HtmlAnchor)
If Not (htmlAnchorImageSelector Is Nothing) Then
htmlAnchorImageSelector.HRef = String.Format(htmlAnchorImageSelector.HRef, row("FileName"))
End If
'Assign a command argument to the delete button, so that later 'knows' which file to delete
Dim lbDelete As LinkButton = CType(e.Item.FindControl("lbDelete"), LinkButton)
If Not (lbDelete Is Nothing) Then
lbDelete.CommandArgument = row("FileName").ToString()
End If
End If
End Sub 'gridCurrentImages_OnItemDataBound
Private Sub gridCurrentImages_OnItemCommand(ByVal [source] As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles gridCurrentImages.ItemCommand
Select Case e.CommandName
Case "Delete"
DeleteImage(e.CommandArgument.ToString())
StoreCurrentResult(GetCurrentImagesFromDB())
BindImagesGrid()
End Select
End Sub 'gridCurrentImages_OnItemCommand
Private Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click
StoreCurrentResult(GetCurrentImagesFromDB(txtSearchCriteria.Text))
BindImagesGrid()
End Sub 'btnSearch_Click
Private Sub gridCurrentImages_OnPageIndexChanged(ByVal [source] As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles gridCurrentImages.PageIndexChanged
gridCurrentImages.CurrentPageIndex = e.NewPageIndex
BindImagesGrid()
End Sub 'gridCurrentImages_OnPageIndexChanged
Private Sub gridCurrentImages_OnSortCommand(ByVal [source] As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles gridCurrentImages.SortCommand
GetSortFields()
If SwitchSortFields(e.SortExpression) Then
gridCurrentImages.CurrentPageIndex = 0
End If
SetSortFields(sortedBy, sortedOrder)
BindImagesGrid()
End Sub 'gridCurrentImages_OnSortCommand
#End Region
End Class 'ImagesDialog
End Namespace 'DBImages
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -