何动态生成GridView的模版列

[C#] 动态生成GridView的模版列TemplateField,并在模版列TemplateField中添加复选框CheckBox 上篇文章,我们可以动态生成GridView的绑定数据列BoundField和命令列CommandField,现在说说如何动态生成GridView的模版列TemplateField,并在模版列TemplateField中添加复选框CheckBox首先,第一步,创建一个类MyTemplate.cspublic class MyTemplate:ITemplate...{    privat 阅读详情

何动态生成GridView的模版列收藏
何动态生成GridView的模版列TemplateField,并在模版列TemplateField中添加复选框CheckBox

首先,第一步,创建一个类MyTemplate.cs

public class MyTemplate:ITemplate
...{
    private string strColumnName;
    private DataControlRowType dcrtColumnType;

    public MyTemplate()
    ...{
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }

    /**//// <summary>
    /// 动态添加模版列
    /// </summary>
    /// <param name="strColumnName">列名</param>
    /// <param name="dcrtColumnType">列的类型</param>
    public MyTemplate(string strColumnName, DataControlRowType dcrtColumnType)
    ...{
        this.strColumnName = strColumnName;
        this.dcrtColumnType = dcrtColumnType;
    }

    public void InstantiateIn(Control ctlContainer)
    ...{
        switch (dcrtColumnType)
        ...{
            case DataControlRowType.Header: //列标题
                Literal ltr = new Literal();
                ltr.Text = strColumnName;
                ctlContainer.Controls.Add(ltr);
                break;
            case DataControlRowType.DataRow: //模版列内容——加载CheckBox
                CheckBox cb = new CheckBox();
                cb.ID = "CheckBox1";
                cb.Checked = false;
                ctlContainer.Controls.Add(cb);
                break;
        }
    }

}
第二步,在绑定GridView方法中,生成模版列

/**//// <summary>
    /// 绑定生成GridView
    /// </summary>
    /// <param name="gdv">要绑定的GridView</param>
    /// <param name="dtblDataSource">GridView的数据源</param>
    /// <param name="strDataKey">GridView的DataKeyNames</param>
    public static void GridViewBind(GridView gdv, DataTable dtblDataSource, string strDataKey)
    ...{
        gdv.Columns.Clear();

        gdv.AutoGenerateColumns = false;
        gdv.DataSource = dtblDataSource;
        gdv.DataKeyNames = new string[] ...{ strDataKey };

        TemplateField tfColumn = new TemplateField();
        tfColumn.ItemTemplate = new MyTemplate("", DataControlRowType.DataRow);
        gdv.Columns.Add(tfColumn);

       //………………

        gdv.DataBind();
    }
这样模版列也可以动态生成啦!

==============================================================================================

动态添加绑定列很简单:例如:

GridView1.DataSourceID = "SqlDataSource1";

        BoundField bf1 = new BoundField();
        BoundField bf2 = new BoundField();
        BoundField bf3 = new BoundField();

        bf1.HeaderText = "Employee ID";
        bf1.DataField = "EmployeeID";
        bf1.ReadOnly = true;
        bf1.SortExpression = "EmployeeID";
        bf2.HeaderText = "First Name";
        bf2.DataField = "FirstName";
        bf2.SortExpression = "FirstName";

        bf3.HeaderText = "Last Name";
        bf3.DataField = "LastName";
        bf3.SortExpression = "LastName";

        CommandField cf = new CommandField();
        cf.ButtonType = ButtonType.Button;
        cf.ShowCancelButton = true;
        cf.ShowEditButton = true;

        GridView1.Columns.Add(bf1);
        GridView1.Columns.Add(bf2);
        GridView1.Columns.Add(bf3);
        GridView1.Columns.Add(cf);
动态绑定模板列稍微复杂:

首先创建一个类,该类时继承了System.Web.UI.ITemplate

public class MyTemplate:System.Web.UI.ITemplate
{
    private string proName;
    public MyTemplate()
    {
        //
        //TODO: 在此处添加构造函数逻辑
        //
    }
    public string ProName//要绑定的数据源字段名称
    {
        set { proName = value; }
        get { return proName; }
    }

    public void InstantiateIn(Control container)//关键实现这个方法
    {
        TextBox hi = new TextBox();
        hi.Text = "";
        hi.DataBinding += new EventHandler(hi_DataBinding);//创建数据绑定事件
        container.Controls.Add(hi);
    }

    void hi_DataBinding(object sender, EventArgs e)
    {
        TextBox hi = (TextBox)sender;
        GridViewRow container = (GridViewRow)hi.NamingContainer;
        //关键位置
        //使用DataBinder.Eval绑定数据
        //ProName,MyTemplate的属性.在创建MyTemplate实例时,为此属性赋值(数据源字段)
        hi.Attributes.Add("onclick", "alert('" + DataBinder.Eval(container.DataItem, ProName).ToString() + "');");
   
}
上面时创建了一个textbox的模板,

页面使用时

2.*.aspx页面后台cs代码

            DataSet ds = null;
            BLL.model_task bll = new BLL.model_task();
            ds = bll.GetList(string.Empty);

            TemplateField tf = new TemplateField();
            tf.HeaderText = "自定义模板列";
            MyTemplate mt = new MyTemplate();
            mt.ProName = "ID";//数据源字段
            tf.ItemTemplate = mt;
            this.GridView1.Columns.Add(tf);
            this.GridView1.DataSource = ds;
            this.GridView1.DataBind();
这样就会添加了一个textbox的模板列;

==============================================================================================

动态添加列,关键是实现 ITemplate.InstantiateIn 方法。下面是一个添加 GridView 模板列的例子。
  
  <%@ Page Language=/"C#/" %>
  <%@ Import Namespace=/"System.Data/" %>
  <!DOCTYPE html PUBLIC /"-//W3C//DTD XHTML 1.0 Transitional//EN/"
   /"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd/">
  
  <script runat=/"server/">
   ICollection CreateDataSource()
   {
   DataTable dt = new DataTable();
   DataRow dr;
   dt.Columns.Add(new DataColumn(/"id/", typeof(Int32)));
   dt.Columns.Add(new DataColumn(/"text/", typeof(string)));
   for (int i = 0; i < 6; i++)
   {
   dr = dt.NewRow();
   dr[0] = i;
   dr[1] = /"列表项目 /" + i.ToString();
   dt.Rows.Add(dr);
   }
   DataView dv = new DataView(dt);
   return dv;
   }
  
   public class GridViewTemplate : ITemplate
   {
   private DataControlRowType templateType;
   private string columnName;
  
   public GridViewTemplate( DataControlRowType type, string colname )
   {
   templateType = type;
   columnName = colname;
   }
  
   public void InstantiateIn( System.Web.UI.Control container )
   {
   switch (templateType)
   {
   case DataControlRowType.Header:
   Literal lc = new Literal();
   lc.Text = columnName;
   container.Controls.Add(lc);
   break;
   case DataControlRowType.DataRow:
   DropDownList drr = new DropDownList();
   drr.ID = /"dropdown/";
   drr.AppendDataBoundItems = true;
   drr.Items.Add(new ListItem(/"-----请选择------/",/"/"));
   drr.Items.Add(new ListItem(/"AA/", /"a/"));
   drr.Items.Add(new ListItem(/"BB/", /"b/"));
   drr.Items.Add(new ListItem(/"CC/", /"c/"));
   container.Controls.Add(drr);
   break;
   default:
   break;
   }
   }
   }
  
   protected void Page_Load(object sender, EventArgs e)
   {
   if (!IsPostBack)
   {
   TemplateField customField = new TemplateField();
   customField.ShowHeader = true;
   customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, /"动态添加列/");
   customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, /"/");
   GridView1.Columns.Add(customField);
   GridView1.DataSource = CreateDataSource();
   GridView1.DataBind();
   }
   }
  
   protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e )
   {
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
   //可以在这里访问数据库的其它字段的值,可以设置默认选择项,具体应用,看自己的发挥了。
   //下面只是例子,举一反三,不再费话了
   DataRowView gv = (DataRowView)e.Row.DataItem;
   int itemSeleted = Int32.Parse(gv.Row[/"id/"].ToString()) > 3 ? 0 : Int32.Parse(gv.Row[/"id/"].ToString());
   DropDownList dr = (DropDownList)e.Row.FindControl(/"dropdown/");
   dr.SelectedIndex = itemSeleted;
   }
   }
  </script>
  
  <html xmlns=/"http://www.w3.org/1999/xhtml/">
  <head id=/"Head1/" runat=/"server/">
   <title>GridView动态添加模板列的例子</title>
  </head>
  <body>
  <form id=/"form1/" runat=/"server/">
   <asp:GridView ID=/"GridView1/" runat=/"server/" AutoGenerateColumns=/"False/"
   OnRowDataBound=/"GridView1_RowDataBound/">
   <Columns>
   <asp:BoundField HeaderText=/"标题/" DataField=/"text/"/>
   </Columns>
   </asp:GridView>
  </form>
  </body>
  </html>

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/ljsql/archive/2008/11/27/3389604.aspx

