程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 從GridView生成DataTable

從GridView生成DataTable

編輯:.NET實例教程

DataTable與GridView從數據結構上來看都是一個由row和column組成表的結構,我們大部分時間是將DataTable綁定到 GridView中,但web中當頁面回傳的時候,傳遞給GridView的數據源卻再也找不到了,這是一件很郁悶的事情,下面我們根據兩者的相似性,實現從GridView生成DataTable的方法,不管原來的GridVIEw數據源是否是DataTable,都能使用該方法



/**//*----------------------------------------------------------------
// Copyright (C) 2007 螞蟻互動 版權所有。 
//  
// 文件名:GridVIEw.cs
// 文件功能描述:
// 
// 創建標識:jillzhang 
// 修改標識:更新請訪問  http://jillzhang.cnblogs.com
// 修改描述:
//
// 修改標識:
// 修改描述:
//----------------------------------------------------------------*/

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 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)
                            ...{
                                DataColumn dc = table.Columns.Add();
                                string columnName = cols[i];
                                if (String.IsNullOrEmpty(columnName))
        ...{
                                    columnName = gv.Columns[i].HeaderText;
                                    if (string.IsNullOrEmpty(columnName))
                                    ...{
                                        continue;
                                    }
                                }
                                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中



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved