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

📄 docsearchctrl.ascx.cs

📁 DocFlow展示了使用.NET开发平台结合Microsoft SQL Server数据库和Microsoft Indexing Service索引服务同样也能创建功能强大的文档管理门户。 Do
💻 CS
字号:
/* 
*  Copyright (c) 2002 FulcrumWeb. All rights reserved.
*/

namespace Bip.WebControls
{
	using System;
	using System.Data;
	using System.Drawing;
	using System.Web;
	using System.Web.UI.WebControls;
	using System.Web.UI.HtmlControls;
	using System.Collections;
	using System.Text;
	using System.Data.OleDb;

	using Bip.Components;

	/// <summary>
	///		Summary description for DocSearchCtrl.
	/// </summary>
	public partial  class DocSearchCtrl : System.Web.UI.UserControl
	{


		public string DocLinkUrl_Begin = "javascript:ViewDoc(";
		public string DocLinkUrl_End = ")";

		public DateTime DateReceived_From;
		public DateTime DateReceived_To;
		public DateTime CreationTime_From;
		public DateTime CreationTime_To;

		public DateTime DocumentDate_From;
		public DateTime DocumentDate_To;
		public string Id;
		public string IncomingNumber;
		public string OutgoingNumber;
		public string Subject;
		public string Header;
		public string FileName;
		public string ArchiveFileNames;
		public IEnumerator DocTypeId_Enum;
		public IEnumerator DocSourceId_Enum;
		public IEnumerator DocCategoryId_Enum;

		public string IsRead = "";
		public string IsFavorite = "";

		public string ContextQuery;
		public string OrderByAttribute;

		public int  PageSize = 20;
		public bool AllowPaging;
		public bool AllowSorting;

		protected int m_VirtualCount = 0;
		protected bool m_HasMoreResults = false;
		protected bool m_HasResults = false;
		protected bool m_Error = false;
	
		public bool SearchError
		{
			get{return m_Error; }
		}
		public bool HasResults
		{
			get{return m_HasResults;}
		}

		public int VirtualCount
		{
			get{return m_VirtualCount;}
        }
		public bool HasMoreResults
		{
			get{ return m_HasMoreResults; }
		}
		


		protected void UpdateResultInfo(DocSearch search)
		{
			lblMessage.ForeColor = Color.Black;
				if(search.HasResults)
				{
					if(search.HasMoreResults)
							lblMessage.Text = String.Format(Bip.Components.BipResources.GetString("StrMoreThenNumDocumentsFound"),  search.VirtualCount.ToString());
					else	lblMessage.Text = String.Format(Bip.Components.BipResources.GetString("StrNumDocumentsFound"),  search.VirtualCount.ToString());
					

					grdSearchResults.PagerStyle.Visible = (bool)(grdSearchResults.PageCount  > 1);
					
					
				}
				else
					lblMessage.Text = Bip.Components.BipResources.GetString("StrNoSearchResults");
		}

		public void Reset()
		{
	
			m_Error = false;
			DateReceived_From = DateTime.MinValue;
			DateReceived_To = DateTime.MinValue;
			DocumentDate_From = DateTime.MinValue;
			DocumentDate_To = DateTime.MinValue;
			CreationTime_From = DateTime.MinValue;
			CreationTime_To = DateTime.MinValue;
			Id = "";
			IncomingNumber = "";
			OutgoingNumber = "";
			Subject = "";
			Header = "";
			FileName = "";
			ArchiveFileNames = "";
			DocTypeId_Enum = null;
			DocSourceId_Enum = null;
			DocCategoryId_Enum = null;
			PageSize = 20;
		}


		public DocSearchCtrl()
		{
			Reset();
		}

