1.一个简单的WPF-MVVM的TabControl控件,以下是根据状态分类出来的TabItem,
如图:
因为是MVVM的加载事件,所以需要在这个用户控件里面给它一个Loaded加载事件,
是为了让它一打开的时候就加载出来,
图上的“待认领”“已认领”和“全部记录”的表格
ItemsSource="{Binding LostTable}"属性的命名都是不一样的,
又因为我的表格涉及到多张表的数据,所以我给了一个Vo类,现在先把三个表格的属性和加载的命令事件写出来先
接下来就是linq查询方法,根据状态把它们分别放到对应的表格
//声明一个临时表格
DataTable dataTable;
//加载
public void Loaded()
{
//查询全部记录
var linq = (from tb in myModels.D_OtherHousing
join tbroom in myModels.D_Room on tb.roomID equals tbroom.roomID
join tbguest in myModels.S_GuestInformation on tb.GuestInformationID equals tbguest.GuestInformationID
join tbstaff in myModels.S_Staff on tb.staffID equals tbstaff.staffID
select new LostFoundVo
{
State = tb.State,//状态
ClaimTime = tb.ClaimTime,//认领时间
Claim = tb.Claim.Trim(),//认领人
PickUp = tb.PickUp,//拾到时间
OtherHousing = tb.OtherHousing,//内容
Lostname = tb.Lostname.Trim(),//拾到人姓名
OtherHousingID = tb.OtherHousingID,//失物表ID
Remark = tb.Remark,//备注
GuestInformationID = tb.GuestInformationID,//客人ID
name = tbguest.name,//客人姓名
roomID = tb.roomID,//房间ID
roomnumber = tbroom.roomnumber.Trim(),
staffID = tb.staffID,//员工ID
ANun = tbstaff.ANun, //员工工号
});
//==模糊查询(房间号,姓名,状态)
if (!string.IsNullOrEmpty(txtroomnuber))
{
linq = linq.Where(m => m.roomnumber.Contains(txtroomnuber));
}
if (!string.IsNullOrEmpty(txtname))
{
linq = linq.Where(m => m.name.Contains(txtname));
}
if (!string.IsNullOrEmpty(txtState))
{
linq = linq.Where(m => m.State.Contains(txtState));
}
WholeLostTable = linq.ToList();//全部记录
dataTable = ListToDataTable.ListToDataTablen(WholeLostTable);//临时表格数据
#region 查询待认领记录
var a = linq.Where(m => m.State == "待认领");
//==模糊查询(房间号,内容,拾到时间)
if (!string.IsNullOrEmpty(txtroomnuber))
{
a = a.Where(m => m.roomnumber.Contains(txtroomnuber));
}
if (!string.IsNullOrEmpty(txtOtherHousing))
{
a = a.Where(m => m.OtherHousing.Contains(txtOtherHousing));
}
if (!string.IsNullOrEmpty(dtPickUp))
{
DateTime dt = Convert.ToDateTime(dtPickUp);
a = a.Where(m => m.PickUp >= dt);
}
LostTable = a.ToList();//待认领
#endregion
#region 查询已认领
var b = linq.Where(m => m.State == "已认领");
//==模糊查询(房间号,内容,认领时间)
if (!string.IsNullOrEmpty(txtroomnuber))
{
b = b.Where(o => o.roomnumber.Contains(txtroomnuber));
}
if (!string.IsNullOrEmpty(txtOtherHousing))
{
b = b.Where(o => o.OtherHousing.Contains(txtOtherHousing));
}
if (!string.IsNullOrEmpty(dtClaimTime))
{
DateTime dt = Convert.ToDateTime(dtClaimTime);
b = b.Where(o => o.ClaimTime >= dt);
}
AlreadyLostTable = b.ToList();//已认领
#endregion
}
2.弹出窗口的隐藏和禁用
//新增(弹出窗口)
public void Add()
{
Pending_WD pending = new Pending_WD();
pending.AlreadyLost.Visibility = System.Windows.Visibility.Hidden; //隐藏认领框信息
var Window = pending.DataContext as PendingViewModel;
Window.text = "失物新增";
Window.IsAdd = true;//新增标志
pending.Show();
}
//认领(弹出框)
public void Already()
{
//获取选中数据
LostFoundVo vo = SelectLostEntity;
if (vo == null)
{
MessageBox.Show("请选择要认领的物品", "系统提示");
return;
}
else
{
//获取ID
int ID = vo.OtherHousingID;
Pending_WD pending = new Pending_WD();
pending.LostTextBlock.IsEnabled = false;//禁用拾到信息
var Window = pending.DataContext as PendingViewModel;
Window.text = "失物认领";
Window.IsAdd = false;//修改
//回填数据
var HT = WholeLostTable.Where(m => m.OtherHousingID == ID).ToList();//根据ID查询出数据
Window.roomnumber = HT[0].roomnumber.ToString().Trim();//房间号
Window.Lostname = HT[0].Lostname.ToString().Trim();//拾到人姓名
Window.ANun = HT[0].ANun.ToString().Trim();//登记人工号
Window.PickUp = HT[0].PickUp.ToString().Trim();//登记时间
Window.OtherHousing = HT[0].OtherHousing.ToString().Trim();//内容
pending.Show();//打开窗口
}
}
禁用和隐藏的原理其实很简单,就在控制里给一个name,直接获取name然后给属性值