当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  从GridView生成DataTable

 从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)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华