【原创】总结这个项目【续】

本文介绍了解决ASP.NET应用中动态赋值和多表数据统计的问题。对于动态赋值,通过调用JavaScript实现了子窗口与父窗口间的数据传递;对于多表统计,则通过创建视图简化了业务逻辑层的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 动态赋值的问题,

这个问题整整搞了两天,一开始想实现的效果是:在工资添加页面中,不需要用户输入员工编码,因为用户不一定就能记住每个员工的编码,而是在双击控件或者点击控件后面的按钮的时候弹出一个新的窗口,在弹出的新窗口中使用表格(GridView)来显示员工的信息,当用户双击表中某一行的信息时,窗口就会自动关闭,并且把值赋予原来子窗口中。这也是很多企业软件中经常使用的方法,比如U3中就是这样使用的。

但是,使用了Session来存储值,在原来窗口中获取,这样是不能实时获取的;使用选择按钮来实现,但是这种方法又不能跨浏览器来获取,智能在当前的浏览器窗口来传值

protected void gvMessageEmp_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { …….. //实现双击某一行后,动态更新工资页面的信息;放在Session中会占用缓存 //Session["SelectEmpID"] = e.Row.Cells[0].Text.ToString().Trim(); //Session["SelectEmpName"] = e.Row.Cells[1].Text.ToString().Trim(); //Session["SelectDepID"] = e.Row.Cells[2].Text.ToString().Trim(); //Session["SelectDepName"] = e.Row.Cells[3].Text.ToString().Trim(); string jsString = "window.opener.document.getElementById('txtEmpId').value='" + e.Row.Cells[0].Text.ToString().Trim() + "';window.opener.document.getElementById('txtEmpName').value='" + e.Row.Cells[1].Text.ToString().Trim() + "';window.opener.document.getElementById('txtDepId').value='" + e.Row.Cells[2].Text.ToString().Trim() + "';window.opener.document.getElementById('txtDepName').value='" + e.Row.Cells[3].Text.ToString().Trim() + "';window.close();"; e.Row.Attributes.Add("ondblclick", jsString); } }

最后,通过询问论坛一个.Net朋友,才解决了这个问题:

上面就是这个问题的解决方法,原本我是放在Session中的,但是这个占用浏览器的缓存,数据多了就会影响用户浏览的速度。

问题的关键就在: window.opener.document.getElementById('txtEmpName')代码上opener是专门针对open一个子窗口的父窗口的引用。

2. 需要查询不同表之间的数据,而且还要对表进行数据统计

我要实现的功能是查询应聘人员的录取,待定,淘汰的信息统计,这个应聘人员表中没有这些字段,只有一个应聘状态标记,而且这里的职位信息时从招聘表的招聘岗位中获取的。一开始是想通过表之间的关联关系进行查询统计,但是这样数据的处理量和逻辑就会非常麻烦

最后的解决方法就是新建了一张视图,在视图的的SQL语句中对信息进行统计

代码如下:

SELECT DISTINCT TOP 100 PERCENT dbo.HRH_Recruitment.PositionName AS PsName, dbo.HRH_Recruitment.Several AS PsSeveral, (SELECT COUNT(ApplyID) AS RecruitState FROM dbo.HRH_Apply WHERE (ApplyID IN (SELECT ApplyID FROM HRH_Apply WHERE ApplyState = 1))) AS RecruitState, (SELECT COUNT(ApplyID) AS undeterminedState FROM dbo.HRH_Apply WHERE (ApplyID IN (SELECT ApplyID FROM HRH_Apply WHERE ApplyState = 0))) AS UndeterminedState, (SELECT COUNT(ApplyID) AS EliminateState FROM dbo.HRH_Apply WHERE (ApplyID IN (SELECT ApplyID FROM HRH_Apply WHERE ApplyState = 2))) AS EliminateState, dbo.HRH_Recruitment.UsefulTime AS UseTime, dbo.HRH_Recruitment.State AS PsState FROM dbo.HRH_Apply INNER JOIN dbo.HRH_Recruitment ON dbo.HRH_Apply.ApplyPosition = dbo.HRH_Recruitment.PositionName ORDER BY dbo.HRH_Recruitment.UsefulTime

这样既没有影响表的结构,而且省去了很多在业务逻辑层的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值