⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagesdialogcs.aspx.cs

📁 Telerik是很大的第三方软件制造商
💻 CS
字号:
using System;
using System.Data;
using System.Data.OleDb;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;

namespace Telerik.EditorExamplesCSharp.Editor.Examples.DBImages
{
	/// <summary>
	/// The dialog containing the upload form, search form, and the images grid.
	/// </summary>
	public class ImagesDialog : System.Web.UI.Page
	{
		#region Private members
		private string sortedBy, sortedOrder;
		#endregion

		#region Child controls
		protected Button btnUpload;
		protected DataGrid gridCurrentImages;
		protected Literal ltMessage;
		protected HtmlTableRow htmlRowMessage;
		protected System.Web.UI.WebControls.TextBox txtSearchCriteria;
		protected System.Web.UI.WebControls.Button btnSearch;
		protected HtmlInputFile htmlIFImage;

		#endregion

		#region Database related methods
		/// <summary>
		/// Reads all the data to be displayed in the datagrid
		/// </summary>
		/// <returns></returns>
		private DataTable GetCurrentImagesFromDB()
		{
			return GetCurrentImagesFromDB(null);
		}

		/// <summary>
		/// Reads the data to be displayed in the datagrid by specified search criteria
		/// </summary>
		/// <returns></returns>
		private DataTable GetCurrentImagesFromDB(string Criteria)
		{
			OleDbConnection conn = new OleDbConnection(DefaultCS.ConnectionString);
			conn.Open();

			OleDbCommand command = new OleDbCommand("SELECT FileName, TimeAdded, TimeLastModified FROM Images WHERE (FileName LIKE '%' + @Criteria + '%') OR (@Criteria = '')", conn);
			if(Criteria == null)
			{
				Criteria = "";
			}
			command.Parameters.Add(new OleDbParameter("@Criteria", Criteria));

			OleDbDataAdapter adapter = new OleDbDataAdapter(command);

			DataTable toReturn = new DataTable();
			try
			{
				adapter.Fill(toReturn);
			}
			catch(OleDbException ex)
			{
				Response.Write("An error occured during the Database request. MS Jet Engine Server answered: " + ex.Message);
			}
			finally
			{
				conn.Close();
			}
			return toReturn;
		}

		/// <summary>
		/// Saves the information for a newly uploaded image file to the database
		/// that includes:
		/// FileName, Image, Thumbnail, Time first uploaded, Time last modified
		/// The last two attributes are being set by the stored procedure
		/// </summary>
		/// <param name="image"></param>
		/// <param name="FileName"></param>
		/// <returns></returns>
		private bool SaveImageToDb(System.Drawing.Image image, string FileName)
		{
			OleDbConnection conn = new OleDbConnection(DefaultCS.ConnectionString);
			conn.Open();
			//First, delete if there is such an image:
			OleDbCommand command = new OleDbCommand("Select COUNT(FileName) FROM Images WHERE FileName = ?", conn);
			OleDbParameter paramFileName = new OleDbParameter("@FileName", FileName);

			command.CommandType = CommandType.Text;

			//Assign the parameters to the command
			command.Parameters.Add(paramFileName);
			bool success = true;

			object filesCount = null;
			try
			{
				filesCount = command.ExecuteScalar();
			}
			catch (OleDbException odbex)
			{
				success = false;
			}
			finally
			{
				conn.Close();
			}

			if (filesCount != null)
			{
				OleDbParameter paramThumbnail = new OleDbParameter("@Thumbnail", GetByteArray(GetThumbnail(image)));
				OleDbParameter paramFullImage = new OleDbParameter("@FullImage", GetByteArray(image));

				command.Parameters.Clear();
				command.Parameters.Add(paramThumbnail);
				command.Parameters.Add(paramFullImage);
				command.Parameters.Add(paramFileName);
				command.Parameters[0].OleDbType = OleDbType.Binary;
				command.Parameters[1].OleDbType = OleDbType.Binary;

				if ((int)filesCount > 0)
				{
					command.CommandText = "UPDATE Images SET Thumbnail = ?, FullImage = ?, TimeLastModified = NOW() WHERE FileName = ?";
				}
				else
				{
					command.CommandText = "INSERT INTO Images (Thumbnail, FullImage, FileName, TimeAdded, TimeLastModified) VALUES ( ?, ?, ?, NOW(), NOW())";
				}

				conn.Open();
				try
				{
					command.ExecuteNonQuery();
				}
				catch(OleDbException)
				{
					success = false;
				}
				finally
				{
					conn.Close();
				}
			}
			else
			{
				success = false;
			}

			return success;
		}
		
