本文共 3228 字,大约阅读时间需要 10 分钟。
DataGridView 的Datasource可以是以下幾種接口的類型
一、 對于數組 ,如果直接進行綁定,可能得不到我們想要的結果。
//bind array
string[] arrTest = { “AAAAA”, “BBBBB”, “CCCCC”, “DDDDDD” }; dgv1.DataSource = arrTest;//不會報錯,但得不到我們想要的結果。//方法1. 利用Linq 生成匿名集合,再轉為數組進行綁定。 dgv2.DataSource = arrTest.Select(o => new { ColumnA = o }).ToArray(); //ToList()//(new string[] { "this is test1","this is test2"}).Select(o => new { String = o }).ToArray (); //方法2. 轉為一個包裝容器類后,再進行綁定 dgv2.DataSource = arrTest.Select(o => new ClassDgvColumn { ColumnA = o }).ToArray(); public class ClassDgvColumn { public string ColumnA { get; set; } }
當然,還有其它的方法。
二、 對于DataRow集合數組作為數據源,例如 List,IEnumerable對象(例如 一個Linq查詢) 如果直接將List,IEnumerable作為數據源,結果將是幾列RowError,RowState,HasErrors之類的,并不是我們想要的結果。解決方法1:將List封裝在DataView對象中
例如:DataTable dtUser = GetUser();DataRow[] drUser = dtUser.Select(“DepartMent = ‘IT’”);Listlist = drUser.ToList ();dgv.DataSource = dtUser.AsEnumerable().Where(list.Contains).AsDataView();//或DataTable dtUser = GetUser();dgv.DataSource= dtUser.AsEnumerable().Where((o) => Convert.ToString(o["DepartMent"])==("IT")).AsDataView(); //ToTable();
方法2:DataRow集合調用CopyToDataTable()方法 或 AsDataView()
DataTable dtUser = GetUser();
dgv.DataSource= dtUser.AsEnumerable().Where((o) => Convert.ToString(o[“DepartMent”])==(“IT”)).AsDataView(); //ToTable();方法3:寫一個類將List 轉化為 DataTable
////// Convert a List{T} to a DataTable. /// public static DataTable ToDataTable(List items) { var tb = new DataTable(typeof(T).Name); PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo prop in props) { Type t = GetCoreType(prop.PropertyType); tb.Columns.Add(prop.Name, t); } foreach (T item in items) { var values = new object[props.Length]; for (int i = 0; i < props.Length; i++) { values[i] = props[i].GetValue(item, null); } tb.Rows.Add(values); } return tb; } /// /// Determine of specified type is nullable /// public static bool IsNullable(Type t) { return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)); } ////// Return underlying type if type is Nullable otherwise return the type /// public static Type GetCoreType(Type t) { if (t != null && IsNullable(t)) { if (!t.IsValueType) { return t; } else { return Nullable.GetUnderlyingType(t); } } else { return t; } }
转载地址:http://nimdi.baihongyu.com/