博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DataGridView綁定數據相關
阅读量:4042 次
发布时间:2019-05-24

本文共 3228 字,大约阅读时间需要 10 分钟。

DataGridView 的Datasource可以是以下幾種接口的類型

  1. Ilist接口,例如數組
  2. IlistSource接口,例如 DataTable,DataSet類
  3. IBindingList接口,例如 BindingList類
  4. IBindingListView接口,例如 BindingSource類

一、 對于數組 ,如果直接進行綁定,可能得不到我們想要的結果。

//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’”);List
list = 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/

你可能感兴趣的文章
司法如何运用电子智能化加快现代化建设
查看>>
设计行业运用企业云盘能带来什么样的变化
查看>>
企业云盘如何让能源电力行业乘上数字化发展列车
查看>>
iSecret&nbsp;1.1&nbsp;正在审核中
查看>>
IOS开发的开源库
查看>>
IOS开发的开源库
查看>>
iSecret&nbsp;1.1&nbsp;正式发布&nbsp;Congratulat…
查看>>
深入理解 Docker 镜像 json 文件
查看>>
micro Cloud Foundry和micro Iron Foundry安装的那些事
查看>>
Iron Foundry和Cloud Foundry的那些事
查看>>
Iron Foundry和Cloud Foundry的vcap对比
查看>>
Cloud Foundry Service Gateway源码分析
查看>>
浅谈Cloud Foundry中cloud_controller的postgres数据库
查看>>
搜索引擎核心技术入门
查看>>
Cloud Foundry中Service Gateway功能以及通信机制
查看>>
浅谈计算机系统结构的性能与可靠性
查看>>
TCP/IP协议中的安全问题
查看>>
Winnowing:一种文档指纹的通用算法
查看>>
浏览器中的安全窗口通信
查看>>
基于网络爬虫的XSS漏洞检测技术
查看>>