dategride动态显示数据

smdszgzh 2009-11-10 11:35:46
我现在在做一个报表统计,具体如下:

写一个小的应用程序,上面列出很多选项(全是数据库中的列),让用户勾选,他勾选的内容就是我从数据库中查询到并要在dategride控件中显示的内容,最后还要把数据导出到excel表中.
例:
LIST_NAME 开始日期 预约日期 到达日期 完工日期
报:回单柜不能取单 2009-08-24 10:35:32.247 2009-08-24 11:19:41.683 NULL 2009-08-25 09:00:00.000


上面应用程序列出的项是,开始日期,LIST_NAME,预约日期,到达日期,完工日期

如果用户勾选LIST_NAME和预约日期,dategride控件就只显示这二列。

因为考虑到可选列非常多,不可能把所有的列都列出来!

刚来公司,接触C# ,请高手指点下!
...全文
108 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengjian_428 2009-11-10
  • 打赏
  • 举报
回复
全部列都查出来 再设置dategrid
smdszgzh 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wartim 的回复:]
隐藏掉
dataGridView1.Columns[0].Visible = false;
[/Quote]

你的意思是先把所有的列都列出来,然后根据用户的选择,把不显示的隐藏掉?
这个好像还可行,我试试先!
smdszgzh 2009-11-10
  • 打赏
  • 举报
回复
我觉得 这个每次查询出来的数据列都不相同,能不能动态创建dategride控件!
wartim 2009-11-10
  • 打赏
  • 举报
回复
隐藏掉
dataGridView1.Columns[0].Visible = false;
hhc123 2009-11-10
  • 打赏
  • 举报
回复
DataGrid的属性不是有个可以设置的吗
patrickpan 2009-11-10
  • 打赏
  • 举报
回复
把所有的列读出来,然后根据需要显示.
至于样式,方法就很多了:
1. 你可以定义好一个样式数组.
2. 你可以把样式保存在xml文件中.
3. 你可以定义一个实体类,用特性保存样式结果.
4. 你可以用泛型,然后序列化保存
wuyq11 2009-11-10
  • 打赏
  • 举报
回复
保存显示的列到数据库
通过构建动态表头实现
或隐藏相关列
public struct StructField
{
public int x;
public int y;
public string fieldheadname;//导出列的表头
public string fieldname;//DS中的字段名
public int fieldb;//是否不是合并字段

public StructField Getist(int x, int y, string fieldheadname, string fieldname, int fieldb)
{
StructField sf;
sf.x = x;
sf.y = y;
sf.fieldheadname = fieldheadname;
sf.fieldname = fieldname;
sf.fieldb = fieldb;
return sf;
}
}
List<StructField> LstField = new List<StructField>();
void GetFields(int count) //设置要导出的列
{
LstField.Clear();
LstField.Add(new StructField().Getist(1, 0, "编号", "XTBH", 1));
LstField.Add(new StructField().Getist(1, 0, "名称", "OrganizationMC", 1));
LstField.Add(new StructField().Getist(1, 0, "名称", "Mingc", 1));
if (count > 0)
{
int countcol = Convert.ToInt32(this.GridView2.HeaderRow.Cells[3].Attributes["colspan"]);
if (countcol > 0)
{
LstField.Add(new StructField().Getist(0, countcol - 1, "投资", "", countcol));
}
}
}
protected void GridView1_OnRowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
TableCellCollection tcHeader = e.Row.Cells;
tcHeader.Clear();

tcHeader.Add(new TableHeaderCell());
tcHeader[0].Attributes.Add("rowspan", "2");
tcHeader[0].Text = "项目编号";
}
}
lzsh0622 2009-11-10
  • 打赏
  • 举报
回复
要想比较理想地控制显示效果,在设计时全部绑定好.
这样每列宽度、显示样式等在设计时可以设置,
动态控制列的显示与否就行了。
ncjcz 2009-11-10
  • 打赏
  • 举报
回复
根据查询结果动态添加列实现起来不难。
麻烦的是怎么样设置样式,你有可能要把每列的样式设定都保存到数据库中,一并取出来
ncjcz 2009-11-10
  • 打赏
  • 举报
回复
在页面初始化或者加载的时候添加列,注意回发的时候不要重复添加
//DataGrid dataGrid1 = new DataGrid();
BoundColumn dc = new BoundColumn();
dc.HeaderText = "测试";
dc.DataField = "字段名";
dataGrid1.Columns.Add(dc);
liherun 2009-11-10
  • 打赏
  • 举报
回复
关注
lsj_zrp 2009-11-10
  • 打赏
  • 举报
回复
全部绑定后再隐藏了

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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