在ASP.NET的DataGrid数据显示控件编程中,我们有几种方式可以增加DataGrid columns。其中最常见的方法是在web forms设计器中增加,通过在控件工具箱中拖访DataGrid控件到web设计页面,然后在属性生成器中增加Columns列;还有一种方式就是在HTML视图模式下更改HTML代码的方式增加Columns列。但是这两种方式都是在设计时进行的,一旦设计完成就无法更改。其实我们也可以在程序运行时动态的增加或者删除Columns列。在这篇文章中,我将向大家介绍如何编程实现在运行时动态的增加和删除Columns列,其实是通过隐藏或者现实Columns列来实现的。

  DataGrid 的Columns属性是访问datagrid Columns的关键所在。访问这个属性返回的是DataGridColumnCollection这样的一个集合对象,它包含了所有的DataGrigColumn对象。DataGridColumnCollection提供了增加一个DataGrigColumn对象和删除一个已经存在的DataGrigColumn对象的方法。,我们将使用DataGridColumnCollection的Add方法来增加一个DataGrigColumn对象,从而在运行时动态的增加一列到DataGrid中去。一个DataGrigColumn代表DataGrid的一列,DataGrid的Visible属性用来显示或者隐藏一个列。

  好了,下面让大家跟我一起来创建一个DynamicDataGrid的C#的ASP.NET的工程,他有隐藏和显示DataGrid 的每一列的选项。

  在我用VS.NET创建的web application里面,我在设计页面上拖放了一个Panel 控件。在这个panel控件上,我放置了一个DataGrid控件,一个DropDownList控件,两个Button控件用于改变DataGrid控件的属性。

  现在我们开始创建两个方法:FillDataGrid()和FillColumnsList()方法。FillDataGrid()用于增加一个列到DataGrid控件和用DataSet数据源来填充它。在这里的我是通过DB.GetDataSet()方法来获取DataSet的。大家可以参照附加的源代码文件(DB.CS)获取更多的细节。

  下面的代码说明了CreateDataGrid()的实现。从代码中可以看出,我创建了三个列,用BoundColumn的DataField属性绑定到Dataset的ID,Name和Address字段。BoundColumn类继承自DataGridColumn类。

private void CreateDataGrid()
{
// Set DataGrid properties
DataGrid1.AutoGenerateColumns = false;

// Get a DataSet object filled with data
DataSet ds = DB.GetDataSet();

// Create ID column & add to DataGrid
BoundColumn col = new BoundColumn();
col.HeaderText="User ID";
col.DataField="ID";
DataGrid1.Columns.Add(col);

// Create Name column & add to DataGrid
col = new BoundColumn();
col.HeaderText="User Name";
col.DataField="Name";
DataGrid1.Columns.Add(col);

// Create Address column & add to DataGrid
col = new BoundColumn();
col.HeaderText="User Address";
col.DataField="Address";
DataGrid1.Columns.Add(col);

// DataGrid data binding
DataGrid1.DataSource = ds.Tables[0];
DataGrid1.DataBind();
}

  FillColumnsList()方法只是简单的从DataGrid中读取列名,并且将这些列(Columns)名填充到DropDownList控件的下拉列表中去。我们将使用DropDownList控件来选取隐藏或者显示的列。

private void FillColumnsList(DataGrid grid)
{
foreach (DataGridColumn col in grid.Columns)
{
ColumnsList.Items.Add(col.HeaderText);
}
}

  接着我们来添加HideDataGridColumn()方法来具体的通过index索引和bool值两个参数来显示或者隐藏一个列。在这里,我仅仅是简单的设置Columns列的Visible属性为true或者false.

private void HideDataGridColumn(int index, bool show)
{
DataGrid1.Columns[index].Visible = show;
}

  最后的工作就是增加Show Column和Hide Column的单击事件处理。正如我们在代码中看到的一样,我只是简单的调用HideDataGridColumn()方法来显示或者隐藏列,当然要传入参数了。

private void HideColumnBtn_Click(object sender, System.EventArgs e)
{
HideDataGridColumn(ColumnsList.SelectedIndex, false);
this.DataBind();
}
private void ShowColumnBtn_Click(object sender, System.EventArgs e)
{
HideDataGridColumn(ColumnsList.SelectedIndex, true);
this.DataBind();
}

  OK,所有的工作都结束了,我们看看运行的结果如何。你可以通过下拉列表来选择要隐藏或者显示的列,并且只需单击Show或者Hide按钮即可。

转载于:https://www.cnblogs.com/ProgRamMer-cSdn/archive/2008/11/13/1332414.html

