GRIDVIEW自动生成列

happy01 2008-09-12 05:44:23
姓名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
张三 出差 请假
李四
王五 出差
赵六


怎么根据每个月份现在GridView字段的列,列自动生成为某个月份的天,第一天都这个月的最后一天分别作为列,GridView要怎么生成字段
然后提供编辑选择下拉菜单,初始是空的,选择下拉菜单数据后在数据库新增一条,如修改直接修改数据库 ;
数据库有用户 时间 考勤类型 在修改表时候直接修改当前用户该时间的考勤类型 请问要怎么处理!
...全文
244 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yan466975512 2010-04-13
  • 打赏
  • 举报
回复
vvvdvdfDFSDSDS D
lanytin 2008-09-12
  • 打赏
  • 举报
回复
学习中……
Mark.
wxg22526451 2008-09-12
  • 打赏
  • 举报
回复
/*
author:旋风
date:2008-9-12 21:21:00
version:V1.0
memo:SQL自动生成月份天数列
*/
--> 测试数据: [T]
if object_id('[T]') is not null drop table [T]
create table [T] ([用户] varchar(4),[时间] datetime,[考勤类型] varchar(4))
insert into [T]
select '张三','2008-8-3','出差' union all
select '张三','2008-8-4','请假' union all
select '李四','2008-8-5','请假' union all
select '王五','2008-8-6','出差' union all
select '王五','2008-8-7','请假' union all
select '赵六','2008-8-2','请假'

select * from [T]
go

create procedure createmdays
@month int--月份
as
declare @sql varchar(8000),
--@month int,--月份
@mcount int,--月天数
@mdate datetime,--月初始值
@i int--计数
begin
--set @month=8
set @i=1
set @mdate=ltrim(str(datepart(yy,getdate()))+'-'+ltrim(@month)+'-'+'1')
select @mcount=datediff(dd,@mdate,dateadd(mm,1,@mdate))
--print @mcount
set @sql='select 用户'
while @i<=@mcount
begin
set @sql=isnull(@sql+',','')+'max(case datepart(dd,时间) when '+ltrim(@i)+' then [考勤类型] else '''' end) as ['+ltrim(@i)+']'
set @i=@i+1
end
select @sql=@sql+' from T where datepart(mm,时间)='+ltrim(@month)+' group by 用户 '
--print @sql
exec(@sql)
end
go

exec createmdays 8--执行

go
--删除测试
drop table T
drop procedure createmdays
/*
用户 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
李四 请假
王五 出差 请假
张三 出差 请假
赵六 请假

(4 行受影响)
*/
wxg22526451 2008-09-12
  • 打赏
  • 举报
回复
GridView就绑定显示
新增修改记录还是单独做比较好
hy_lihuan 2008-09-12
  • 打赏
  • 举报
回复
这个好像比较麻烦的啊,你需要处理好表现层和数据库的衔接,数据库的绑定不会是你表现得这样的
benbenkui 2008-09-12
  • 打赏
  • 举报
回复

void databind()
{
DataTable dt = new DataTable();
int month=DateTime.Now.Month;
dt.Columns.Add("姓名");
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
{
for (int i = 1; i < 32; i++)
{
dt.Columns.Add("第"+i+"天");
}
}
else
{
for (int i = 1; i < 31; i++)
{
dt.Columns.Add("第" + i + "天");
}
}
DataRow row = dt.NewRow();
row[0] = "张三";
row[30] = "111";
dt.Rows.Add(row);
GridView1.DataSource = dt;
GridView1.DataBind();
}
wxg22526451 2008-09-12
  • 打赏
  • 举报
回复
用SQL做的话应该得用存储过程
根据月份的天数循环拼成动态SQL语句返回结果集
wxg22526451 2008-09-12
  • 打赏
  • 举报
回复
        //取得月份的天数
public int GetMdays(int month)
{
DateTime d1 = new DateTime(DateTime.Now.Year, month, 1);//刚这里有错
int tdays = (d1.AddMonths(1) - d1).Days;
return tdays;

}
wxg22526451 2008-09-12
  • 打赏
  • 举报
回复
//动态生成DataTable,根据每月的天数生成如1-31天的列,再根据查询的表数据进行赋值
private void button5_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("name",typeof(string));
int tdays = GetMdays(9);//取天数
for (int i = 1; i <=tdays; i++)//添加列
{
dt.Columns.Add(i.ToString(), typeof(string));
}
//循环赋值
int count = 4;//假设是SQL查询出的姓名行数
for (int i = 0; i < count; i++)
{
DataRow dr = dt.NewRow();
dr["name"] = "name"+(i+1).ToString();//假设是SQL查询出的姓名值
for (int j = 1; j <= tdays; j++)
{
dr[j.ToString()] = j.ToString();//假设是SQL查询出列的值
}
dt.Rows.Add(dr);
}
GridView3.DataSource = dt;//绑定
GridView3.DataBind();
}
//取得月份的天数
public int GetMdays(int month)
{
DateTime d1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
int tdays = (d1.AddMonths(1) - d1).Days;
return tdays;
}
zoroz 2008-09-12
  • 打赏
  • 举报
回复
帮顶
wxg22526451 2008-09-12
  • 打赏
  • 举报
回复
动态生成DataTable,根据每月的天数如生成1-31天的列
然后给DataTable循环 查询的表数据进行赋值,
再就是用模板列来编辑修改Gridview了
libangchuan 2008-09-12
  • 打赏
  • 举报
回复
按你上面显示的数据库应该要3个字段就可以
然后在数据库中用先求出这个月有多少天然后用while拼第天的数据
select [1]=case when zt!=null or zt!='' then zt else '' end,[2]=case when zt!=null or zt!='' then zt else '' end,...... from table1 依次类推
可以先用while把这个月的 case when 先拼出来

62,046

社区成员

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

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

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

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