Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从列表中设置datagridview的数据源_C#_Linq_Datagridview_Datasource - Fatal编程技术网

C# 无法从列表中设置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")

我有一个datagridview,它通过
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;