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 私有方法 /// /// 截取内容长度 /// /// 原字符串 /// 截取长度 /// 截取后字符串 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; } } } /// /// 获取单元格内容 /// /// TableCell /// 内容 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; } /// /// 设置单元格内容 /// /// TableCell /// 最大长度 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 公有方法 /// /// 从GridView的数据生成DataTable /// /// GridView对象 public static DataTable GridView2DataTable(GridView gv) { DataTable table = new DataTable(); int rowIndex = 0; List cols = new List(); 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; } /// /// 将集合类转换成DataTable /// /// 集合 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; } /// /// 将泛型集合类转换成DataTable /// /// 集合项类型 /// 集合 /// 需要返回的列的列名 /// 数据集(表) public static DataTable ToDataTable(IList list, params string[] propertyName) { List propertyNameList = new List(); 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 } } //csharp/8579