		/// <summary>
		/// Deletes the information of a file with a given filename
		/// </summary>
		/// <param name="FileName"></param>
		/// <returns></returns>
		private bool DeleteImage(string FileName)
		{
			OleDbConnection conn = new OleDbConnection(DefaultCS.ConnectionString);
			conn.Open();
			OleDbCommand command = new OleDbCommand("DELETE FROM Images WHERE FileName LIKE ?", conn);
			command.Parameters.Add("@FileName", FileName);
			bool success = true;
			try
			{
				command.ExecuteNonQuery();
			}
			catch(OleDbException)
			{
				success = false;
			}
			finally
			{
				conn.Close();
			}
			return success;
		}
		#endregion

		#region Web Form Designer generated code
		override protected void OnInit(EventArgs e)
		{
			InitializeComponent();
			base.OnInit(e);
		}
		
		private void InitializeComponent()
		{    
			this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click);
			this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);
			this.gridCurrentImages.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.gridCurrentImages_OnItemCommand);
			this.gridCurrentImages.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.gridCurrentImages_OnPageIndexChanged);
			this.gridCurrentImages.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.gridCurrentImages_OnSortCommand);
			this.gridCurrentImages.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.gridCurrentImages_OnItemDataBound);
			this.gridCurrentImages.SelectedIndexChanged += new System.EventHandler(this.gridCurrentImages_SelectedIndexChanged);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion

		#region Other methods
		/// <summary>
		/// Checks where to show the error row and sets a message to a literal
		/// </summary>
		/// <param name="Message"></param>
		private void SetMessage(string Message)
		{
			if((Message == "") || (Message == null))
			{
				htmlRowMessage.Visible = false;
				ltMessage.Text = Message;
			}
			else
			{
				htmlRowMessage.Visible = true;
				ltMessage.Text = Message;
			}
		}

		/// <summary>
		/// Gets the thumbnail of an image
		/// </summary>
		/// <param name="image"></param>
		/// <returns></returns>
		private System.Drawing.Image GetThumbnail(System.Drawing.Image image)
		{
			int height = DefaultCS.ThumbsHeight;
			int width = DefaultCS.ThumbsWidth;
			System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(MyThumbnailCallBack);
			return image.GetThumbnailImage(width, height, myCallback, IntPtr.Zero);
		}

		/// <summary>
		/// A Dummy method, needed by the GetThumbnail method
		/// </summary>
		/// <returns></returns>
		private bool MyThumbnailCallBack()
		{
			return false;
		}

		/// <summary>
		/// Gets the data images data from the database and binds the grid
		/// </summary>
		private void BindImagesGrid()
		{
			DataView dv = new DataView(GetCurrentResult());
			GetSortFields();
			if((sortedBy != null) && (sortedBy != ""))
			{
				dv.Sort = sortedBy + " " + sortedOrder;
			}
			gridCurrentImages.DataSource = dv;
			if (gridCurrentImages.PageSize * gridCurrentImages.CurrentPageIndex >= dv.Count &&
				gridCurrentImages.CurrentPageIndex > 0)
			{
				gridCurrentImages.CurrentPageIndex -= 1;
			}
			gridCurrentImages.DataBind();
		}

		/// <summary>
		/// Converts an image object to a byte array, easily insertable to the database
		/// </summary>
		/// <param name="image"></param>
		/// <returns></returns>
		private byte[] GetByteArray(System.Drawing.Image image)
		{
			MemoryStream ms = new MemoryStream();
			image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
			return ms.ToArray();
		}

		/// <summary>
		/// Searches in the session for the stored result and returns it if found, else
		/// returns the full data table
		/// </summary>
		/// <returns></returns>
		private DataTable GetCurrentResult()
		{
			if(Session["CurrentResult"] == null)
			{
				return GetCurrentImagesFromDB();
			}
			else
			{
				return (DataTable)Session["CurrentResult"];
			}
		}

		/// <summary>
		/// Stores the given result in the Session
		/// </summary>
		/// <param name="result"></param>
		private void StoreCurrentResult(DataTable result)
		{
			Session["CurrentResult"] = result;
		}

		/// <summary>
		/// Searches for the stored sort values in the viewstate and if finds them,
		/// returns their respective values
		/// </summary>
		private void GetSortFields()
		{
			if(ViewState["SortedBy"] != null)
			{
				sortedBy = ViewState["SortedBy"].ToString();
				if(ViewState["SortedOrder"] != null)
				{
					sortedOrder = ViewState["SortedOrder"].ToString();
				}
				else
				{
					sortedOrder = "ASC";
				}
			}
			else
			{
				sortedBy = null;
				sortedOrder = null;
			}
		}

		/// <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 void SetSortFields(string SortedBy, string SortedOrder)
		{
			sortedBy = SortedBy;
			sortedOrder = SortedOrder;
			ViewState["SortedBy"] = sortedBy;
			ViewState["SortedOrder"] = sortedOrder;
		}

		/// <summary>
		/// Switches the sorting fields, returns if the pageIndex should be set to 0
		/// </summary>
		/// <returns></returns>
		private bool SwitchSortFields(string newSortBy)
		{
			bool initPaging = false;
			GetSortFields();
			if((sortedBy != null) && (sortedBy.ToLower() == newSortBy.ToLower()))
			{
				if(sortedOrder == "DESC")
				{
					sortedOrder = "ASC";
				}
				else
				{
					sortedOrder = "DESC";
				}
				SetSortFields(sortedBy, sortedOrder);
			}
			else
			{
				initPaging = true;
				SetSortFields(newSortBy, "ASC");
			}
			return initPaging;
		}

		#endregion

		#region Eventhandlers
		private void Page_Load(object sender, System.EventArgs e)
		{
			if(!Page.IsPostBack)
			{
				htmlRowMessage.Visible = false;
				//init the search results in the session when opening for the first time
				StoreCurrentResult(GetCurrentImagesFromDB());
				BindImagesGrid();
			}
		}

		private void btnUpload_Click(object sender, System.EventArgs e)
		{
			//Check if the file is not empty
			if(htmlIFImage.PostedFile == null)
			{
				SetMessage("No file was uploaded");
				return;
			}
			if((htmlIFImage.PostedFile.FileName == "") || (htmlIFImage.PostedFile.InputStream.Length == 0))
			{
				SetMessage("No file was uploaded");
				return;
			}
			bool errorOccured = false;
			System.Drawing.Image image;
			try
			{
				image = System.Drawing.Image.FromStream(htmlIFImage.PostedFile.InputStream);
			}
			catch(Exception)
			{
				errorOccured = true;
				SetMessage("File was not an image");
				return;
			}
			errorOccured = SaveImageToDb(image, Path.GetFileName(htmlIFImage.PostedFile.FileName));
			if(!errorOccured)
			{
				SetMessage("A database error occured");
				return;
			}
			else
			{
				SetMessage("");
				StoreCurrentResult(GetCurrentImagesFromDB());
				BindImagesGrid();
			}
		}

		private void gridCurrentImages_OnItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
		{
			if((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
			{
				//Get the current binded data
				DataRowView row = (DataRowView)e.Item.DataItem;

				//Assign thumbnail image properties
				HtmlImage htmlImgThumbnail = (HtmlImage)e.Item.FindControl("htmlImgThumbnail");
				if(htmlImgThumbnail != null)
				{
					htmlImgThumbnail.Alt = String.Format(htmlImgThumbnail.Alt, row["FileName"]);
					htmlImgThumbnail.Src = String.Format(htmlImgThumbnail.Src, row["FileName"]);
				}
				//Assign image selecting Html Anchor's properties (calls the javascript function)
				HtmlAnchor htmlAnchorImageSelector = (HtmlAnchor)e.Item.FindControl("htmlAnchorImageSelector");
				if(htmlAnchorImageSelector != null)
				{
					htmlAnchorImageSelector.HRef = String.Format(htmlAnchorImageSelector.HRef, row["FileName"]);
				}
				//Assign a command argument to the delete button, so that later 'knows' which file to delete
				LinkButton lbDelete = (LinkButton)e.Item.FindControl("lbDelete");
				if(lbDelete != null)
				{
					lbDelete.CommandArgument = row["FileName"].ToString();
				}
			}
		}

		private void gridCurrentImages_OnItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
		{
			switch(e.CommandName)
			{
				case "Delete":
					DeleteImage(e.CommandArgument.ToString());
					StoreCurrentResult(GetCurrentImagesFromDB());
					BindImagesGrid();
					break;
			}
		}

		private void btnSearch_Click(object sender, System.EventArgs e)
		{
			StoreCurrentResult(GetCurrentImagesFromDB(txtSearchCriteria.Text));
			BindImagesGrid();
		}
		private void gridCurrentImages_OnPageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
		{
			gridCurrentImages.CurrentPageIndex = e.NewPageIndex;
			BindImagesGrid();
		}

		private void gridCurrentImages_OnSortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
		{
			GetSortFields();
			if(SwitchSortFields(e.SortExpression))
			{
				gridCurrentImages.CurrentPageIndex = 0;
			}
			SetSortFields(sortedBy, sortedOrder);
			BindImagesGrid();
		}

		#endregion

		private void gridCurrentImages_SelectedIndexChanged(object sender, System.EventArgs e)
		{
		
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -