DataGrid动态绑定模板列
实现过程:下面用代码说明具体实现。
1.aspx页面部分,代码很简单,在页面中放一个DataGrid就可以了。
<div>
<asp:DataGrid ID="dgSmsFilters" Style="z-index: 101; left: 264px; position: absolute;
top: 152px" runat="server" Width="480px" Height="200px" AutoGenerateColumns="False"
BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" BackColor="White"
CellPadding="4">
<SelectedItemStyle Font-Bold="True" ForeColor="#CCFF99" BackColor="#009999"></SelectedItemStyle>
<ItemStyle ForeColor="#003399" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#CCCCFF" BackColor="#003399"></HeaderStyle>
<FooterStyle ForeColor="#003399" BackColor="#99CCCC"></FooterStyle>
<PagerStyle HorizontalAlign="Left" ForeColor="#003399" BackColor="#99CCCC" Mode="NumericPages">
</PagerStyle>
</asp:DataGrid>
</div>
</form>
2.aspx.cs后台代码部分,这部分的作用就是准备好数据,并绑定到DataGrid中。我们注意到给模板列赋值时实例化了ColumnTemplate类。这个类是我们自己定义的类,也是后台绑定模板列的核心所在,第三部分代码将演示这个类的实现。
{
if (!Page.IsPostBack)
{
this.BindGrid();
}
}
//准备示例数据
private DataTable GetDates()
{
DataTable dtSmsFilters = new DataTable("dtSmsFilters");
DataColumn dcSmsNum = new DataColumn("手机号",Type.GetType("System.String"));
dtSmsFilters.Columns.Add(dcSmsNum);
//产生短信过滤类型,实际应根据数据库中内容动态生成的,列数可以动态添加
DataColumn dcSmsFilterType1 = new DataColumn("业务推广",Type.GetType("System.Boolean"));
dtSmsFilters.Columns.Add(dcSmsFilterType1);
DataColumn dcSmsFilterType2 = new DataColumn("帐户变动",Type.GetType("System.Boolean"));
dtSmsFilters.Columns.Add(dcSmsFilterType2);
DataColumn dcSmsFilterType3 = new DataColumn("节日祝福", Type.GetType("System.Boolean"));
dtSmsFilters.Columns.Add(dcSmsFilterType3);
//手动添加测试数据
DataRow dr;
for(int i=0;i<10;i++)
{
//赋值,无实际意义,只为显示
dr = dtSmsFilters.NewRow();
dr[0] = "1366666888"+i.ToString();
dr[1] = i%2==0?true:false;
dr[2] = i % 3 == 0 ? true : false;
dr[3] = i % 4 == 0 ? true : false;
dtSmsFilters.Rows.Add(dr);
}
return dtSmsFilters;
}
//绑定DataGrid
private void BindGrid()
{
DataTable dt = this.GetDates();
this.dgSmsFilters.DataSource = dt;
//添加绑定列,绑定手机号
BoundColumn bc = new BoundColumn();
bc.HeaderText = dt.Columns[0].ColumnName;
bc.DataField = dt.Columns[0].ColumnName;
this.dgSmsFilters.Columns.AddAt(0,bc);
//添加模板列,绑定过滤短信类型,模板列的列数是由函数GetDates()生成的DataTable的列数决定的
for(int i=1;i<dt.Columns.Count;i++)
{
TemplateColumn tc = new TemplateColumn();
tc.HeaderText = dt.Columns[i].ColumnName;
tc.ItemTemplate = new ColumnTemplate("ckb"+i.ToString(),dt.Columns[i].ColumnName);
this.dgSmsFilters.Columns.AddAt(i,tc);
}
this.dgSmsFilters.DataBind();
}
3.ColumnTemplate类的实现。继承自ITemplate接口,并实现了接口方法InstantiateIn(),定义子控件和模板所属的 Control 对象。
//InstantiateIn 定义子控件的属于谁
public class ColumnTemplate:System.Web.UI.ITemplate
{
string id;
string bindField;
public ColumnTemplate(string id,string bindField)
{
this.id = id;
this.bindField = bindField;
}
//Override the ITemplate.InstantiateIn method to ensure
//that the templates are created in a CheckBox control and
//that the CheckBox object's DataBinding event is associated
//with the BindData method.
public void InstantiateIn(Control container)
{
CheckBox ckb = new CheckBox();
ckb.ID = this.id;
ckb.DataBinding += new EventHandler(this.BindData);
container.Controls.Add(ckb);
}
//Create a public method that will handle the
//DataBinding event called in the InstantiateIn method.
public void BindData(object sender, EventArgs e)
{
CheckBox ckb = (CheckBox) sender;
DataGridItem container = (DataGridItem) ckb.NamingContainer;
string isFilter = ((DataRowView) container.DataItem)[bindField].ToString();
ckb.Checked = bool.Parse(isFilter);
}
}
源代码下载地址: 点击下载完整示例程序 (示例路径:/WebControls/TemplateColumnDemo.aspx)
DataGrid动态绑定模板列相关推荐
- Silverlight使用DataGrid的模板列(DataGridTemplateColumn)实现类似TreeListView控件的效果
Silverlight使用DataGrid的模板列(DataGridTemplateColumn)实现类似TreeListView控件的效果 转载于:https://www.cnblogs.com/K ...
- ASP.NET DEMO 14: 如何在 GridView/DataGrid 模板列中使用自动回发的 CheckBox/DropDownList
有时候希望在 GridView 模板中使用自动回发的 CheckBox (autopostback=true) ,但是 CheckBox 没有 CommandName 属性,因此也就无法在 GridV ...
- ASP.NET基础教程-DataGrid表格控件-模板列的使用
一.给表格添加一个模板列,在查板列中添加一个文本框,文本框名字为"txt" 1.对文本框进行赋值: ((TextBox)DataGrid.Items[0].Cells[0].Fin ...
- RadioButton加入DataGrid模板列引起的问题。
也许各位看官还尚未注意到,将RadioButton加入到DataGrid模板列后(当然DataList,Repeater也一样),尽管你设置了其GroupName,结果还是不能实现我们想要的效果, 即 ...
- 动态创建模板列并绑定数据(GridView,Repeater,DataGrid)
要创建动态模板,请创建以后需要时可实例化的模板类. 创建模板类 创建实现 System.Web.UI.ITemplate 接口的新类. 您也可以将值传递到类的构造函数,类可以使用该值来确定要创建的模板 ...
- 怎样让WinForms下DataGrid可以像ASP.NET下的DataGrid一样使用自定义的模板列
昨天被问到一个问题:怎么把WinForms里的DataGrid的绑定了数据库bit字段的列默认显示的CheckBox换成"男"和"女",也就是说怎么样像ASP. ...
- gridview中动态绑定通过模板列增加的textbox。
首先 我想 实现的就是,通过gridview中模板列增加个textbox,并且从数据库中查出来这列值,然后绑定到textbox上. 下面是我实现的效果(毁损时间 就是我的那个列,下面就是我显示出来的时 ...
- 使用DataGrid动态绑定DropDownList
简单的使用模板列绑定DropDownList,初学者想必都会了,但有时候,我们要做的就是在编辑的时候想让某一列定制为DropDownList,并且根据正常情况下显示的值自动变换DropDownList ...
- asp.net中显示DataGrid控件列序号的几种方法
在aps.net中多数据绑定的控件很多,论功能来说,应该属DataGrid最为齐全,但它没有提供现成的显示记录序号的功能,不过我们可以通过它所带的一些参数来间接得到序号,下面来看看怎样得到和显示序号值 ...
最新文章
- 交换机与路由器大战已结束,超大规模计算公司胜出
- 2020暑期实习后台开发字节跳动笔试
- jq实现跳转404跳转,原生js实现跳转404跳转
- C代码开发遇到的问题 变量初始化和结构体指针移动
- 【设备】WIN10怎么用佳能LIDE120扫描仪?
- Anaconda配置的环境里面增加第三方库的方法
- Nginx学习之十二-负载均衡-加权轮询策略剖析
- 多线程调用同一个对象的方法_这一次,让我们完全掌握Java多线程(2/10)
- JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
- Spark集群资源如何分配
- 2.5.PHP7.1 狐教程-【数据类型】
- 【狂神说Redis】4 三种特殊数据类型
- 06 - 雷达发射机 概述
- 【Redis 开发与运维】初识 Redis
- 帝国 cms 列表 php,帝国cms数据表详细中文说明
- 论文投稿指南——中国(中文EI)期刊推荐(第4期)
- XSSFWorkbook 设置单元格样式_CVA高校精英计划第二弹:执行最佳操作,做好设置准备...
- 出现network boot from intel e1000问题的解决办法
- 《Python程序设计》实验四 Python综合实践实验报告
- 有名管道----mkfifo函数的使用
热门文章
- ActiveMQ_使用经验
- mysql xtrabackup-v2_pxc wsrep_sst_method均配置为xtrabackup-v2报错
- 孕妇可以使用计算机,【电脑对孕妇有影响吗】电脑对孕妇的危害,孕妇能玩电脑吗 - 妈妈网百科...
- 计算机科学与技术专业的课程体系,基于业务的计算机科学与技术专业课程体系...
- java buffer 记事本_Java实现记事本|IO流/GUI
- zookeeper的设计猜想-集群组成
- 多线程对于共享变量访问带来的安全性问题
- MyBatis 插件原理与自定义插件-需求实现
- 反射获取成员方法并使用【应用】
- SpringCloud(Gateway网关跨域)