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

📄 roomstatus.cs

📁 酒店管理系统(c#源码)
💻 CS
📖 第 1 页 / 共 2 页
字号:
		public void AutoSizeGrid() 
 		{ 			 
			int numRows = ((DataTable)dataGrid1.DataSource).Rows.Count; //该dataGrid所连接的表的宽度 
			Graphics g = Graphics.FromHwnd(dataGrid1.Handle);  
			StringFormat sf = new StringFormat(StringFormat.GenericTypographic); 
			SizeF size; 
 
			//由于DataGrid没有提供对DataGridRows[]的直接调用,因此我们使用一个反射(relection)来实现它
			//这个方法实际上取得dataGrid中行的集合,通过get_DataGridRows方法返回Rows的集合
			//并转化为一个System.Array对象 
			MethodInfo mi = dataGrid1.GetType().GetMethod("get_DataGridRows", 
 
				BindingFlags.FlattenHierarchy | BindingFlags.IgnoreCase | BindingFlags.Instance 
 
				| BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static); 
 
			System.Array dgra = (System.Array)mi.Invoke(dataGrid1,null); 
 
			// 将其转换为ArrayList
			ArrayList DataGridRows = new ArrayList();  
			foreach (object dgrr in dgra)  
			{  
				if (dgrr.ToString().EndsWith("DataGridRelationshipRow")==true) 
					DataGridRows.Add(dgrr);  
			} 
 
			//枚举dataGrid中的所有行 
			for (int i = 0; i < numRows; ++i) 
			{
				size = g.MeasureString(dataGrid1[i,1].ToString(),dataGrid1.Font,400,sf); 
				int h = Convert.ToInt32(32);//直接将每行的行高设置为40
				//用下面这行代码可以根据dataGrid中字体自动调整行高
				//int h = Convert.ToInt32(size.Height); 
				
				
				// 将定好的行高设置回dataGrid中 
				PropertyInfo pi = DataGridRows[i].GetType().GetProperty("Height");  
				pi.SetValue(DataGridRows[i],h,null);  
			}  
			g.Dispose();  
		}

		//----------设置一个16*4的表格,以显示房态图----------
		private void DataGridStateControl()
		{
			roomTable = new DataTable();
			
			for(int i=1;i<17;i++)//添加16列,以显示16个房间
			{
				roomTable.Columns.Add(i.ToString(),typeof(string));
			}
			
			this.dataGrid1.DataSource = roomTable;
			for(int i=0;i<4;i++)//向表中添加4行,显示4层楼
			{
				roomTable.Rows.Add(roomTable.NewRow());				
			}

			DataGridTableStyle ts = new DataGridTableStyle();
			DataGridTextBoxColumn aColumnTextColumn;			
			ts.AllowSorting = false;
			ts.MappingName = roomTable.TableName;
			ts.RowHeadersVisible=false;						
			for (int j = 0;j< 16;j++)
			{
				aColumnTextColumn = new DataGridTextBoxColumn();
				aColumnTextColumn.ReadOnly=true;
				aColumnTextColumn.Width=32;
				aColumnTextColumn.MappingName = roomTable.Columns[j].ColumnName;
				aColumnTextColumn.HeaderText = roomTable.Columns[j].ColumnName;
				aColumnTextColumn.NullText = "";
				aColumnTextColumn.Format = "N"; //设置为数字格式显示
				ts.GridColumnStyles.Add(aColumnTextColumn);
			}
			dataGrid1.TableStyles.Add(ts);
		}
	
		//-------重画房态图---------
		private void dataGrid1_Paint(object sender, PaintEventArgs e)
		{
			if(this.statusTable.Rows.Count==0)
			{
				return;
			}
			string status;//房屋状态
			int floor,roomNum;//楼层和房间号
			Image pic=imageList1.Images[0];//显示的图像
			

			foreach(DataRow aRow in statusTable.Rows)
			{
				floor=Convert.ToInt32(aRow["楼层编号"]);
				roomNum=Convert.ToInt32(aRow["客房编号"])-100*floor;
				if(roomNum>14)//还原避开的两个忌讳数字13,14后的编号
					roomNum=roomNum-2;
				status=aRow["状态"].ToString().Trim();
				switch(status)//根据不同状态,确定不同图片
				{
					case "将到":
						pic=imageList1.Images[0];
						break;
					case "将离":
						pic=imageList1.Images[1];
						break;
					case "空房":
						pic=imageList1.Images[2];
						break;
					case "维修":
						pic=imageList1.Images[3];
						break;
					case "住房":
						pic=imageList1.Images[4];
						break;
					case "自用":
						pic=imageList1.Images[5];
						break;
				}
				e.Graphics.DrawImage(pic,2+32*(roomNum-1),2+32*(floor-3));			
				e.Graphics.DrawString(aRow["客房编号"].ToString().Trim(),Font,SystemBrushes.WindowText,4+32*(roomNum-1),24+32*(floor-3));
			}

		}

		//----------更新房态数据---------
		private void RefreshStatus(string sql)
		{
			string strConn="workstation id=localhost;Integrated Security=SSPI;Database=hotelbook;";
			SqlConnection cn=new SqlConnection(strConn);
			cn.Open();
			SqlDataAdapter da=new SqlDataAdapter(sql,cn);
			this.statusTable.Clear();
			da.Fill(this.statusTable);			
		}		

		//---------单击一个房间图标时,显示其房号和类型,以及状态-----------
		private void dataGrid1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			int col=dataGrid1.CurrentCell.ColumnNumber;
			int row=dataGrid1.CurrentCell.RowNumber;
			row=row+3;//楼层编号从3楼开始
			col=col+1;//房间编号从1开始
			if(col>12)//房屋编号中没有13,14这两个编号,是向后顺延的
			{
				col=col+2;
			}
			string roomID="";//房间编号
			if(col.ToString().Length==1)//还原房间编号
			{
				roomID="0"+row.ToString()+"0"+col.ToString();
			}
			else
			{
				roomID="0"+row.ToString()+col.ToString();
			}
			DataRow[] aRows=this.statusTable.Select("客房编号='"+roomID+"'");
			if(aRows.Length==0)//如果未选中房间,则不进行任何处理
			{
				txt1.Clear();//清除房号
				cmb1.Text="";//清除类型
				return;
			}
			DataRow rRow=aRows[0];//读入当前房号数据
			txt1.Text=rRow["客房编号"].ToString().Trim();
			cmb1.Text=this.ShowRoomType(txt1.Text);

			string status;//选中房间房态
			status=rRow["状态"].ToString().Trim();
			switch(status)
			{
				case "空房":
					rb1.Checked=true;
					break;
				case "住房":
					rb2.Checked=true;
					break;
				case "自用":
					rb3.Checked=true;
					break;
				case "维修":
					rb4.Checked=true;
					break;
				case "将到":
					rb5.Checked=true;
					break;
				case "将离":
					rb6.Checked=true;
					break;
			}
			txt1.Focus();			
		}

		//-------根据输入的房间号,读入房间类型------
		private string ShowRoomType(string num)
		{
			string strConn="workstation id=localhost;Integrated Security=SSPI;Database=hotelbook;";
			SqlConnection cn=new SqlConnection(strConn);
			cn.Open();
			SqlCommand cmd=cn.CreateCommand();
			cmd.CommandText="select b.类型名称 from 客房信息 a,客房类型 b" 
				+" where(a.类型编号=b.类型编号)and(a.客房编号='"+num+"')";
			string rType=cmd.ExecuteScalar().ToString().Trim();
			return(rType);
		}		

		//-------------根据选择的房间类型显示房间-------------
		private void cmb1_SelectionChangeCommitted(object sender, System.EventArgs e)
		{
			string sql;			
			int i=cmb1.SelectedIndex;			
			string roomType=cmb1.Items[i].ToString().Trim();
			if(roomType=="全部")
			{
				sql="select * from 客房信息";
			}
			else
			{
				sql="select a.* from 客房信息 a,客房类型 b where (a.类型编号=b.类型编号)"
					+"and(b.类型名称='"+roomType+"')";
			}

			RefreshStatus(sql);//读入所选类型房间的数据
			dataGrid1.Refresh();		
		}

		//--------刷新房态-----------
		private void btnRefresh_Click(object sender, System.EventArgs e)
		{
			string sqlStr;
			if(cmb1.Text=="")
			{
				sqlStr="select * from 客房信息";				
			}
			else
			{
				sqlStr="select a.* from 客房信息 a,客房类型 b where (a.类型编号=b.类型编号)"
					+"and(b.类型名称='"+cmb1.Text+"')";
			}
			RefreshStatus(sqlStr);//更新房间的数据
			dataGrid1.Refresh();		
		}

		//----------更改房间状态---------
		private void btnModify_Click(object sender, System.EventArgs e)
		{
			if(txt1.Text=="")
			{
				MessageBox.Show("请先选择要更改状态的房间!");
				return;
			}
			DialogResult dlg;
			string msg="一般情况下不能直接在房态图中修改房间状态,确定要修改吗?";
			dlg=MessageBox.Show(msg,"确认修改",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning);
			if(dlg==DialogResult.OK)
			{
				string strConn="workstation id=localhost;Integrated Security=SSPI;Database=hotelbook;";
				SqlConnection cn=new SqlConnection(strConn);
				cn.Open();
				SqlCommand cmd=cn.CreateCommand();
				string newStatus="";
				if(rb1.Checked)
					newStatus="空房";
				if(rb2.Checked)
					newStatus="住房";
				if(rb3.Checked)
					newStatus="自用";
				if(rb4.Checked)
					newStatus="维修";
				if(rb5.Checked)
					newStatus="将到";
				if(rb6.Checked)
					newStatus="将离";

				//更改房间状态
				cmd.CommandText="update 客房信息 set 状态='"+newStatus+"' where 客房编号='"+txt1.Text+"'";
				cmd.ExecuteNonQuery();
				RefreshStatus("select * from 客房信息");//显示全部房间
				dataGrid1.Refresh();
			}	
		
		}

		//--------双击向预定或入住窗体中返回客房数据--------
		private void txt1_DoubleClick(object sender, System.EventArgs e)
		{
			if(this.formType==0||txt1.Text=="")//如果类型为房态图正常显示或未选中房间,则不必返回数据
			{	
				return;
			}
			if(!rb1.Checked)
			{
				MessageBox.Show("必须选择空房");
				return;
			}
			
			string[] returnInfo={"",""};
			if(this.formType==1)//向客房预定管理窗体中返回信息
			{
				returnInfo[0]=txt1.Text;
				returnInfo[1]=cmb1.Text;
				
				HotelReserve.roomInfo=returnInfo;
				this.Close();
			}
			if(this.formType==2)//向客房入住管理窗体中返回信息
			{
				
				returnInfo[0]=txt1.Text;
				returnInfo[1]=cmb1.Text;
				
				HotelArrival.roomInfo=returnInfo;
				this.Close();
			}				
		}

		//----------每当窗体激活时,即刷新房态-------------
		private void RoomStatus_Activated(object sender, System.EventArgs e)
		{
			string sqlStr;
			if(cmb1.Text=="")
			{
				sqlStr="select * from 客房信息";				
			}
			else
			{
				sqlStr="select a.* from 客房信息 a,客房类型 b where (a.类型编号=b.类型编号)"
					+"and(b.类型名称='"+cmb1.Text+"')";
			}
			RefreshStatus(sqlStr);//更新房间的数据
			dataGrid1.Refresh();			
		}

	}
}

⌨️ 快捷键说明

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