在很多时候数据绑定都是知道了数据表中的表字段来绑定GridView控件的,那时候我就有个想法希望通过表明来查询数据库中的字段来动态的绑定GirdView控件数据并提供了相关的操作列,在网上找了一些资料字按照自己的想法改进写了一个后台绑定GridView控件得得模板。其中最主要的好处是只需要知道数据库中的列名就可以了,表头可以在一个其他文件中来和数据列表绑定

 /*
* 2014-02-27
* GridView数据列绑定帮助文档
* 用于动态添查询数据绑定到数据表中
* 提供各种类型的绑定
*
* **/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//
using System.Web.UI;
using System.Web.UI.WebControls; namespace CommonLib
{
/// <summary>
/// GridView数据列绑定中兴
/// </summary>
public class GridViewTemplate : ITemplate
{
public delegate void EventHandler(object sender, EventArgs e);
public event EventHandler eh; private DataControlRowType templateType;
private string columnName;
private string controlID;
private XMLTableInfo xmTable = null;
private BindType bind = BindType.label;
public GridViewTemplate()
{ }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="type">绑定列类型</param>
/// <param name="colname">绑定列名称或者需要绑定的数据库字段</param>
/// <param name="colname">绑定字段类型控件</param>
public GridViewTemplate(DataControlRowType type, string colname, BindType bin, XMLTableInfo tab)
{
templateType = type;
columnName = colname;
bind = bin;
this.xmTable = tab;
}
/// <summary>
/// 绑定事件
/// </summary>
/// <param name="type"></param>
/// <param name="controlID"></param>
/// <param name="colname"></param>
public GridViewTemplate(DataControlRowType type, string controlID, string colname)
{
templateType = type;
this.controlID = controlID;
columnName = colname;
}
public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header://标题绑定
if (bind == BindType.label)
{
Literal lc = new Literal();
lc.Text = columnName;
container.Controls.Add(lc);
}
if (bind == BindType.checkbok)
{
Literal lc = new Literal();
 //可以按照自己想要处理方法来写
lc.Text = "<input type='checkbox' class='heck_box' />全选";
container.Controls.Add(lc);
}
if (bind == BindType.editor)
{
Literal lc = new Literal();
lc.Text = "编辑";
container.Controls.Add(lc);
}
if (bind == BindType.delete)
{
Literal lc = new Literal();
lc.Text = "";// "删除";
container.Controls.Add(lc);
} break;
case DataControlRowType.DataRow://普通列绑定
if (bind == BindType.label)
{
Label tb = new Label();
tb.DataBinding += tb_DataBinding;
container.Controls.Add(tb);
}
if (bind == BindType.checkbok)
{
Literal lic = new Literal();
lic.DataBinding += lic_DataBinding;
container.Controls.Add(lic);
}
if (bind == BindType.editor)
{
Literal lec = new Literal();
lec.DataBinding += lec_DataBinding;
container.Controls.Add(lec);
}
if (bind == BindType.editor)
{
Literal del = new Literal();
del.DataBinding += del_DataBinding;
container.Controls.Add(del);
} break;
default:
break;
}
} void del_DataBinding(object sender, EventArgs e)
{ Literal tb = (Literal)sender; GridViewRow row = (GridViewRow)tb.NamingContainer;
tb.ID = columnName;
  //可以按照自己想要处理方法来写
tb.Text = " &nbsp;&nbsp;<a class='A_DelBind' href='Ajax/AjaxDateToSql.ashx?cmd=delete&cName=" + xmTable.CName + "&eName=" + xmTable.EName + "&id=" + DataBinder.Eval(row.DataItem, columnName).ToString() + "'>删除</>";
} void lec_DataBinding(object sender, EventArgs e)
{
Literal tb = (Literal)sender; GridViewRow row = (GridViewRow)tb.NamingContainer;
tb.ID = columnName;
 //可以按照自己想要处理方法来写
tb.Text = "<a href='InsertInfo.aspx?cmd=editor&cName=" + xmTable.CName + "&eName=" + xmTable.EName + "&id=" + DataBinder.Eval(row.DataItem, columnName).ToString() + "'>编辑</>";
} void lic_DataBinding(object sender, EventArgs e)
{ Literal btn = (Literal)sender; GridViewRow row = (GridViewRow)btn.NamingContainer;
btn.ID = columnName;
 //可以按照自己想要处理方法来写此处绑定一个复选框 类名为CheckBox
btn.Text = "<input type='checkbox' class='CheckBox' value='" + DataBinder.Eval(row.DataItem, columnName).ToString() + "'/>"; }
/// <summary>
/// 2014-02-27
/// 张国强
/// 绑定字段数据列事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void tb_DataBinding(object sender, EventArgs e)
{
Label tb = (Label)sender; try
{
GridViewRow row = (GridViewRow)tb.NamingContainer;
tb.ID = columnName;
tb.Text = DataBinder.Eval(row.DataItem, columnName).ToString();
}
catch (Exception)
{ } } } /// <summary>
/// 模板类型枚举
/// </summary>
public enum BindType
{
label, checkbok, editor, delete
} }