动态的管理ASP.NET DataGrid数据列【转载】相关推荐

  1. 动态的管理ASP.NET DataGrid数据列

    动网先锋 在ASP.NET的DataGrid数据显示控件编程中,我们有几种方式可以增加DataGrid columns.其中最常见的方法是在web forms设计器中增加,通过在控件工具箱中拖访Dat ...

  2. 为 ASP.NET Datagrid 创建自定义列

    Marcie Robillard DatagridGirl.com 2003 年 9 月 简介 不得不承认,为 Microsoft® ASP.NET 编写 Datagrid 代码包括大量的重复工作.尽 ...

  3. JQuery EasyUI之DataGrid列名和数据列分别设置不同对齐方式(转)

    需求如下 现有数据列三列 Name,Age,CreateDate 数据 张三,18,2000-12-09 :12:34:56 李四,28,2000-12-09 :12:34:56 王麻子,38,200 ...

  4. 工程监测管理平台、工程数据看板、工程总览、动态模型、数据分析、数据跟踪、建筑工地、数据报表、警点管控、现场记录、观测记录、测点管理、模型管理、文档管理、墙体下沉、成员管理、axure原型、产品原型

    工程监测管理平台.工程数据看板.工程总览.动态模型.数据分析.数据跟踪.建筑工地.数据报表.警点管控.现场记录.观测记录.测点管理.模型管理.文档管理.墙体下沉.成员管理.axure原型.产品原型   ...

  5. 动态合并Repeater控件数据列

    前天Insus.NET实现<动态合并GridView数据行DataRow的列>.今天再玩玩Repeater控件,功能也是动态合并某列栏位. Repeater控件跟GridView控件一样集 ...

  6. JQuery EasyUI之DataGrid列名和数据列分别设置不同对齐方式

    我使用的Jquery Easyui  1.2.6 需求如下 现有数据列三列 Name,Age,CreateDate 数据 张三,18,2000-12-09 :12:34:56 李四,28,2000-1 ...

  7. 巧用ASP实现Web数据统计、报表和打印 (转)

    巧用ASP实现Web数据统计.报表和打印 (转)[@more@] 巧用ASP实现web数据统计.报表和打印XML:namespace prefix = o ns = "urn:schemas ...

  8. oracle生产系统报表系统,企业动态生产管理报表系统的设计

    企业动态生产管理报表系统的设计 一个企业进行信息化建设,其重要目的在于及时.准确地掌握企业的生产经营现状,根据市场情况制定下一步生产经营方案.企业管理人员往往通过实时的生产经营报表了解各种情况,动态报 ...

  9. 内存区划分;内存分配;堆、栈概念分析;动态内存管理数据结构及程序样例;核心态与用户态...

    一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初 ...

最新文章

  1. 2021汤家凤1800题数学一PDF_【重要更新】朱伟9720年英语一二真题解析视频 唐迟罗汉班 谭剑波作文 新东方英语 文都数学汤家凤...
  2. 配置网口相机(大恒水星相机)
  3. 【Android 逆向】Android 逆向方法 ( 静态逆向解析 | 函数调用分析 | 动态运行跟踪 | 运行日志分析 | 文件格式解析 | 敏感信息分析 | 网络信息监控 | 环境伪装模拟 )
  4. Android中图片的三级缓存策略
  5. Java基础:网络编程
  6. IDA反编译失败总结
  7. java文件编译_【java】javac编译多个有依赖关系的java文件为class文件
  8. Tomcat5.5 配置mysql数据库连接池
  9. tensorboard的可视化及模型可视化
  10. 一堂儿童科学实验课引起的思考:数学和化学有什么关系?
  11. [PAT乙级]1011 A+B 和 C
  12. CSV格式整理,去除与上一行数据重复的单元格
  13. 标注工具——VoTT的调试笔记
  14. EXCHANGE虚拟目录功能介绍
  15. python signature函数-tensorflow2.0的函数签名与图结构(推荐)
  16. 你最后会划掉谁的名字……
  17. Office文件转PDF的解决方案
  18. 编译QT项目出现错误:error C2144: syntax error : 'void' should be preceded by ';'
  19. 读《弗洛伊德:作家与白日梦》
  20. 菜鸟的三遍读书法进阶

热门文章

  1. 数据库技术:数据存储和查询知识笔记
  2. php获取服务器名称,PHP 获取服务器详细信息
  3. 软件设计师中级 百度知道_设计师应该知道什么
  4. 一级学科和二级学科_在多学科团队中工作的6个障碍(以及如何解决这些问题)
  5. d3 制作条形图_停止制作常见的坏条形图的5个简单技巧
  6. 云时代架构读后感4--IT架构的本质
  7. OSChina 周三乱弹 —— 爸爸说,这个是从他硬盘里掉出来的
  8. windows平台下基于QT和OpenCV搭建图像处理平台
  9. 机房管理系列之杀毒服务器维护
  10. 谈谈一些有趣的CSS题目(十六)-- 奇妙的 background-clip: text