我有一个datagridview,它通过OleDbDataReader
从Access获取数据。
问题如下
将数据读入数据表,然后设置datasource = dt
=>作品
dt.Load(dr);
取dt并将Linq应用于它=>空GridView
GVMultiple.DataSource = (from myRow in dt.AsEnumerable()
where myRow.Field<string>("State") == "Succeeded"
select myRow)
制作Linq.ToList()
=&gt;显示名称为“RowError”,“RowState”,“Table”和“hasErrors”的列,这些列不是我的列
GVMultiple.DataSource = (from myRow in dt.AsEnumerable()
where myRow.Field<string>("State") == "Succeeded"
select myRow).ToList()
将数据读入自定义Object
设置的List then
datasource = List
=&gt;空GridView
while (dr.Read())
{
UserList.Add(new UserInfo()
{
ID = (int)dr["ID"],
UserName = (string)dr["User Name"]
});
}
GVMultiple.DataSource = UserList
有人可以告诉我发生了什么事吗?
答案 0 :(得分:1)
为了让DataBinding
工作,您必须使用Properties
。 Fields
不支持DataBinding
。
按如下所示修改您的课程以使其正常工作。
class UserInfo
{
public int ID {get;set;} //convert fields to property
public string UserName{get;set;}
}
答案 1 :(得分:1)
GVMultiple.DataSource =(来自myRow in dt.AsEnumerable() myRow.Field(“State”)==“Succeeded” 选择myRow)
制作Linq.ToList()=&gt;显示名称为“RowError”,“RowState”,“Table”和“hasErrors”的列,这些列不是我的列
RowError“,”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();
答案 2 :(得分:0)
原因是数据网格视图无法将新数据集合识别为可接受的显示格式。
使用Linq查询过滤数据并在数据网格视图中重新显示时,必须始终将查询结果作为数据视图返回到任何数据源。
DataView构造一个索引,它显着增加了 可以使用索引的操作的性能,例如过滤 和排序。 DataView的索引是在DataView时构建的 创建时以及任何排序或过滤信息 改性。创建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;
在示例中,我发现数据网格视图将显示我的搜索txtSearch
的过滤结果,我在文本框AsDataView()
中查找名称与搜索字词名称相同的员工。