C# 无法从列表中设置datagridview的数据源
我有一个datagridview,它通过C# 无法从列表中设置datagridview的数据源,c#,linq,datagridview,datasource,C#,Linq,Datagridview,Datasource,我有一个datagridview,它通过OleDbDataReader从Access获取数据 问题如下 将数据读入数据表,然后设置datasource=dt=>有效 dt.Load(dr); 获取dt并对其应用Linq=>empty GridView GVMultiple.DataSource = (from myRow in dt.AsEnumerable() where myRow.Field<string>("State")
OleDbDataReader
从Access获取数据
问题如下
将数据读入数据表,然后设置datasource=dt
=>有效
dt.Load(dr);
获取dt并对其应用Linq=>empty GridView
GVMultiple.DataSource = (from myRow in dt.AsEnumerable()
where myRow.Field<string>("State") == "Succeeded"
select myRow)
将数据读入自定义列表的对象
,然后设置datasource=List
=>空GridView
while (dr.Read())
{
UserList.Add(new UserInfo()
{
ID = (int)dr["ID"],
UserName = (string)dr["User Name"]
});
}
GVMultiple.DataSource = UserList
有人能告诉我发生了什么吗?为了使数据绑定
工作,您必须使用属性
<代码>字段
不支持数据绑定
按如下所示修改类以使其正常工作
class UserInfo
{
public int ID {get;set;} //convert fields to property
public string UserName{get;set;}
}
GVMultiple.DataSource=(来自dt.AsEnumerable()中的myRow)
其中myRow.Field(“State”)=“成功”
选择myRow)
生成Linq.ToList()=>将显示名为“RowError”、“RowState”、“Table”和“hasErrors”的列,这些列不是我的列
GVMultiple.DataSource = (from myRow in dt.AsEnumerable()
where myRow.Field<string>("State") == "Succeeded"
select myRow).ToList()
RowError、“RowState”、“Table”和“hasErrors”是DataRow的属性,它位于您创建的列表中
查看.CopyToDataTable()扩展方法。
GVMultiple.DataSource=(来自dt.AsEnumerable()中的myRow)
其中myRow.Field(“State”)=“成功”
选择myRow).CopyToDataTable();
原因是数据网格视图无法将新数据集合识别为可接受的显示格式
使用Linq查询过滤数据并在数据网格视图中重新显示数据时,必须始终将查询结果作为数据视图返回给任何数据源
DataView构造了一个索引,它显著增加了
可以使用索引的操作的性能,例如筛选
数据视图的索引是在数据视图
当创建任何排序或筛选信息时
修改。创建数据视图,然后设置排序或
过滤信息后,至少会生成索引
两次:一次是在创建DataView时,另一次是在
已修改排序或筛选器属性
例如:
DataTable dt = empData.loadEmployee();
BindingSource bs = new BindingSource();
bs.DataSource = dt.AsEnumerable()
.Where(c => c.Field<string>("First Name").ToLower()
.Contains(txtSearch.Text.ToLower())).AsDataView();
dgvEmpManag.DataSource = bs;
DataTable dt=empData.loadEmployee();
BindingSource bs=新的BindingSource();
bs.DataSource=dt.AsEnumerable()
其中(c=>c.Field(“名字”).ToLower()
.Contains(txtSearch.Text.ToLower()).AsDataView();
dgvEmpManag.DataSource=bs;
在本例中,我正在查找名与文本框
txtSearch
中搜索词类似的员工。当找到时,数据网格视图将显示我搜索的过滤结果AsDataView()
ID
和UserName
是属性或字段?定义如下:class UserInfo{public int ID;public string UserName;etc..}谢谢,这解决了其中一个问题。如果我无法使用LINQ筛选我的dt并将数据源设置为该数据源,那么另一部分呢?不要使用LINQ。只需将DataTable
设置为数据源并使用
DataTable dt = empData.loadEmployee();
BindingSource bs = new BindingSource();
bs.DataSource = dt.AsEnumerable()
.Where(c => c.Field<string>("First Name").ToLower()
.Contains(txtSearch.Text.ToLower())).AsDataView();
dgvEmpManag.DataSource = bs;