超难的功能实现

darcyhu 2007-07-21 05:32:28
最近在做一个项目管理的项目,要用到这样一种功能:

项目一 项目二 项目 三
星期一 2 3 2
星期二 5 8 1

就是说让每一个工程师每天记录自己在每个项目上花了多少时间。我已经建了一个project表,用来存储所有项目的信息,然后在这个页面上根据一些条件读出这个工程师做的项目。
页面上的项目数目(即列数)是不定的,都是动态从数据库读出来的,所以在设计数据库表时肯定不能设计成死了,想问问各位老大有没有什么好的解决方案啊?

...全文
1323 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
KKND2006 2007-07-24
  • 打赏
  • 举报
回复
不就是日程安排么

网上一堆代码的

LZ自己去搜
Jinglecat 2007-07-24
  • 打赏
  • 举报
回复
交叉表
bigmingming 2007-07-24
  • 打赏
  • 举报
回复
可以参考project
ttg520 2007-07-23
  • 打赏
  • 举报
回复
先动态生成列 再动态生成行
wisdomqq 2007-07-23
  • 打赏
  • 举报
回复
难乎?
xyb921 2007-07-23
  • 打赏
  • 举报
回复
学习
alvinyz 2007-07-23
  • 打赏
  • 举报
回复
呵呵,碰巧我也刚做过一个项目信息管理系统
楼主的问题是统计项目成员每天工时,可以设计一张日报表,记录各个工程师的工时信息(包括所属项目、岗位、工时、日期等)。你的问题是每天所做的项目可能不大同,可以不采用asp.net的控件,直接拼出一个table来,比较灵活。下面的代码可以参考一下,希望有所帮助。

private void BindData()
{
//用一个lable来显示那个table
this.lbl.Text="";
//列出所有日期
DataSet ds_date = new DataSet();
//列出所有项目
DataSet ds_project = new DataSet();
//列出每天项目工时
DataSet ds_time = new DataSet();
string showuserid=[用户id];//该工程师id

classes.data.BaseLib leveldata = new ProjMG.classes.data.BaseLib();

at("<table cellspacing=1 cellpadding=0 width=100% bgcolor=DodgerBlue>");
at("<tr bgcolor=#719DE8 height=25 align=center>");
at("<td><b>日期</b></td>");
if(data.AllProject(out ds_project,out errMsg)&&ds_project.Tables[0].Rows.Count>0)
{
//列出该员工在办的所有项目
for(int j=0; j<ds_project.Tables[0].Rows.Count; j++)
{
at("<td><b>"+ds_project.Tables[0].Rows[j]["post"].ToString()+"</b></td>");
}
at("</tr>");
//所有日期,如果只是按星期几来的话可以写死
if(data.AllDate(out ds_date,out errMsg)&&ds_date.Tables[0].Rows.Count>0)
{
string bcolor="#f2f9fb";
for(int j=0; j<ds_date.Tables[0].Rows.Count; j++)
{
if(bcolor=="#f2f9fb")
bcolor="#ffffff";
else
bcolor="#f2f9fb";

at("<tr bgcolor="+bcolor+" height=25 align=center><td>"+ds_date.Tables[0].Rows[j]["date"].ToString()+"</td>");
//下面是该工程师一天内所有项目参与工时,0表示该日没做那个项目
if(data.WorkTime(showuserid,out ds_time,out errMsg)&&ds_time.Tables[0].Rows.Count>0)
{
for(int k=0; k<ds_time.Tables[0].Rows.Count; k++)
{
at("<td>"+ds_time.Tables[0].Rows[k]["nums"].ToString()+"</td>");
}
}
at("</tr>");

}
}

}
at("</table>");
}

private void at(string text)
{
this.lbl.Text += text;
}


至于统计该工程师某一天所参与的项目工时的sql语句可以这么写:
select project,case when nums is null then '0' else nums end as nums from (select * from tb_pj_project where id = [showuserid] ) a left join (select project as wproject,sum(worktime) as nums from TB_PJ_WORKS where [日期] = [日期] group by project ) b on a.project = b.wproject order by project

我是根据楼主的意思改动的,写得不好请见谅:)
LutzMark 2007-07-23
  • 打赏
  • 举报
回复
再设计一个项目表 对应此表的项目ID
shoushii 2007-07-23
  • 打赏
  • 举报
回复
星期一 星期一 星期一
项目一 2 3 2
项目二 5 8 1
项目二 5 8 1
使用什么组件都可以

flyingfz 2007-07-23
  • 打赏
  • 举报
回复
mark
ken_flash 2007-07-23
  • 打赏
  • 举报
回复
项目不固定 但星期几(1到5)是固定的呀……

项目做行,星期做列不就OK了
wdzr_826 2007-07-23
  • 打赏
  • 举报
回复
改一改你原来设计的数据库,会很简单的。。
  • 打赏
  • 举报
回复
实在没发现有哪难了...
blueflag 2007-07-23
  • 打赏
  • 举报
回复
我感觉这个应该是数据库设计中比较基本的一些东西了吧? 按照范式进行设计基本上应该没有啥问题吧?
设计一个表
工程师名 项目名 星期 工时
A 项目一 星期一 1小时
A 项目二 星期一 2小时
B 项目一 星期一 1小时
B 项目二 星期一 2小时
等等 类似,进行修改,至于生成报表,就不用多说了吧? 很灵活啊,可以随便生成自己想看到的样子~~

另: 如果让工程师自己进行登记的话,可以写个登陆,就类似于上班打卡似的! 我感觉很简单啊~ 不是很难吧?!!!

早上八点半 2007-07-23
  • 打赏
  • 举报
回复
关注
jackwofe 2007-07-23
  • 打赏
  • 举报
回复
帮顶下
MSSQL 2007-07-23
  • 打赏
  • 举报
回复
在读取数据的时候根据时间去计算星期应该不是难事。
如果技术上有问题可以在记录表中再加一个星期名称字段存放
MSSQL 2007-07-23
  • 打赏
  • 举报
回复
[项目表]
项目编号 项目名称 备注
1 项目一 无
2 项目二 无
[记录表]
项目编号 记录时间 用时数
1 2007-01-01 4
2 2007-01-01 5
lynn_wang 2007-07-23
  • 打赏
  • 举报
回复
mark..學習
wwd252 2007-07-23
  • 打赏
  • 举报
回复
不错啊!
加载更多回复(27)

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