ASP.NET动态生成GridView的使用
2015-02-02 17:27
405 查看
根据DataTable动态生成包含checkbox的GridView,其中DataTable中对应checkbox那一列的值必须为bool值。
然后在返回的GridView上绑定dataTable就可以了。还可以添加checkBox点击事件javascript处理函数。
在JS函数中对GridView中checkbox的处理,注意下面的Javascript代码是如何获取checkbox及其它普通元素的的值。
上面的代码在后端用C#实现如下,
SQL SERVER中bool的字段类型为bit,如果bool值是从DataTable取出的,则不用修改,如果该列bool值是在select返回的结果上添加的一列固定值,那么就需要在返回的DataTable前添加一列:
关于在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,生成事件处理函数。
有时候需要把GridView转换成DataTable:
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 = 0; i < ChargingGridView.Rows.Count; i++) { ((System.Web.UI.WebControls.CheckBox)(gridView.Rows[i].Cells[0].Controls[0])).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 = 0; for (int i = 0; i < gridView.Rows.Count; i++) { if (false == ((System.Web.UI.WebControls.CheckBox)(ChargingGridView.Rows[i].Cells[0].Controls[0])).Checked) { continue; } totalAmount += Convert.ToDouble(gridView.Rows[i].Cells[6].Text.Trim()); } TotalLabel.Text = totalAmount.ToString(); }
SQL SERVER中bool的字段类型为bit,如果bool值是从DataTable取出的,则不用修改,如果该列bool值是在select返回的结果上添加的一列固定值,那么就需要在返回的DataTable前添加一列:
dataTable.Columns.Add("选择", typeof(bool)); dataTable.Columns["选择"].SetOrdinal(0); 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[0].GetType() == typeof(System.Web.UI.WebControls.DataControlFieldCell)) { TableCell tc = e.Row.Cells[0]; if (tc.Controls.Count > 0) { System.Web.UI.WebControls.CheckBox cb = (System.Web.UI.WebControls.CheckBox)tc.Controls[0]; 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() == " ") { dr[j] = ""; } else { dr[j] = gv.Rows[i].Cells[j].Text.Trim(); } } dt.Rows.Add(dr); } return dt; }
相关文章推荐
- ASP.NET动态生成GridView的使用
- 使用ASP.NET动态生成图片
- ASP.NET动态网站开发培训-05.使用GridView显示数据库内容
- Asp.NET GridView使用iTextSharp.NET生成PDF
- Asp.net中使用文本框的值动态生成控件的方法
- asp.net MVC中使用自定义HtmlForm控件动态生成表单
- ASP.NET MVC 使用总结(二)——扩展HtmlHelper实现动态生成title及meta
- ASP.NET MVC使用Echarts动态生成图表
- asp.net根据条件动态生成GridView,并动态绑定列,且可对其进行编辑的实现
- SolpartMenu的使用:(二)、在ASP.NET页面中使用SolpartMenu控件之动态的加载数据库中的数据来生成菜单
- Asp.net中使用文本框的值动态生成控件的方法
- asp.net根据条件动态生成GridView,并动态绑定列,且可对其进行编辑的实现
- 使用Asp.net动态生成控件的使用总结
- ASP.net 使用(动态的有动画效果的)生成图表工具 Fusion Charts
- Asp.Net GridView 在编辑状态中使用动态Dropdownlist方法
- SolpartMenu的使用:(二)、在ASP.NET页面中使用SolpartMenu控件之动态的加载数据库中的数据来生成菜单
- 动态生成页面(一)——ASP.NET中Literal使用
- ASP.NET MVC 使用总结(二)——扩展HtmlHelper实现动态生成title及meta
- Asp.net中使用文本框的值动态生成控件的方法
- asp.net根据条件动态生成GridView,并动态绑定列,且可对其进行编辑的实现