从GridView生成DataTable
点击次数:35 次 发布日期:2008-11-26 09:55:28 作者:源代码网
|
源代码网推荐 DataTable与GridView从数据结构上来看都是一个由row和column组成表的结构,我们大部分时间是将DataTable绑定到GridView中,但web中当页面回传的时候,传递给GridView的数据源却再也找不到了,这是一件很郁闷的事情,下面我们根据两者的相似性,实现从GridView生成DataTable的方法,不管原来的GridView数据源是否是DataTable,都能使用该方法 源代码网推荐 源代码网推荐 /**//*---------------------------------------------------------------- 源代码网推荐 // Copyright (C) 2007 jillzhang 版权所有。 源代码网推荐 // 源代码网推荐 // 文件名:GridView.cs 源代码网推荐 // 文件功能描述: 源代码网推荐 // 源代码网推荐 // 创建标识:jillzhang 源代码网推荐 // 修改标识: 源代码网推荐 // 修改描述: 源代码网推荐 // 源代码网推荐 // 修改标识: 源代码网推荐 // 修改描述: 源代码网推荐 //----------------------------------------------------------------*/ 源代码网推荐 源代码网推荐 using System; 源代码网推荐 using System.Collections.Generic; 源代码网推荐 using System.Text; 源代码网推荐 using System.Web.UI.WebControls; 源代码网推荐 using System.Data; 源代码网推荐 using System.Web.UI; 源代码网推荐 源代码网推荐 源代码网推荐 namespace jzlib.Common 源代码网推荐 { 源代码网推荐 public class GridViewHelper 源代码网推荐 { 源代码网推荐 public static string GetCellText(TableCell cell) 源代码网推荐 { 源代码网推荐 string text = cell.Text; 源代码网推荐 if (!string.IsNullOrEmpty(text)) 源代码网推荐 { 源代码网推荐 return text; 源代码网推荐 } 源代码网推荐 foreach (Control control in cell.Controls) 源代码网推荐 { 源代码网推荐 if (control != null && control is IButtonControl) 源代码网推荐 { 源代码网推荐 IButtonControl btn = control as IButtonControl; 源代码网推荐 text = btn.Text.Replace(" ", "").Trim(); 源代码网推荐 break; 源代码网推荐 } 源代码网推荐 if (control != null && control is ITextControl) 源代码网推荐 { 源代码网推荐 LiteralControl lc = control as LiteralControl; 源代码网推荐 if (lc != null) 源代码网推荐 { 源代码网推荐 continue; 源代码网推荐 } 源代码网推荐 ITextControl l = control as ITextControl; 源代码网推荐 源代码网推荐 text = l.Text.Replace(" ", "").Trim(); 源代码网推荐 break; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 return text; 源代码网推荐 } 源代码网推荐 /**//// <summary> 源代码网推荐 /// 从GridView的数据生成DataTable 源代码网推荐 /// </summary> 源代码网推荐 /// <param name="gv">GridView对象</param> 源代码网推荐 public static DataTable GridView2DataTable(GridView gv) 源代码网推荐 { 源代码网推荐 DataTable table = new DataTable(); 源代码网推荐 int rowIndex = 0; 源代码网推荐 List<string> cols = new List<string>(); 源代码网推荐 if (!gv.ShowHeader && gv.Columns.Count == 0) 源代码网推荐 { 源代码网推荐 return table; 源代码网推荐 } 源代码网推荐 GridViewRow headerRow = gv.HeaderRow; 源代码网推荐 int columnCount = headerRow.Cells.Count; 源代码网推荐 for (int i = 0; i < columnCount; i++) 源代码网推荐 { 源代码网推荐 string text = GetCellText(headerRow.Cells[i]); 源代码网推荐 cols.Add(text); 源代码网推荐 } 源代码网推荐 foreach (GridViewRow r in gv.Rows) 源代码网推荐 { 源代码网推荐 if (r.RowType == DataControlRowType.DataRow) 源代码网推荐 { 源代码网推荐 DataRow row = table.NewRow(); 源代码网推荐 int j = 0; 源代码网推荐 for (int i = 0; i < columnCount; i++) 源代码网推荐 { 源代码网推荐 string text = GetCellText(r.Cells[i]); 源代码网推荐 if (!String.IsNullOrEmpty(text)) 源代码网推荐 { 源代码网推荐 if (rowIndex == 0) 源代码网推荐 { 源代码网推荐 string columnName = cols[i]; 源代码网推荐 if (String.IsNullOrEmpty(columnName)) 源代码网推荐 { 源代码网推荐 continue; 源代码网推荐 } 源代码网推荐 if (table.Columns.Contains(columnName)) 源代码网推荐 { 源代码网推荐 continue; 源代码网推荐 } 源代码网推荐 DataColumn dc = table.Columns.Add(); 源代码网推荐 dc.ColumnName = columnName; 源代码网推荐 dc.DataType = typeof(string); 源代码网推荐 } 源代码网推荐 row[j] = text; 源代码网推荐 j++; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 rowIndex++; 源代码网推荐 table.Rows.Add(row); 源代码网推荐 } 源代码网推荐 } 源代码网推荐 return table; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 使用这个函数,您可以得到GridView当前页面的数据,当然如果您在GridView中添加了复杂的控件,我们将略过这些内容,我们只从显示文本的列中导出数据到DataTable,如果您想导出GridView的全部数据,请在绑定前设置AllowPaging=false; 源代码网推荐 当然大家会问这样做有什么用呢?这个函数是我在开发将GridView导出Excel的时候想到的,类似于这种应用情形,我想还有很多。 源代码网推荐 下面是一个示例,通过从上面的GridView导出DataTable,然后再绑定到下面的GridView中 源代码网推荐 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
