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

public static GridView DynamicGenerateColumns(GridView gv, DataTable dt)
{
// 把GridView的自动产生列设置为false,否则会出现重复列
gv.AutoGenerateColumns = false; // 清空所有的Columns
gv.Columns.Clear(); // 遍历DataTable 的每个Columns,然后添加到GridView中去
foreach (DataColumn item in dt.Columns)
{
if (item.ColumnName == "选择")
{
CheckBoxField chCol = new CheckBoxField();
chCol.HeaderText = item.ColumnName;
chCol.DataField = item.ColumnName;
chCol.Visible = true;
gv.Columns.Add(chCol);
continue;
}
BoundField col = new BoundField();
col.HeaderText = item.ColumnName;
col.DataField = item.ColumnName;
col.Visible = true;
gv.Columns.Add(col);
}
return gv;
}

然后在返回的GridView上绑定dataTable就可以了。还可以添加checkBox点击事件javascript处理函数。

gridView.DataSource = dataTable;
gridView.DataBind();
for (int i = ; i < ChargingGridView.Rows.Count; i++)
{
((System.Web.UI.WebControls.CheckBox)(gridView.Rows[i].Cells[].Controls[])).Attributes.Add("onclick", "OnClickCheck()");
}

在JS函数中对GridView中checkbox的处理,注意下面的Javascript代码是如何获取checkbox及其它普通元素的的值。

//该函数实现了根据选择的checkbox计算某列的值总和的功能
function OnClickCheck() {
var sumValue=0;
var gv = document.getElementById("<%=gridView.ClientID%>");
for (var i = 1; i < gv.rows.length; i++) {
if (gv.rows[i].cells[0].children[0].checked == false) {
continue;
}
sumValue = sumValue + parseFloat(gv.rows[i].cells[5].innerText);
}
document.getElementById('<%=TotalLabel.ClientID%>').innerHTML = sumValue;
}

上面的代码在后端用C#实现如下,

private void OnClickCheck()
{
double totalAmount = ; for (int i = ; i < gridView.Rows.Count; i++)
{
if (false == ((System.Web.UI.WebControls.CheckBox)(ChargingGridView.Rows[i].Cells[].Controls[])).Checked)
{
continue;
}
totalAmount += Convert.ToDouble(gridView.Rows[i].Cells[].Text.Trim());
} TotalLabel.Text = totalAmount.ToString();
}

SQL SERVER中bool的字段类型为bit,如果bool值是从DataTable取出的,则不用修改,如果该列bool值是在select返回的结果上添加的一列固定值,那么就需要在返回的DataTable前添加一列:

dataTable.Columns.Add("选择", typeof(bool));
dataTable.Columns["选择"].SetOrdinal();
foreach (DataRow dr in ChargeItemDataTable.Rows)
{
dr["选择"] = true;//初始化checkbox为选中
}

关于在select返回的结果添加一列固定值,如果添加这一列是字符串或数值类型,那么直接在select语句中即可设置,如select '吴宗宪' as hostName,age from showhosts。但如果是bool值的话,就不能select true as 选择……,这样SQL会报错,要照上面的方法来添加。

现在还有个问题,就是生成的GridView中的checkbox是灰色的,不能操作,也就是enable为false。现在需要绑定GridView_RowDataBound函数,在该函数中设置checkBox的enabled为true。添加该函数过程为:在aspx页面设计页中,选中GridView,右边属性栏中选择事件,在下面找到RowDataBound,生成事件处理函数。

protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.Cells[].GetType() == typeof(System.Web.UI.WebControls.DataControlFieldCell))
{
TableCell tc = e.Row.Cells[];
if (tc.Controls.Count > )
{
System.Web.UI.WebControls.CheckBox cb = (System.Web.UI.WebControls.CheckBox)tc.Controls[];
if (!(cb == null))
{
cb.Enabled = true;
}
}
}
}

有时候需要把GridView转换成DataTable:

