一个比较棘手的问题:GridView 动态绑定列的一个问题

a130206 2010-08-03 09:54:09
在做一个审计项目管理的项目时,遇到一问题,比较棘手,思考数天,未果。请教高手解决。

问题:
1、控件信息:
a)一个TextBox,两个Dropdownlist,一个GridView控件,一个SqlDataSource控件,一个Button按钮控件
b)其中,TextBox控件为用户输入的归口科室的查询条件,两个Dropdownlist为用户选择的年度区间;点击Button按钮执行生成结果操作,Gridview控件用于显示结果

2、数据库信息:
a)审计单位表(orgInfo):orgID(单位编码),orgName(单位名称),orgDep(归口科室)
审计项目表(proInfo): proID(项目编码),proName(项目名称),proOrg(被审单位),proDep(实施科室),proYear(项目实施年度),proDigest(项目概要信息)
b)对于审计单位,只能归口于一个科室,一个科室有多个被审单位;
对于一个审计项目,它必然有一个被审单位,被审单位也一定能够在审计单位表中查询到。

3、操作信息
a)首先,用户在TextBox中输入归口科室条件,通过两个Dropdownlist控件选择年度区间;然后,用户点击Button按钮进行查询。
例:textbox输入内容“行政科”,dropdownlist1选择2006,dropdownlist2选择2009(即年度区间为2006--2009)
b)我想在gridview显示的结果为:

单位编码 单位名称 归口科室 2006 2007 2008 2009
0001 单位1 行政科 已审 未审 未审 已审
0002 单位2 行政科 未审 已审 未审 未审
0003 单位3 行政科 已审 未审 已审 已审
0004 单位4 行政科 未审 未审 已审 已审

c)gridview的第一行为gridview的列头; 根据orgInfo表可查询到前三列内容,后四列为动态添加,列头为选择的年度区间,一个年度一个列头。
d)添加动态列的值的确定方法:根据单位名称和动态添加的列头名称在proInfo表中进行查询(查询时单位名称对应proInfo表中的proOrg字段,列头对应proInfo表中的proYear字段);
如果能够查询到相关项目(最多能够查询的一条记录),则用蓝色字体显示为“已审”,并且,点击此“已审”值时,能够打开一个页面,显示查询到的项目摘要信息;
如果未查询到相关项目,则用红色字体显示为"未审"
例:在动态添加2006列,确定第一行值时:首先用"单位1"和"2006"两个条件在proInfo表中进行查询,结果查到相应项目,则将gridview与2006列交叉的单元格标示为"已审","已审"为一个链接,

单击链接显示查询到的项目的概要信息(proInfo中包含有此字段)

4、请教高手,我应如何书写Button的单击事件,完成如上gridview显示的结果(重点是如何动态添加列,及如何动态绑定相应数据)
...全文
364 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
a130206 2010-08-03
  • 打赏
  • 举报
回复
我意思不是单独实现,a,b,c,d问题,实际上它们也不是单独的问题,我写a,b,c,d只是为了问题能够更明的表述
实际上就是一个问题,通过单击按钮,按要求显示结果,是不能通过单独实现各个问题来实现的,中间有相关的逻辑关系。

实际上,问题数据结构不是很复杂,请高手亲自建立一个项目实现一下,在没有做的时候,我也是感觉比较简单的一个问题,可真正实现起来,并不是那么的简单
脾气不坏 2010-08-03
  • 打赏
  • 举报
回复
a 、b可以通过简单sql语句或存储过程实现
c、d可以通过编辑gridview模板实现
具体的百度上谷歌之,很容易就出来了。。
yao13675863922 2010-08-03
  • 打赏
  • 举报
回复
这问题怎么那么眼熟啊,好像在哪里看过一样的问题。。。。。额
  • 打赏
  • 举报
回复
好长啊。。。
你试下在GV的OnRowCreated事件里动态添加列呢?大致思路可以像这样(未测)

Button_Click(...)
{
GridView1.DataBind()
}

GridView1_RowCreated(...)
{
DataRowView drv = (DataRowView)e.Row.DataItem;
//获取传入的值,计算一下,弄个for循环来动态插入列
for(...)
{
//动态添加列
GridView1.Columns.Add(AddColumn(drv["code"].ToString(),...)) //传入你的参数
}
}

protected TemplateField AddColumn(string code, string coname)
{
TemplateField mycustomField = new TemplateField(); //创建列实例
mycustomField.ShowHeader = true; // 设置属性
HyperLink hl = new HyperLink(); //控件
hl.Text = "X审"; //这里,根据传入的参数去查询项目的状态,然后设置链接的文本、颜色等
....

mycustomField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, 查询到列头);
mycustomField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "", hl);
return mycustomField;
}
a130206 2010-08-03
  • 打赏
  • 举报
回复
就是这样的 实际上无论采用哪种方式都行,只要能够实现功能就行
gongsun 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gongsun 的回复:]
其实我没用过GW
[/Quote]

不过我觉得 你的问题和 GW没什么关系。你只是想显示你要的数据而已
gongsun 2010-08-03
  • 打赏
  • 举报
回复
其实我没用过GW
a130206 2010-08-03
  • 打赏
  • 举报
回复
自己顶顶。。。。
a130206 2010-08-03
  • 打赏
  • 举报
回复
能不能请各位高手给出一个比较系统的解决方案?

我先前尝试通过动态生成模板列,然后在模板列中放置一个超级链接按钮来完成此功能。但在做的时候,出现很多问题未能解决,主要是数据库查询及模板列的数据动态绑定等问题交叉相连,彼此的逻辑弄的头有点大。
SK_Aqi 2010-08-03
  • 打赏
  • 举报
回复
业务逻辑表述的很长,但是还是得你自己处理sql或者存储过程,这个没人帮你做出来
其他估计也只是页面一些特殊处理了...主要在于业务分析得数据
gongsun 2010-08-03
  • 打赏
  • 举报
回复
只是很简单的 多条件查询, 2006 2007 2008 之类的就是

sql中 case when then 语句

lz为什么不多gg几下。
IHandler 2010-08-03
  • 打赏
  • 举报
回复

你可以在数据库中写个存储过程去查询所需要的数据,构造符合要求的结构,可以用本地临时表
或者在程序代码中构造DataTable
高亮显示等可以在GridView的RowDataBound中处理
gsq_0912 2010-08-03
  • 打赏
  • 举报
回复
太長了,这么热的天,看不下去,帮顶下!!
NocturneLLJ 2010-08-03
  • 打赏
  • 举报
回复
不难.
但要花点工夫.
关于年份的动态列可以在RowCreated事件中根据两年份的差值添加.
SQL部分问题应该也不大了
a130206 2010-08-03
  • 打赏
  • 举报
回复
问题描述的长了点,但为能尽量把问题说清楚明白,只好如此。望高手请出招。。。。。。
leveretzhang 2010-08-03
  • 打赏
  • 举报
回复
动态绑定列很简单,动态生成 gridview 都可以,动态列怎么是问题?

hp_1015 2010-08-03
  • 打赏
  • 举报
回复
顶下!期待高手~~

62,248

社区成员

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

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

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

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