考虑到很多数据源是不确定的,所以这时无法在前台设置gridview的表头,需要在后台动态指定并绑定数据。

前台代码如下:

<%@ Page Title="主页" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %> <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<div>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</div>
</asp:Content>

.cs页面代码如下

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
BindData();
} /// <summary>
/// 绑定gridview
/// </summary>
public void BindData()
{
string sqlcc = "SELECT * from Users";//order by gwbg.id desc
DataTable dt = new DataTable();
dt = DBHelp.ExecuteQueryWithoutParameter(sqlcc, CommandType.Text);
GridView1.AutoGenerateColumns = false;//设置自动产生列为false
GridView1.RowEditing += new GridViewEditEventHandler(GridView1_RowEditing); //添加编辑事件
GridView1.RowDeleting += new GridViewDeleteEventHandler(GridView1_RowDeleting);//添加删除事件
GridView1.RowCancelingEdit += new GridViewCancelEditEventHandler(GridView1_RowCancelingEdit);//添加删除事件
GridViewBind(GridView1, dt, "Id");
} /// <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 }; for (int i = ; i < dtblDataSource.Columns.Count; i++) //绑定普通数据列
{
BoundField bfColumn = new BoundField();
bfColumn.DataField = dtblDataSource.Columns[i].ColumnName;
bfColumn.HeaderText = dtblDataSource.Columns[i].Caption;
gdv.Columns.Add(bfColumn);
} //添加编辑列
CommandField cf = new CommandField();//命令字段
cf.ButtonType = ButtonType.Link;//超链接样式的按钮
cf.ShowEditButton = true;//显示编辑按钮
cf.CausesValidation = false;//引发数据验证为false
cf.HeaderText = "编辑";
cf.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
gdv.Columns.Add(cf);//添加编辑按钮到gridview //添加删除列
CommandField cf2 = new CommandField();
cf2.ButtonType = ButtonType.Link;
cf2.ShowDeleteButton = true;//显示删除按钮
cf2.CausesValidation = false;
cf2.HeaderText = "删除";
cf2.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
gdv.Columns.Add(cf2); //添加包复选框的模板列
TemplateField tf = new TemplateField();
tf.ItemTemplate = new MyTemplate("", DataControlRowType.DataRow);
//tf.HeaderText = "选择";
tf.HeaderTemplate = new MyTemplate("模版列-选择框", DataControlRowType.Header);
tf.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
gdv.Columns.Add(tf); gdv.DataBind();//绑定 } //删除gridview的行
void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int i = e.RowIndex;
MessageBox.Show(this, "删除ID为:"+GridView1.Rows[i].Cells [].Text.ToString () );
} //编辑行
public void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
int i = e.NewEditIndex;
string id = GridView1.Rows[i].Cells[].Text.ToString();
MessageBox.Show(this, "删除ID为:" + id);
} //取消
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -;
BindData();
} }

  其中,添加模版的MyTemplate类代码为:

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;
}
} }

在MyTemplate类中,这里是直接写了添加CheckBox,其实我们可以在MyTemplate的构造函数里添加一个参数,表示传进来的要在模版里面添加的控件的类型。这样就可以根据

控件类型来自动生成控件了,而不要在类里面去手动写需要生成的控件。

其中效果图如下:

后台动态生成GridView列和模版的更多相关文章

  1. .NET 后台动态添加GridView列

    BoundField bfColumn1 = new BoundField(); bfColumn1.DataField = "zbcompanyname"; bfColumn1. ...

  2. ASP.NET动态生成GridView的使用

    根据DataTable动态生成包含checkbox的GridView,其中DataTable中对应checkbox那一列的值必须为bool值. public static GridView Dynam ...

  3. easyui动态生成双列头

    实习时老大交给任务,让我做这样一个效果,选择日期并点击查询时,动态生成列头,下一列要求对应日期的星期. 效果图: 下面贴出查询的单击函数: //查询按钮 function queryByDate(){ ...

  4. 动态设置 GridView 列宽

    /// <summary>        /// 设置简单评语列的宽度        /// </summary>        /// <param name=&quo ...

  5. 如何在后台动态生成ASPxCheckBoxList标签并循环(数据调用存储过程)

    DataTable dt_attrname = new DataTable(); DataTable dt_valuename = new DataTable(); dt_valuename = go ...

  6. 动态生成table 列

    table.render({ elem: '#test-table-comelist' ,url: layui.setter.base + 'list/comelist' ,cols: [[]] ,d ...

  7. java后台动态生成导出excel

    p ublic void export(List<WechatUser> wechatUserList, HttpServletResponse response) throws IOEx ...

  8. asp.net动态添加GridView的模板列,并获取列值

    一.动态添加模板列: 1.建立模板列样式: 说明:下边代码可以直接写在aspx文件中,也可以单独建立cs文件:另外,我没有写button.linkButton等控件,意思差不多,不过当需要添加事件时, ...

  9. jQuery EasyUI中DataGird动态生成列的方法

    EasyUI中使用DataGird显示数据列表中,有时需要根据需要显示不同的列,例如,在权限管理中,不同的用户登录后只能查看自己权限范围内的列表字段,这就需要DataGird动态组合列,下面介绍Eas ...

随机推荐

  1. elk系列7之通过grok分析apache日志

    preface 说道分析日志,我们知道的采集方式有2种: 通过grok在logstash的filter里面过滤匹配. logstash --> redis --> python(py脚本过 ...

  2. druid数据库密码加密程序编写

    第一步:引入 druid-1.0.1.jar 架包 第二步: 编写程序 package nihao; import com.alibaba.druid.filter.config.ConfigTool ...

  3. IntersectionObserver API

    温馨提示:本文目前仅适用于在 Chrome 51 及以上中浏览. 2016.11.1 追加,Firefox 52 也已经实现. 2016.11.29 追加,Firefox 的人担心目前规范不够稳定,未 ...

  4. oracle创建用户

    --首先用管理员的帐户登录(要有修改用户的权限)system,默认数据库orcl. CREATE USER lcs IDENTIFIED BY lcs default tablespace lics_ ...

  5. 微信 5.3 for iPhone已放出 微信iphone版更新下载

    就在几个小时前,微信发布了更新,本次只放出微信 5.3 for iPhone,距离发布微信5.3内测版也就几天时间.和往常一样微信iphone版先发布,微信android版延后发布,微信看重的是ios ...

  6. PHP面向对象(OOP)编程入门教程

    面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...

  7. Linux C 文件输入输出函数 fopen()、getc()/fgetc()、putc()/fputc()、fclose()、fprintf()、fscanf()、fgets()、fputs()、fseek()、ftell()、fgetpos()、fsetpos() 详解

      fopen(打开文件) 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参 ...

  8. MySQL Where 条件

    WHERE 条件 有时候操作数据库时,只操作一些有条件限制的数据,这时可以在SQL语句中添加WHERE子句来规定数据操作的条件. 语法: SELECT column,… FROM tb_name WH ...

  9. weblogic虚拟路径的配置和使用

    项目场景: 公司中医疗项目需要展示药品说明书的其他版本(图片或者PDF),由于其他版本文件存在Linux服务器上,由于服务器用的是weblogic, 无法直接访问文件,因此可以用weblogic的虚拟 ...

  10. oracle查询某一个字段的数量总和

    select count(*) from (select count(*) from 表名称 group by 多种数据量 ) 表名; 举个栗子: 比如说我有一个数据类型的字段, 里面有很多种的数据类 ...