		public void InitSearch()
		{
			try
			{
				ArrayList attrFilters = new ArrayList();
			
				attrFilters.Add(DocSearch.FilterDateRange("DateReceived", DateReceived_From, DateReceived_To));
				attrFilters.Add(DocSearch.FilterDateRange("DocumentDate", DocumentDate_From, DocumentDate_To));
				attrFilters.Add(DocSearch.FilterDateRange("CreationTime", CreationTime_From, CreationTime_To));
			
				attrFilters.Add(DocSearch.FilterStringEquals("Id", Id));
				attrFilters.Add(DocSearch.FilterString("IncomingNumber", IncomingNumber));
				attrFilters.Add(DocSearch.FilterString("OutgoingNumber", OutgoingNumber));
				attrFilters.Add(DocSearch.FilterString("Subject", Subject));
				attrFilters.Add(DocSearch.FilterString("Header", Header));
				attrFilters.Add(DocSearch.FilterString("D.FileName", FileName));
				attrFilters.Add(DocSearch.FilterString("ArchiveFileNames", ArchiveFileNames));
			
				attrFilters.Add(DocSearch.FilterEnumeration("DocTypeId", DocTypeId_Enum));
				attrFilters.Add(DocSearch.FilterEnumeration("DocSourceId", DocSourceId_Enum));
				attrFilters.Add(DocSearch.FilterEnumeration("DocCategoryId", DocCategoryId_Enum));

				if(IsRead != null && IsRead.Length >0)
					attrFilters.Add(DocSearch.FilterIsRead( IsRead == "1"));

				if(IsFavorite != null && IsFavorite.Length >0)
					attrFilters.Add(DocSearch.FilterIsFavorite( IsFavorite == "1"));


				StringBuilder attrFilterDef = new StringBuilder();
				foreach(string flt in attrFilters)
				{
					if(flt == null ||  flt.Length == 0)
						continue;
					if(attrFilterDef.Length != 0)
						attrFilterDef.Append(" AND ");
					attrFilterDef.Append(flt);
				}

				//if(ContextQuery != null && ContextQuery.Trim().Length >0)
				//	ContextQuery = ContextQuery + " zmqpxnowcbievruytalskdjfhgxs";
				// well, this is the only solution filter  IDX IGNORED WORDS exception
				// unfortunately it's impossible to identify this error 

				String contextFilterDef = DocSearch.FilterContext(ContextQuery);

				ViewState["AttributesFilter"] = attrFilterDef.ToString();
				ViewState["ContextFilter"] = contextFilterDef.ToString();
				ViewState["OrderByAttribute"] = OrderByAttribute;


				ViewState["DocLinkUrl_Begin"] = DocLinkUrl_Begin;
				ViewState["DocLinkUrl_End"] = DocLinkUrl_End;




				DocSearch search = new DocSearch();
				if(search.Find(attrFilterDef.ToString(), contextFilterDef, OrderByAttribute, 0, PageSize))
				{
					grdSearchResults.DataSource = search.ResultSet;
					grdSearchResults.PageSize = PageSize;
					//grdSearchResults.CurrentPageIndex = 0;
					grdSearchResults.VirtualItemCount = search.VirtualCount;
					grdSearchResults.DataBind();
					grdSearchResults.Visible = true;
				}
				else grdSearchResults.Visible = false;

				UpdateResultInfo(search);
			}
			catch(Exception ex)
			{
				ProcessException(ex);
			}
		}


     
		protected void ProcessException(Exception ex)
		{
			if(!(ex is OleDbException))
				throw ex;
			OleDbException dbEx = (OleDbException) ex;
			string errMessage = null;
			for(int iErr=0; iErr < dbEx.Errors.Count; iErr++)
			{
				OleDbError err = dbEx.Errors[iErr];
				if(err.NativeError == 7312)
				{
					errMessage = err.Message;
					break;
				}
			}

			if(errMessage == null || errMessage.Length == 0)
				throw ex;
			if(errMessage.ToUpper().IndexOf("IGNORED") != -1)
				errMessage = "  ";
			else throw ex; // ???
			// well, this is the only solution to filter  IDX IGNORED WORDS exception
			// unfortunately it's impossible to identify this error 

			lblMessage.Text = errMessage;
			lblMessage.ForeColor = Color.Red;
			m_Error = true;
			m_HasResults = false;
			m_VirtualCount = 0;
			m_HasMoreResults = false;
		}

		protected void Page_Load(object sender, System.EventArgs e)
		{

		}

		#region Web Form Designer generated code
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: This call is required by the ASP.NET Web Form Designer.
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		///		Required method for Designer support - do not modify
		///		the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.grdSearchResults.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.grdSearchResults_PageIndexChanged);
			this.grdSearchResults.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.grdSearchResults_SortCommand);

		}
		#endregion

		private void grdSearchResults_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
		{
			string attrFilterDef = (string)ViewState["AttributesFilter"];
			string contextFilterDef = (string)ViewState["ContextFilter"];
			int recStart = e.NewPageIndex * grdSearchResults.PageSize;
			int recNumber = grdSearchResults.PageSize;
			string orderByAttribute = (string)ViewState["OrderByAttribute"];

			DocLinkUrl_Begin = (string) ViewState["DocLinkUrl_Begin"];
			DocLinkUrl_End = (string) ViewState["DocLinkUrl_End"];



			try
			{
				DocSearch search = new DocSearch();
				if(search.Find(attrFilterDef.ToString(), contextFilterDef, orderByAttribute, recStart, recNumber))
				{
					grdSearchResults.CurrentPageIndex = e.NewPageIndex;
					grdSearchResults.DataSource = search.ResultSet;
					grdSearchResults.VirtualItemCount = search.VirtualCount;
					grdSearchResults.DataBind();
					grdSearchResults.Visible = true;
				}
				else grdSearchResults.Visible = false;

				UpdateResultInfo(search);
			}
			catch(Exception ex)
			{
				ProcessException(ex);
			}
		
		}

		private void grdSearchResults_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
		{
			
			string attrFilterDef = (string)ViewState["AttributesFilter"];
			string contextFilterDef = (string)ViewState["ContextFilter"];
			int recStart = grdSearchResults.CurrentPageIndex * grdSearchResults.PageSize;
			int recNumber = grdSearchResults.PageSize;
			string orderByAttribute = e.SortExpression;
			ViewState["OrderByAttribute"] = e.SortExpression;
			OrderByAttribute = e.SortExpression;

			DocLinkUrl_Begin = (string) ViewState["DocLinkUrl_Begin"];
			DocLinkUrl_End = (string) ViewState["DocLinkUrl_End"];


			try
			{
				DocSearch search = new DocSearch();
				if(search.Find(attrFilterDef.ToString(), contextFilterDef, orderByAttribute, recStart, recNumber))
				{
					//grdSearchResults.CurrentPageIndex = e.NewPageIndex;
					grdSearchResults.DataSource = search.ResultSet;
					grdSearchResults.VirtualItemCount = search.VirtualCount;
					grdSearchResults.DataBind();
					grdSearchResults.Visible = true;
				}
				else grdSearchResults.Visible = false;

				UpdateResultInfo(search);
			}
			catch(Exception ex)
			{
				ProcessException(ex);
			}
		
		}
	}
}

⌨️ 快捷键说明

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