在很多时候数据绑定都是知道了数据表中的表字段来绑定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. spring in action 学习笔记四:bean的生命周期

    bean 的生命周期分为:一个是ApplicationContext的容器的bean的生命周期,另一个是BeanFactory容器的生命周期. 首先介绍一下:ApplicationContext的容器 ...

  2. svn merge详解

    svn merge详解 [OK] http://blog.163.com/lgh_2002/blog/static/4401752620106202710487/ Subversion的分支通常用于在 ...

  3. 【 D3.js 进阶系列 — 4.0 】 绘制箭头

    转自:http://www.ourd3js.com/wordpress/?p=660 [ D3.js 进阶系列 — 4.0 ] 绘制箭头 发表于2014/12/08 在 SVG 绘制区域中作图,在绘制 ...

  4. 【Start From Here】HNOI2018 滚粗记

    萌新Backup的博客生涯开始了,请多多指教- PS:应该没有哪个蛇皮拿省选游记做第一篇博客吧. Day 0 emm配置熟到不用背,就一直在想接下来两天会被怎样花式吊打.. 心疼Brave_Cattl ...

  5. 详解利用ShoeBox制作位图字体

    http://childhood.logdown.com/posts/190580/-details-using-shoebox-produce-bitmap-fonts?utm_source=tui ...

  6. [Oracle] Setup DataGuard

    Oracle一步步搭建DataGuard DataGuard环境: OS: SuSe 10 Primary DB: IP address:1.1.1.1 user:root passwd:****** ...

  7. React Native WebView关闭缓存

    React Native WebView关闭缓存 网上搜索没有找到关闭React Native下webview控件的缓存的方法,经测试找到解决方案,记录如下 核心思路:通过请求时设置请求头,使页面缓存 ...

  8. Spring bean初始化以及管理

    在完成bean实例化后,spring会根据配置文件的设定情况对bean 的属性进行初始化, 1.autowire方式 (可查找自动装配对象 但bean中要有相应属性的set方法)这是一个自动装配的机制 ...

  9. Static和Final修饰类属性变量及初始化

    1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那 ...

  10. 四. Java继承和多态8.Java final关键字:阻止继承和多态

    在 Java 中,声明类.变量和方法时,可使用关键字 final 来修饰.final 所修饰的数据具有“终态”的特征,表示“最终的”意思.具体规定如下: final 修饰的类不能被继承. final ...