public static DataTable GetDataTableFromGridView(GridView gv, DataTable dt)
{
GridViewRow headerRow = gv.HeaderRow;
int columnCount = headerRow.Cells.Count;
for (int i = 0; i < columnCount; i++)
{
DataColumn dc = dt.Columns.Add();
dc.ColumnName = headerRow.Cells[i].Text.Trim();
if ("选择" == headerRow.Cells[i].Text.Trim())
{
dc.DataType = typeof(bool);
}
else
{
dc.DataType = typeof(string);
}
} for (int i = 0; i < gv.Rows.Count; i++)
{
DataRow dr = dt.NewRow(); for (int j = 0; j < gv.Columns.Count; j++)
{
if ("选择" == headerRow.Cells[j].Text.Trim())
{
if (true == ((System.Web.UI.WebControls.CheckBox)(gv.Rows[i].Cells[j].Controls[0])).Checked)
{
dr[j] = true;
}
else
{
dr[j] = false;
}
}
else if (gv.Rows[i].Cells[j].Text.Trim() == "&nbsp;")
{
dr[j] = "";
}
else
{
dr[j] = gv.Rows[i].Cells[j].Text.Trim();
}
} dt.Rows.Add(dr);
}
return dt;
}

ASP.NET动态生成GridView的使用的更多相关文章

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

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

  2. 后台动态生成GridView列和模版

    考虑到很多数据源是不确定的,所以这时无法在前台设置gridview的表头,需要在后台动态指定并绑定数据. 前台代码如下: <%@ Page Title="主页" Langua ...

  3. asp.net动态生成按钮Button控件

    1.动态生成button控件及响应服务端和客户端事件 void BindButtons(){ foreach (var item in items) { Button Btn = new Button ...

  4. ASP.Net动态创建GridView

    1.创建Field BoundField requestitem = new BoundField();//注意Field可以是ButtonField,TemplateField,...等等GridV ...

  5. Asp.net动态生成表单

    control.ascx <%@ Control Language="C#" AutoEventWireup="true" CodeBehind=&quo ...

  6. ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi

    点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerplate Project (ASP.N ...

  7. 【转】ASP.NET中服务器控件Table动态生成表格及其属性介绍

    下文所有内容转自开源中国:http://www.oschina.net/question/565065_86453#tags_nav ================================= ...

  8. 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图

    如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?

  9. jquery控制动态生成的gridview中多列checkbox的全选反选及自动判断是否全选状态

    动态生成的Gridview的前台html代码如下:     <table class="usertableborder" cellspacing="0" ...

随机推荐

  1. 机械迷城MAC下载及攻略

    点击下载 无意间在verycd上看到这个游戏,很好玩的一个游戏. 画风非常可爱,有点复古风. 这里是 机械迷城 的专题频道 http://pc.pcgames.com.cn/pczq/jxmc/

  2. centos6.5上搭建gitlab服务器(亲测可用哦)

    最近的版本控制中,git可谓是脱缰的野马,一发不可收拾.当然git的设计模式也是愈发的成熟,让人刮目相看,完美解决了svn上的不足之处.在目前分布式横行的天下,git可谓是占得了一席之地. 废话少说, ...

  3. Spoken English Practice(If you fail to do as I say, I will take you suffer.)

    绿色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读     下划线_为浊化 口语蜕变(2017/6/29) ...

  4. 转!!java序列化

    1.序列化是干什么的?       简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存object st ...

  5. shader常用

    1 模型空间转裁剪空间 UnityObjectToClipPos(v.vertex) 2 模型空间转世界空间 mul( unity_ObjectToWorld, v.vertex ) 3 雾三件套 U ...

  6. iMessenger 2.0.14.0801简述

    有些梦,看似遥不可及.但并非不能实现,仅仅要你足够的强!!.人力有时而穷,所以我们可能还须要一些热心人的帮助.这个人可能就是你. 四年来,我们一直在努力,从未放弃. 在我们做好一件事之前.我们永远不知 ...

  7. io.Writer

    var w io.Writer // 设置为你的 io.Writer var b bytes.Buffer fmt.Fprint(&b, "Hello World") w ...

  8. 基于mondrian聚合表的R计算olap开发

    原文出处:http://www.cnblogs.com/qiaoyihang/p/7348328.html 最近在做基于Mondrian的olap开发,总结一下! 一. schema构建 1.思考:我 ...

  9. xshell下载安装

    打开网址http://www.netsarang.com/download/software.html 找到最新版的xshell,点击下载 在跳转的页面填写个人信息,许可证类型选择家庭和学校使用,除了 ...

  10. 第五课 Makefile文件的制作(补充)

    序言: 前面的几节课讲解Makefile的一些基本知识也做了一些小例子实践了几下,那么到现在普通的练习则是没有问题.但是如果做项目文件较多又分层次等等还是会碰上好多问题的,这节课补充一些知识. 知识点 ...