Asp.net GridView转换成DataTable
GridView绑定DataTable后,如何获取GridView绑定后显示的值,在项目需求需要的背景下,搜索了获取单元格显示文本的方法,然后写了一个静态方法,经过在项目中的使用,bug的修复,较为稳定。
- #region ================GridView转DataTable方法================
- /// <param name="gv">已绑定数据源的GridView</param>
- /// <param name="showHideColumn">是否显示隐藏列</param>
- /// <returns>DataTable</returns>
- public static DataTable GridViewToDataTable(GridView gv, Boolean showHideColumn)
- {
- //处理后的数据表
- DataTable dt = new DataTable();
- //记录符合条件索引
- int[] columnIndexs = new int[gv.HeaderRow.Cells.Count];
- //记录指示器从0开始
- int columnIndexsCount = ;
- //初始化dt列名
- for (int i = ; i < gv.HeaderRow.Cells.Count; i++)
- {
- //获取列名
- string columnName = GetCellText(gv.HeaderRow.Cells[i]);
- //string columnName = gv.HeaderRow.Cells[i].Text;
- //列名非空//且可见
- if (!string.IsNullOrEmpty(columnName))
- {
- //是否显示隐藏列
- if (gv.HeaderRow.Cells[i].Visible || showHideColumn)
- {
- //列名不允许重复
- if (!dt.Columns.Contains(columnName))
- {
- //dt中新增一列
- DataColumn dc = dt.Columns.Add();
- //列名
- dc.ColumnName = columnName;
- //存储的数据类型
- dc.DataType = typeof(string);
- //记录符合条件的列索引
- columnIndexs[columnIndexsCount] = i;
- //记录指示器+1
- columnIndexsCount++;
- }
- }
- }
- }
- //GridView行复制到数组中便于操作
- GridViewRow[] allGridViewRow = new GridViewRow[gv.Rows.Count];
- gv.Rows.CopyTo(allGridViewRow, );
- //数据添加到dt中
- foreach (GridViewRow row in allGridViewRow)
- {
- //创建一行
- DataRow dr = dt.NewRow();
- //符合条件的列
- for (int i = ; i < columnIndexsCount; i++)
- {
- //获取显示文本并保存
- dr[i] = GetCellText(row.Cells[columnIndexs[i]]);
- }
- //dt中增加此行
- dt.Rows.Add(dr);
- }
- //返回处理后的数据
- return dt;
- }
- /// <param name="gv">未绑定数据源的GridView</param>
- /// <param name="dtSource">GridView的数据源</param>
- /// <param name="showHideColumn">是否显示隐藏列</param>
- /// <returns>DataTable</returns>
- public static DataTable GridViewToDataTable(GridView gv, DataTable dtSource, Boolean showHideColumn)
- {
- //绑定原始数据到GridView
- gv.DataSource = dtSource;
- gv.DataBind();
- //设置为不分页
- gv.AllowPaging = false;
- //GridView转DataTable并返回
- return GridViewToDataTable(gv, showHideColumn);
- }
- #endregion
- #region ================私有工具方法================
- /// <param name="cell">TableCell</param>
- /// <returns>string</returns>
- private static string GetCellText(TableCell cell)
- {
- string cellText = cell.Text;
- //常规文本(无控件)直接返回
- if (!string.IsNullOrEmpty(cellText))
- {
- //返回显示文本
- return cellText.Replace(" ", "");
- }
- //遍历cell中的控件
- foreach (Control control in cell.Controls)
- {
- if (control != null && control is IButtonControl)
- {
- IButtonControl btn = control as IButtonControl;
- cellText += btn.Text.Replace("\r\n", "").Trim();
- continue;
- }
- if (control != null && control is ITextControl)
- {
- LiteralControl lc = control as LiteralControl;
- if (lc != null)
- {
- //跳出到下一步foreach
- continue;
- }
- ITextControl l = control as ITextControl;
- cellText += l.Text.Replace("\r\n", "").Trim();
- continue;
- }
- }
- //返回显示文本
- return cellText;
- }
- #endregion
- #region ================另一种方法================
- public static DataTable GetGridDataTable(GridView grid)
- {
- DataTable dt = new DataTable();
- DataColumn dc;//创建列
- DataRow dr; //创建行
- //构造列
- for (int i = ; i < grid.Columns.Count; i++)
- {
- dc = new DataColumn();
- dc.ColumnName = grid.Columns[i].HeaderText;
- dt.Columns.Add(dc);
- }
- //构造行
- for (int i = ; i < grid.Rows.Count; i++)
- {
- dr = dt.NewRow();
- for (int j = ; j < grid.Columns.Count; j++)
- {
- dr[j] = grid.Rows[i].Cells[j].Text;
- }
- dt.Rows.Add(dr);
- }
- return dt;
- }
- #endregion
Asp.net GridView转换成DataTable的更多相关文章
- 带复杂表头合并单元格的HtmlTable转换成DataTable并导出Excel
步骤: 一.前台JS取HtmlTable数据,根据设定的分隔符把数据拼接起来 <!--导出Excel--> <script type="text/javascript&qu ...
- C#_List转换成DataTable
/// <summary> /// 讲list集合转换成datatable /// </summary> /// <param name="list" ...
- 将List转换成DataTable
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- list转换成DataTable
list转换成DataTable类如下: public static DataTable ToDataTable<T>(this IList<T> datas) { DataT ...
- 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...
- Asp.net SqlDataReader转成Datatable
Asp.net SqlDataReader转成Datatable 所属栏目:Asp.net 编程 | 发布日期:2013年04月05日 | 点击:517 次 内容摘要:Asp.net 数据存储,呈现方 ...
- C# DataTable转换成实体列表 与 实体列表转换成DataTable
/// <summary> /// DataTable转换成实体列表 /// </summary> /// <typeparam name="T"&g ...
- 获取报告 Stream转string,利用字符串分割转换成DataTable
protected void Button1_Click(object sender, EventArgs e) { MemoryStream stream = new MemoryStream(); ...
- C#:CsvReader读取.CSV文件并转换成DataTable
原文引用:https://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader using LumenWorks.Framework.IO.Csv; ...
随机推荐
- 解决IE6兼容性问题的十一大技巧
10要点解决IE6兼容性问题 1.使用声明 你必须经常在html网页头部放置一个声明,推荐使用严格的标准.例如 <!DOCTYPEHTMLPUBLIC“-//W3C//DTDHTML4.01// ...
- Jaspersoft Studio 导出PDF格式中文不显示
1:设置字体 2:应用上面设置的字体
- Codeforces Round #310 (Div. 1) B. Case of Fugitive(set二分)
B. Case of Fugitive time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- 很赞的idea教程
感谢: http://pan.baidu.com/s/1dDEaVxn
- ES6学习笔记二:各种扩展
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7242967.html 一:字符串扩展 1:字符串遍历器 for (let char of str) { // ...
- JavaWeb应用出现HTTP 500-Unable to compile class for JSP 错误 的解决
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6383192.html 在上一篇博文中,我们把自己本机的web项目部署到了云主机的tomcat上.之后通过浏览器 ...
- libvlc_new 调用产生段错误
在调试程序的时候,碰到一个奇怪的段错误问题.只要链接的时候使用-Wl,-rpath=./vlc/lib就会产生段错误,如果链接的时候使用的是-Wl,-rpath=../../tool/vlc/lib则 ...
- 获取spring的ApplicationContext几种方式【转】
转自:http://blog.sina.com.cn/s/blog_9c7ba64d0101evar.html Java类获取spring 容器的bean 常用的5种获取spring 中bean的方式 ...
- oracle11g-R2静默安装报错[INS-32013]解决方案
问题描述: oracle静默安装很强大...,参数搞不对.安装就扯dan了....这个报错搞了一个下午.终于搞定了如释负重.... 如果当初选择仅仅安装oracle软件就没多事情.想一步完成(数据库软 ...
- 使用PHP做移动端 api接口开发方法(适用于TP框架)
1. [代码]使用TP框架时 放在common文件夹下文件名就叫function.php ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...