control.cs

来自「《精通ASP.NET2.0网络应用系统开发》书中的源码」· CS 代码 · 共 389 行

CS
389
字号
using System;
using System.Data;
using System.Collections;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace WebDBManage
{
	/// <summary>
	/// 定义全局变量的类
	/// </summary>
	public class GlobalVars
	{
		/// 常量定义
		public static readonly int TextBoxWidth = 150;
		public static readonly int DropDownListWidth = 156;
		public static readonly int LabelWidth = 150;
		public static readonly int BaseWith = 0;
		public static readonly int BaseHeight = 10;
		public static readonly int InWidth = 250;
		public static readonly int InHeight = 30;

		public static readonly int MutilTextBoxHeight = 100;
	}

	/// <summary>
	/// Summary description for Control
	/// </summary>
	public class Control
	{
		private Panel m_panel;
		private string m_tableName;

		/// <summary>
		/// 定义表名称属性
		/// </summary>
		public String TableName
		{
			get
			{
				return (m_tableName);
			}
			set
			{
				m_tableName = value;
			}
		}

		/// <summary>
		/// 定义控件所属的Panel
		/// </summary>
		public Panel ControlPanel
		{
			get
			{
				return (m_panel);
			}
			set
			{
				m_panel = value;
			}
		}

		/// <summary>
		/// 创建新控件
		/// </summary>	
		private WebControl CreateWebControl(String controlID,int controlType,int controlWidth)
		{
			Label label;
			TextBox tbox;
			DropDownList dlist;

			switch(controlType)
			{
				case 0:   ///普遍标签控件
					{
						label = new Label();
						label.ID = controlID;
						label.Width = GlobalVars.LabelWidth;
						return ((WebControl)label);
					}
				case 1:   ///普通单行文本框
					{
						tbox = new TextBox();
						tbox.ID = controlID;
						tbox.Width = controlWidth > 0 ? controlWidth : GlobalVars.TextBoxWidth;
						return ((WebControl)tbox);
					}
				case 2:   ///多行文本框
					{
						tbox = new TextBox();
						tbox.ID = controlID;
						tbox.TextMode = TextBoxMode.MultiLine;
						tbox.Height = GlobalVars.MutilTextBoxHeight;
						tbox.Width = controlWidth > 0 ? controlWidth : GlobalVars.TextBoxWidth;
						return ((WebControl)tbox);
					}
				case 3:   ///密码输入框
					{
						tbox = new TextBox();
						tbox.ID = controlID;
						tbox.TextMode = TextBoxMode.Password;
						tbox.Width = controlWidth > 0 ? controlWidth : GlobalVars.TextBoxWidth;
						return ((WebControl)tbox);
					}
				case 4:  ///创建普通下拉框
					{
						dlist = new DropDownList();
						dlist.ID = controlID;
						dlist.Width = controlWidth > 0 ? controlWidth : GlobalVars.DropDownListWidth;

						///绑定Combobox控件的数据
						SqlServerDB sqlServer = new SqlServerDB();
						Data data = new Data();
						data.BindDropdownListBaseData(dlist,sqlServer.GetDropDownListDSByBase(),DropdownListBase.TABLENAME + "='"
								+ m_tableName + "' AND " + DropdownListBase.FIELDCODE + "='" + controlID + "'");

						return ((WebControl)dlist);
					}
				case 5:  ///创建父下拉框
					{
						dlist = new DropDownList();
						dlist.ID = controlID;
						dlist.Width = controlWidth > 0 ? controlWidth : GlobalVars.DropDownListWidth;
						dlist.SelectedIndexChanged += new EventHandler(BindChildDropDownListData);

						///绑定Combobox控件的数据
						SqlServerDB sqlServer = new SqlServerDB();
						Data data = new Data();
						data.BindDropdownListBaseData(dlist,sqlServer.GetDropDownListDSByBase(),DropdownListBase.TABLENAME + "='"
								+ m_tableName + "' AND " + DropdownListBase.FIELDCODE + "='" + controlID + "'");

						return ((WebControl)dlist);
					}
				case 6:  ///创建子下拉框
					{
						dlist = new DropDownList();
						dlist.ID = controlID;
						dlist.Width = controlWidth > 0 ? controlWidth : GlobalVars.DropDownListWidth;

						///绑定Combobox控件的数据
						SqlServerDB sqlServer = new SqlServerDB();
						Data data = new Data();
						data.BindDropdownListBaseData(dlist,sqlServer.GetDropDownListDSByChild(),DropdownListBase.TABLENAME + "='"
									+ m_tableName + "' AND " + DropdownListBase.FIELDCODE + "='" + controlID + "'");

						return ((WebControl)dlist);
					}
				case 7:  ///创建既有父下拉框又有子下来框的下拉框
					{
						dlist = new DropDownList();
						dlist.ID = controlID;
						dlist.Width = controlWidth > 0 ? controlWidth : GlobalVars.DropDownListWidth;
						dlist.SelectedIndexChanged += new EventHandler(BindChildDropDownListData);

						///绑定Combobox控件的数据
						SqlServerDB sqlServer = new SqlServerDB();
						Data data = new Data();
						data.BindDropdownListBaseData(dlist,sqlServer.GetDropDownListDSByChild(),DropdownListBase.TABLENAME + "='"
									+ m_tableName + "' AND " + DropdownListBase.FIELDCODE + "='" + controlID + "'");


						return ((WebControl)dlist);
					}
				case 8:  ///创建时间选择框
					{
						tbox = new TextBox();

						///创建时间控件

						return ((WebControl)tbox);
					}
				case 9:   ///布尔值下拉选择控件
					{
						dlist = new DropDownList();
						dlist.ID = controlID;
						dlist.Width = controlWidth > 0 ? controlWidth : GlobalVars.DropDownListWidth;

						///绑定Combobox控件的数据
						SqlServerDB sqlServer = new SqlServerDB();
						Data data = new Data();
						data.BindDropDownListBoolData(dlist,sqlServer.GetBoolTableDS());

						return ((WebControl)dlist);
					}
				default:
					return ((WebControl)null);
			}
		}

		/// <summary>
		/// 在Panel上创建表的所有控件
		/// </summary>
		public void CreatePanelControl(Panel panel,ref ArrayList controlList)
		{
			panel.Controls.Clear();
			controlList.Clear();

			SqlServerDB sqlServer = new SqlServerDB();
			DataSet ds = sqlServer.GetSystemTableDS();
			if (ds == null) return;
			if (ds.Tables.Count <= 0) return;

			WebControl control;
			short tabindex = 0;
			string sTableString = "<table ID=\"ControlTable\" runat=\"server\" class=\"GbText\" style=\"BORDER-COLLAPSE: collapse\""
				+ " borderColor=\"#93bee2\" cellSpacing=\"0\" cellPadding=\"0\" width=\"100%\""
			    + " border=\"1\">";
			string startTrTdString = "<tr><td align=\"right\" width=\"150\">";
			string endTrTdString = "</td></tr>";

			panel.Controls.Add(new LiteralControl(sTableString));
			foreach (DataRow row in ds.Tables[0].Rows)
			{
				if (m_tableName == row[SystemTable.TABLENAME].ToString() && GlobalConst.ONE == row[SystemTable.ISVISIBLE].ToString())
				{
					panel.Controls.Add(new LiteralControl(startTrTdString + row[SystemTable.FIELDDESN].ToString() + ":"));					
					panel.Controls.Add(new LiteralControl("</td><td align=\"left\">"));
					control = CreateWebControl(row[SystemTable.FIELDCODE].ToString(),
						Int32.Parse(row[SystemTable.CONTROLTYPEID].ToString()),
						Int32.Parse(row[SystemTable.WIDTH].ToString()));
					control.TabIndex = tabindex++;
					control.CssClass = GetCssClass(row[SystemTable.CONTROLTYPEID].ToString());

					controlList.Add(control);
					panel.Controls.Add(control);
					panel.Controls.Add(new LiteralControl(endTrTdString));

					///创建换行控件
					//panel.Controls.Add(new LiteralControl("<" + "br" + ">"));
				}
			}

			panel.Controls.Add(new LiteralControl("</table>"));
		}

		public void CreateTableControl(Table table)
		{
			SqlServerDB sqlServer = new SqlServerDB();
			DataSet ds = sqlServer.GetSystemTableDS();
			if (ds == null) return;
			if (ds.Tables.Count <= 0) return;

			WebControl control;
			short tabindex = 0;			

			foreach (DataRow row in ds.Tables[0].Rows)
			{
				if (m_tableName == row[SystemTable.TABLENAME].ToString() && GlobalConst.ONE == row[SystemTable.ISVISIBLE].ToString())
				{
					TableRow trow = new TableRow();
					TableCell lcell = new TableCell();
					TableCell rcell = new TableCell();

					///
					lcell.Controls.Add(new LiteralControl(row[SystemTable.FIELDDESN].ToString() + ":"));

					control = CreateWebControl(row[SystemTable.FIELDCODE].ToString(),
						Int32.Parse(row[SystemTable.CONTROLTYPEID].ToString()),
						Int32.Parse(row[SystemTable.WIDTH].ToString()));
					control.TabIndex = tabindex++;
					control.CssClass = GetCssClass(row[SystemTable.CONTROLTYPEID].ToString());
					rcell.Controls.Add(control);

					trow.Cells.Add(lcell);
					trow.Cells.Add(rcell);
					table.Rows.Add(trow);
				}
			}
		}

		/// <summary>
		/// 父控件触发的事件
		/// </summary>	
		private void BindChildDropDownListData(object sender,System.EventArgs e)
		{
			DropDownList dlist = ((DropDownList)sender);
			String cmdText = DropdownListChild.TABLENAME + "='" + m_tableName + "' AND "
				+ DropdownListChild.FIELDCODE + "='" + dlist.ID + "'";

			SqlServerDB sqlServer = new SqlServerDB();
			DataSet ds = sqlServer.GetDropDownListDSByChild();
			if (ds == null) return;
			if (ds.Tables.Count <= 0) return;

			DataRow[] rowList = ds.Tables[0].Select(cmdText);
			foreach (DataRow row in rowList)
			{
				DropDownList childlist = (DropDownList)FindControl(ControlPanel,row["TableCode"].ToString());
				String tempcmdText = "select distinct " + row[DropdownListChild.TEXT].ToString() + ", "
					+ row[DropdownListChild.VALUE].ToString() + " from "
					+ row[DropdownListChild.SELECTTABLE].ToString()
					+ " where " + row[DropdownListChild.FATHERVALUE].ToString() + "='"
					+ dlist.SelectedValue + "'";

				childlist.DataSource = sqlServer.GetDataSet(tempcmdText);
				childlist.DataTextField = DropdownListChild.TEXT;
				childlist.DataValueField = DropdownListChild.VALUE;
				childlist.DataBind();

				EventArgs childe = new EventArgs();
				BindChildDropDownListData(dlist,childe);
			}
		}

		/// <summary>
		/// 绑定子控件的数据
		/// </summary>		
		private void BindDropDownListChildData(DropDownList dlist,DataSet ds,String cmdText)
		{
			if (ds == null) return;
			if (ds.Tables.Count <= 0) return;

			String sFieldCode = "";
			String sFatherValue = "";
			String sTableName = "";
			String sText = "";
			String sValue = "";

			DataRow[] rowList = ds.Tables[0].Select(cmdText);
			if (null != rowList && rowList.Length >= 1)
			{
				sFieldCode = rowList[0][DropdownListChild.FIELDCODE].ToString();
				sFatherValue = rowList[0][DropdownListChild.FATHERVALUE].ToString();
				sTableName = rowList[0][DropdownListChild.TABLENAME].ToString();
				sText = rowList[0][DropdownListChild.TEXT].ToString();
				sValue = rowList[0][DropdownListChild.VALUE].ToString();
			}
			
			DropDownList parentbox = (DropDownList)FindControl(ControlPanel,sFieldCode);
			String parentvalue = parentbox.Items.Count > 0 ? parentbox.Items[parentbox.SelectedIndex].ToString() : null;

			String tempcmdText = "SELECT DISTINCT " + sText + ", " + sValue + " FROM ["
				+ sTableName + "] WHERE " + sFieldCode + "='" + parentvalue + "'";

			SqlServerDB sqlServer = new SqlServerDB();
			DataSet dssqlServer = sqlServer.GetDataSet(tempcmdText);
			if (dssqlServer == null) return;
			if (dssqlServer.Tables.Count <= 0) return;

			dlist.DataSource = dssqlServer;
			dlist.DataTextField = sText;
			dlist.DataValueField = sValue;
			dlist.DataBind();
		}
		
		/// <summary>
		/// 在Panel中找到某个控件
		/// </summary>		
		public WebControl FindControl(Panel panel,String controlName)
		{
			foreach (WebControl control in panel.Controls)
			{
				if (control.ID == controlName)
				{
					return (control);
				}
			}
			return ((WebControl)null);
		}

		private string GetCssClass(string controlTypeID)
		{
			switch (controlTypeID)
			{
				case "0":
					return "Text";
				case "1":
				case "2":
				case "3":
					return "InputCss";
				case "4":
				case "5":
				case "6":
				case "7":
				case "8":
				case "9":
					return "SelectSta";
				default: return "";
			}
		}
	}
}

⌨️ 快捷键说明

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