C#动态生成gridview 最近,开发了个项目,提交测试时,测试人员要测试后台录入数据,问题出来了,由于权限限制,不能直接到DB服务器上去查数据【isqlw不能用了,哎】,DBA也不在,其他一切途径似乎都不可行了。哎,命苦啊,只有再开发个web查询页面,在页面中输入select语句,来显示结果集。结果集用什么显示,当然是GridView了。不过结果集可能有多个,怎么全部显示呢,限定结果集为10个,页面中用10个GridVie 阅读详情

相关推荐

利用Langchain生成合成数据的实践指南

合成数据是相对于从真实世界事件中收集的数据而言的人工生成的数据。它用于模拟真实数据,同时避免隐私泄露或遇到真实数据中的局限性。:尽管合成数据有诸多优点,但应谨慎使用,因为它可能无法捕捉真实世界的复杂性。

eahba的博客 398

【DevExpress中文教程】在GridView中动态创建列时如何绑定不同编辑处理控件

本文主要介绍在DevExpress的GridView的列中,动态创建列的时如何绑定不同的编辑处理控件,欢迎下载组件体验~

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 752

inferCNVpy分析流程学习

inferCNV的用途大家都已经很清楚了,接下来就走一下流程,试一试Python版的inferCNV。使用的数据集为:GSE188711,既往推文可见:Scanpy分析全流程(含harmonypy整合/细胞周期矫正/双细胞检测及去除)(

zfyyzhys的博客 1295

GridView动态添加模板列(数据绑定)

1.创建实现System.Web.UI.ITemplate 接口的新类.    public class MyTemplate : ITemplate    {        private string proName;        public MyTemplate()        {            //            // TODO: 在此处添加构造函数逻辑     

perisonchen的专栏 934

形位公差标注的常见误区与优化策略

本文深入解析机械设计中形位公差标注的常见误区与优化策略,特别针对NX2406用户提供实用技巧。从标注冗余、基准选择到公差值设定等五大误区入手,结合工程图实例展示如何提升标注精度与效率,帮助工程师避免常见错误,优化设计流程,确保零件功能实现与制造可行性。

info6的博客 245

百元DIY手机荧光计:低成本荧光检测平台搭建与实战

荧光检测是一种基于物质受特定波长光激发后发射更长波长荧光的分析技术,其核心原理在于光与物质的相互作用。通过选择性激发与检测,该技术能实现对痕量物质的高灵敏度、高特异性定量分析,在生物医学、环境监测和食品安全等领域具有重要价值。传统荧光分光光度计虽精度高,但成本昂贵、体积庞大且操作复杂,限制了其在现场快检和普及教育中的应用。本文聚焦于如何利用智能手机的高性能摄像头和处理器,结合低成本光学滤光片和LED光源,构建一个便携、经济的DIY荧光检测平台。该方案通过简化光路设计,采用带通滤光片进行波长选择,并利用图像处

weixin_34194829的博客 308

使用自定义模板类增加TemplateField(重要)

使用自定义模板类增加TemplateField(重要) 现在你已经知道了如何使用LoadTemplate()方法,接下来让我们来看看如何使用另一种方法。在最后的例子中你学到了用LoadTemplate()方法返回一个实现了Itemplate接口的对象。你自己也可以创建这样一个实现了Itemplate接口的类并直接使用它,从而代替LoadTemplate()方法。 我们在App_Code...

数据库天地 607

grafana对接zabbix数据展示

【配置】点击【模板】点击【创建模板】添加三个监控项:【名称】搜索【】创建的模板;点击上方【监控项】,点击创建【监控项】点击上方【触发器】点击【创建触发器】主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】查看:左侧点击【监测】点击【主机】点击【Zabbix server】点击最新数据,找到添加的三个模板主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】把监控模板用起来① 明确获取指标数据的方法。

2401_83883919的博客 6595

gridview 动态加载模板列

    #region 自定义模板列类    public class GridViewTemplate : ITemplate    {        private string proName;        public GridViewTemplate()        {        }        public string ProName//要绑定的数据源字段名称 

我的地盘 1508

Qt软件开发: 开发MQTT客户端软件,模拟硬件登录各大主流MQTT平台完成通信

此软件是使用QT编写MQTT客户端(根据mqtt官方文档3.1.1,自己实现过程代码,没有使用其他库,稳定,方便移植),模拟硬件登录各大主流的MQTT物联网服务器,完成主题订阅、发布等操作,实现数据通信交互。 已经测试OneNET、阿里云IOT、华为云IOT、百度IOT、电信IOT、原子云IOT等等常用的物联网云平台,都可以正常实现数据通信,只要云平台支持标准MQTT协议都可以使用此软件进行登录测试。 特别是大家没有硬件,想测试与MQTT物联网云服务器通信的,此软件是非常的方便。使用简单,比官方的软件操作

1万+

在 Fiori Elements Object Page 的表格中用 UI.Hidden 隐藏列:语义、边界与落地实践全解析

摘要: Fiori Elements的Object Page表格中,UI.Hidden注解支持静态和动态隐藏列。动态隐藏分为两种:基于父实体属性隐藏整列,或基于子实体属性按行隐藏单元格。关键约束包括:支持服务端操作的列禁止使用动态隐藏,否则会导致UX不一致。ABAP CDS不支持路径式UI.Hidden,需改用XML注解。该功能需与UI.Importance、个性化等机制明确区分,避免混淆。对于可能参与排序/过滤的列,建议仅使用静态隐藏。实际应用中需注意注解位置(整列或单元格级)和业务场景的匹配。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 205

[C#] 动态生成GridView的列

想实现这样的功能吗?在程序运行中使GridView动态生成列,而并不是将列固定写死在GridView上写个绑定GrideView的方法    /**////     /// 绑定生成GridView    ///     /// 要绑定的GridView    /// GridView的数据源    /// GridView的DataKeyNames    public static 

有了大树的幸福树懒~~~的专栏 5305

实战避坑:基恩士KV8000 PLC与C#上位机链路通讯全流程实现(含ST代码+上位机源码)

本文详细讲解了基恩士KV8000 PLC与C#上位机的TCP链路通讯实现,从PLC端的ST代码编写、通讯配置,到上位机的通讯类封装、界面实现,再到实战避坑和性能优化,提供了完整的可复用方案。该方案已在实际产线项目中验证,支持实时数据采集和控制指令下发,稳定性和可靠性满足工业场景需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1177

动态生成GridView列,加入修改等按钮

【】动态生成GridView列(每次需要绑定的列的数目不同),即动态绑定数据源时列数目不固定的绑定方式 日期:2013-05-09 | 分类:GridView | Tags: 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://www.blogbus.com/flbh-logs/233317059.html 想实现这样的功能吗?在程序运行中使Gr

eel2005的专栏 3869

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

GridView表格动态生成列

以下是GridView表格动态生成列方法: 1、设计        把表格AUTOGENERATECOLUMNS属性为True 2、页面代码     例子:         显示每日销量数据     Private Sub Display()         With Me.gvGrid             .AllowSorting = True             If ddlCIT

wbl200505的专栏 814

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

GridView动态生成列

/// /// gridview模板类重写 /// public class GvPlanTemplate : ITemplate {     ///     /// 构造函数     ///     public GvPlanTemplate() { }     ///     /// 模板添加子控件     ///     public void Insta

xxlovemf的专栏 2750

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# 动态生成GridView的列

http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2008430/112166.html想实现这样的功能吗?在程序运行中使GridView动态生成列,而并不是将列固定写死在GridView上写个绑定GrideView的方法     /**////     /// 绑定生成GridView    ///     /

feixiang7443的专栏 6123

GridView 动态生成模版列

最近项目中有用到GridView 的列是动态生成的,并且是用模版列.查找了网上的方法.作法如下: 1. 写一个类.主要继承ITemplate CodepublicclassGridViewTemplate:ITemplate{privateDataControlRowTypetemplateType;//区分列的类型...

weixin_30435261的博客 92

GridView动态生成列方法

这是一个根据不同的数据源而动态生成gridview显示数据 /// /// 绑定生成GridView /// /// 要绑定的GridView /// GridView的数据源 /// GridView的DataKeyName

1860

后台动态生成GridView列和模版

考虑到很多数据源是不确定的,所以这时无法在前台设置gridview的表头,需要在后台动态指定并绑定数据。 前台代码如下: "主页" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> "He

最数据的专栏 2842

GridView动态添加数据列

GridView动态添加数据列

weixin_44084713的博客 2773

动态生成datagrid的绑定列

对此函数的调用放置在页面的load事件中,最好放到if(!IsPostBack){}之外。 public void myGrid_itemAdd()  {   #region 动态生成列   DateTime datefrom=DateTime.Parse(Page.Request.QueryString["dateFrom"]);   DateTime dateto=DateTime.Par

Yellow198267的专栏 1666

GridView动态生成列名

动态生成列名 1 if (dt.Rows.Count > 0) 2 { 3 for (int n = 0; n < dt.Columns.Count; n++) 4 { 5 //申明一个绑定字段对象 6 BoundField bf = new BoundField(); 7 bf.DataF...

weixin_30294709的博客 407
上一篇: 用cookie保存浏览记录
下一篇: ASP.NET中TreeView控件使用小结
simoGAO
博客等级 码龄19年 3粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值