无法从列表中设置数据网格视图的数据源
本文关键字:网格 视图 数据源 置数据 列表 | 更新日期: 2023-09-27 18:31:00
我有一个数据网格视图,它通过OleDbDataReader
从 Access 获取数据。
问题如下将数据读入数据表然后设置 datasource = dt
=> 有效
dt.Load(dr);
获取 dt 并对其应用 Linq =>空的网格视图
GVMultiple.DataSource = (from myRow in dt.AsEnumerable()
where myRow.Field<string>("State") == "Succeeded"
select myRow)
使Linq.ToList()
=>显示名称为"RowError","RowState","Table"和"hasErrors"的列,这些列不是我的列
GVMultiple.DataSource = (from myRow in dt.AsEnumerable()
where myRow.Field<string>("State") == "Succeeded"
select myRow).ToList()
将数据读入自定义List then
设置Object
datasource = List
=>空GridView
while (dr.Read())
{
UserList.Add(new UserInfo()
{
ID = (int)dr["ID"],
UserName = (string)dr["User Name"]
});
}
GVMultiple.DataSource = UserList
有人可以告诉我发生了什么事吗?
DataBinding
工作,您必须使用Properties
。 Fields
不支持DataBinding
。
按如下方式修改您的类以使其正常工作。
class UserInfo
{
public int ID {get;set;} //convert fields to property
public string UserName{get;set;}
}
RowError","GVMultiple.DataSource = (来自 dt 中的 myRow。AsEnumerable() 其中 myRow.Field("State") == "Successed" 选择我的行)
使 Linq.ToList() => 显示名称为"RowError"、"RowState"、"Table"和"hasErrors"的列,这些列不是我的列
RowState","Table"和"hasErrors"是DataRow的属性 - 这是您创建的列表中的属性。
看看 .CopyToDataTable() 扩展方法。http://msdn.microsoft.com/en-us/library/bb396189.aspx
GVMultiple.DataSource = (from myRow in dt.AsEnumerable()
where myRow.Field<string>("State") == "Succeeded"
select myRow).CopyToDataTable();
原因是数据网格视图无法将新数据的集合识别为可接受的显示格式。
使用 Linq 查询筛选数据并将其重新显示在数据网格视图中时,必须始终将查询结果作为数据视图返回到任何数据源。
数据视图构造一个索引,这显著增加了 可以使用索引的操作的性能,例如筛选 和排序。数据视图的索引是在数据视图时生成的 创建,并且当任何排序或筛选信息是 改 性。创建数据视图,然后设置排序或 稍后筛选信息至少会导致生成索引 两次:一次是在创建数据视图时,另一次是在创建任何 修改排序或筛选属性。
例如:
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;
在示例中,我正在寻找具有名字的员工,例如文本框中的搜索词,txtSearch
找到数据网格视图将显示我的搜索AsDataView()
的过滤结果。