用图片简介下接下来要完成的操作:
- 鼠标移入左边房态图中五个房子的任意一个客房内,获取该客房内的值,然后把需要用到的值赋值给右边红色下划线的三个框内。
鼠标移入前(图1):
鼠标移入后(完成效果图2):
实现思路:
1.因为房态图中的客房是来自另外页面(UserControl),所以这里会用到委托来实现赋值。
实时房态ViewModel层:页面Load方法:Select_HouseTable 查询客房数据for循环传递到客房ViewModel层(有多少条数据就生成多少个客房格子)
2.客房ViewModel层:
//声明委托(刷新客房信息)
public delegate void ChangeTextHandler(int text);
public event ChangeTextHandler ChangeTextEvent;
当接受客房信息成功后就能看到那些客房小格子 首先判断客房ID是否为空
private void GridMouseEnter(){//鼠标移入方法
if (dataTable.Rows[0]["guestRoom_id"].ToString() != null) {
int roomID =Convert.ToInt32(dataTable.Rows[0]["guestRoom_id"].ToString());//获取客房ID
var roomTable = (from tbRoom in myModels.t_guestRoom
where tbRoom.guestRoom_id == roomID //根据获取的客房ID查询出该客房的数据
select tbRoom).ToList();
dataTable = ListToDataTable.ListToDataTablen(diningTable); //然后用到ListToDataTable把查出来的数据 转化为dataTable 并存放在零时表dataTable内
if (diningTable.Count >0){ //这种判断可以减少不必要的错误 所以在平时应该常写
ChangeTextEvent(roomID);//利用委托把ID传过去
}
}else
return;
}
3.回到实时房态ViewModel层:
//鼠标移入移出事件
private void ShowMessage(int msgx)
{
try
{
//房桌ID
int ID = Convert.ToInt32(msgx);
//查询房客信息
var roomT = (from tbHouseTable in myModels.t_guestRoom
orderby tbHouseTable.roomType //按照桌号排序
where tbHouseTable.guestRoom_id == ID
select tbHouseTable).ToList();
if (roomT.Count>0)
{
roomNumber = roomT[0].roomNumbr.ToString();
roomType = roomT[0].roomType.ToString();
string j = roomT[0].floor.ToString();
floor = "第" + j + "层";
}
else
{
//鼠标移开清除数据
roomNumber = "";
roomType = "全部房间";
floor = "全部楼层";
}
}
catch (Exception e)
{
Debug.WriteLine(e);
}
}
然后就能看到效果如2图所示
注意:赋值后的下拉框值要和页面上给下拉框绑定的默认值相同,不然可能导致数据有但是显示不出来,就是因为下拉框中没有该默认值。