- using System;
- using System.Collections.Generic;
- using System.web.UI;
- using System.Web.UI.WebControls;
- using System.Data;
- using System.Collections;
- using System.Reflection;
- namespace DotNet.Utilities
- {
- public class GridViewHelper
- {
- #region 私有方法
- /// <summary>
- /// 截取内容长度
- /// </summary>
- /// <param name="o_Str">原字符串</param>
- /// <param name="len">截取长度</param>
- /// <returns>截取后字符串</returns>
- private static string GetStrPartly(string o_Str, int len)
- {
- if (len == 0)
- {
- return o_Str;
- }
- else
- {
- if (o_Str.Length > len)
- {
- return o_Str.Substring(0, len) + "..";
- }
- else
- {
- return o_Str;
- }
- }
- }
- /// <summary>
- /// 获取单元格内容
- /// </summary>
- /// <param name="cell">TableCell</param>
- /// <returns>内容</returns>
- private 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("\\r\\n", "").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("\\r\\n", "").Trim();
- break;
- }
- }
- return text;
- }
- /// <summary>
- /// 设置单元格内容
- /// </summary>
- /// <param name="cell">TableCell</param>
- /// <param name="maxLen">最大长度</param>
- private static void SetCellText(TableCell cell, int maxLen)
- {
- string text = cell.Text;
- if (!string.IsNullOrEmpty(text))
- {
- cell.Text = GetStrPartly(text, maxLen);
- }
- foreach (Control control in cell.Controls)
- {
- if (control != null && control is IButtonControl)
- {
- IButtonControl btn = control as IButtonControl;
- text = btn.Text.Replace("\\r\\n", "").Trim();
- btn.Text = GetStrPartly(text, maxLen);
- 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("\\r\\n", "").Trim();
- if (l is DataBoundLiteralControl)
- {
- cell.Text = GetStrPartly(text, maxLen);
- break;
- }
- else
- {
- l.Text = GetStrPartly(text, maxLen);
- break;
- }
- }
- }
- }
- #endregion
- #region 公有方法
- /// <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;
- }
- /// <summary>
- /// 将集合类转换成DataTable
- /// </summary>
- /// <param name="list">集合</param>
- public static DataTable ToDataTable(IList list)
- {
- DataTable result = new DataTable();
- if (list.Count > 0)
- {
- PropertyInfo[] propertys = list[0].GetType().GetProperties();
- foreach (PropertyInfo pi in propertys)
- {
- result.Columns.Add(pi.Name, pi.PropertyType);
- }
- for (int i = 0; i < list.Count; i++)
- {
- ArrayList tempList = new ArrayList();
- foreach (PropertyInfo pi in propertys)
- {
- object obj = pi.GetValue(list[i], null);
- tempList.Add(obj);
- }
- object[] array = tempList.ToArray();
- result.LoadDataRow(array, true);
- }
- }
- return result;
- }
- /// <summary>
- /// 将泛型集合类转换成DataTable
- /// </summary>
- /// <typeparam name="T">集合项类型</typeparam>
- /// <param name="list">集合</param>
- /// <param name="propertyName">需要返回的列的列名</param>
- /// <returns>数据集(表)</returns>
- public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
- {
- List<string> propertyNameList = new List<string>();
- if (propertyName != null) propertyNameList.AddRange(propertyName);
- DataTable result = new DataTable();
- if (list.Count > 0)
- {
- PropertyInfo[] propertys = list[0].GetType().GetProperties();
- foreach (PropertyInfo pi in propertys)
- {
- if (propertyNameList.Count == 0)
- {
- result.Columns.Add(pi.Name, pi.PropertyType);
- }
- else
- {
- if (propertyNameList.Contains(pi.Name)) result.Columns.Add(pi.Name, pi.PropertyType);
- }
- }
- for (int i = 0; i < list.Count; i++)
- {
- ArrayList tempList = new ArrayList();
- foreach (PropertyInfo pi in propertys)
- {
- if (propertyNameList.Count == 0)
- {
- object obj = pi.GetValue(list[i], null);
- tempList.Add(obj);
- }
- else
- {
- if (propertyNameList.Contains(pi.Name))
- {
- object obj = pi.GetValue(list[i], null);
- tempList.Add(obj);
- }
- }
- }
- object[] array = tempList.ToArray();
- result.LoadDataRow(array, true);
- }
- }
- return result;
- }
- #endregion
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/170920135968.html
来源: http://www.codesnippet.cn/detail/170920135968.html