调用方法例字

  /// <summary>
/// 绑定数据到GridView控件
/// </summary>
/// <param name="NewGrid">GridViews控件</param>
/// <param name="eName">英文名称</param>
/// <param name="cName">中文名称</param>
/// <param name="sqlOrTop">需要查询的数据字符串</param>
public void LoadInfo(GridView NewGrid, string eName, string cName,string sqlOrTop)
{
NewGrid.Columns.Clear();
XMLTableInfo tb = new XMLTableInfo();
tb.CName = cName;
tb.EName = eName;
XMLBase xBase = new XMLBase();
xBase.LoadDome();
string tableInfo = xBase.Check(eName, cName);
if (tableInfo=="")
{
return;
}
//1,拆分数据
string[] Ename = tableInfo.Split('¦')[].Split(',');
string[] Cname = tableInfo.Split('¦')[].Split('[');
xBase.LoadDome();
string id = xBase.GetIdentity(eName, cName);
//循环数表中的列名
for (int i = ; i < Ename.Length; i++)
{ TemplateField temp = new TemplateField();
temp.ShowHeader = true;
if (i == )
{
temp.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, Cname[i], BindType.checkbok, tb);
temp.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, id, BindType.checkbok, tb);
}
else
{
temp.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, Cname[i], BindType.label, tb);
temp.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, Ename[i], BindType.label, tb);
} NewGrid.Columns.Add(temp);
}
//添加编辑列
TemplateField tempEditor = new TemplateField();
tempEditor.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "操作", BindType.editor, tb);
tempEditor.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, id, BindType.editor, tb);
NewGrid.Columns.Add(tempEditor); TemplateField tempDelete = new TemplateField();
tempDelete.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "删除", BindType.delete, tb);
tempDelete.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, id, BindType.delete, tb);
NewGrid.Columns.Add(tempDelete); string sql = "";
if (sqlOrTop.Length<)
{
sql = "select top " + sqlOrTop + " * from " + eName + " order by " + id + " DESC";
NewGrid.DataSource = ExcelHelper.GetDataSet(sql);
}
else
{
NewGrid.DataSource = ExcelHelper.GetDataSet(sqlOrTop);
} NewGrid.AutoGenerateColumns = false;
NewGrid.DataBind(); }

这个例子值提供了一种思路,需要有其他功能的网友可以修改代码为自己想要的表头内容形式

GridView后台绑定数据列表方法的更多相关文章

  1. knockoutjs中使用mapping插件绑定数据列表

    使用KO绑定数据列表示例:   1.先申请V,T,T2三个辅助方法,方便调试.声明viewModel和加载数据时的映射条件mapping    2.先使用ko.mapping.fromJS()将原来的 ...

  2. GridView等表格模板列绑定数据的方法

    //绑定GridView每一行中的CheckBoxList protected void GridView1_RowDataBound(object sender, GridViewRowEventA ...

  3. ASP.NET MVC+Bootstrap个人博客之后台dataTable数据列表(五)

    jQuery  dataTables 插件是一个优秀的表格插件,是后台工程师的福音!它提供了针对数据表格的排序.浏览器分页.服务器分页.查询.格式化等功能.dataTables 官网也提供了大量的演示 ...

  4. 从后台绑定数据到ligerui 的comboBox下拉框组件

    这次来记录一下ligerUI的comboBox下拉框组件,ligerUI的API里也有相关描写叙述,上面都是前台写死数据,然后显示在组件中,我这次要说的是将后台的数据绑定到下拉框组件中,废话不多说. ...

  5. HighChat动态绑定数据 数据后台绑定(四)

    后台绑定数据,直接返回json数据 IList<SummaryHour> adHourData = summarybll.FindList(str); List<, , , , , ...

  6. Android之ListView性能优化——一行代码绑定数据——万能适配器

    如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...

  7. angularJS绑定数据时自动转义html标签

    angularJS在进行数据绑定时默认是会以文本的形式输出,也就是对你数据中的html标签不进行转义照单全收,这样提高了安全性,防止了html标签中的注入攻击,但有些时候还是需要的,特别是从数据库读取 ...

  8. 关于angularJS绑定数据时自动转义html标签

    关于angularJS绑定数据时自动转义html标签 angularJS在进行数据绑定时默认是会以文本的形式输出,也就是对你数据中的html标签不进行转义照单全收,这样提高了安全性,防止了html标签 ...

  9. 【 D3.js 选择集与数据详解 — 1 】 使用datum()绑定数据

    选择集和数据的关系是 D3 最重要的基础,在[入门 - 第 7 章]时进行过些许讲解,对于要掌握好 D3 是远远不够的.故此开设一个新的分类,专门讨论选择集与数据的关系,包括数据绑定的使用和工作原理, ...

随机推荐

  1. 《c程序设计语言》读书笔记-递归实现快速排序算法

    #include <stdio.h> void swap(int v[],int i,int j) { int temp; temp = v[i]; v[i] = v[j]; v[j] = ...

  2. C语言.c和.h

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:       1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成 ...

  3. Java并发编程--AQS

    概述 抽象队列同步器(AbstractQueuedSynchronizer,简称AQS)是用来构建锁或者其他同步组件的基础框架,它使用一个整型的volatile变量(命名为state)来维护同步状态, ...

  4. [摸鱼] 配置的vim的使用攻略!

    vim使用攻略 <>=f 折叠与缩进 开:<>[^fuck]cc 关:<>cu 缩进一块使用V选中,按>> [Ctrl]V 以列为单位选 za,打开或关 ...

  5. Instruments Tutorial for iOS: How To Debug Memory Leaks

    http://www.raywenderlich.com/2696/instruments-tutorial-for-ios-how-to-debug-memory-leaks Update 4/12 ...

  6. mogadm修改硬盘状态

    #查看主机序列mogadm host list #查看空间快满的分区 df -h#检查硬盘序列和状态ls -l /data/mogile_data/ #查看mogadm目录下软链接的目录对应的分区 # ...

  7. SpringBoot部署到Linux服务器

    今天来谈一下,用SpringBoot写的Demo来配置到Linux服务器. 这里,我用阿里云服务器作为实例,SpringBoot集成了SpringMvC+ mybatis 框架,用maven管理jar ...

  8. List的set和add方法

    问题描述:[相机]打开记录拍摄地理位置后拍照详情中少“宽度”属性; 原因分析:在listview动态刷新时用set(index,elemet)方法替换了宽度及其值: 解决方法:改为add(index, ...

  9. 使用log4j2分离系统日志与业务日志

    前一篇文章介绍了log4j2 扩展日志级别,支持将系统日志与业务处理日志拆分,现在介绍一下通过日志级别将系统日志与业务日志分类,要达到这个目的很容易,只需要配置一下log4j的xml文件: <? ...

  10. 我和阿里云RDS的故事

    于阿里云的RDS性能无法满足我们公司系统的要求,数据库偶尔出现莫名的查询慢(索引等做了全面优化)经过好多次投诉,情况还是没有改善.由于是类金融的系统,对这种情况是不能接受的.相信系统数据有5G以上有人 ...