我正在尝试这个但没有成功
var v=ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23);
GridView1.DataSource=v;
GridView1.DataBind();
gridview只显示一行标题RowError HasRrror,但我希望有一行包含产品信息。
答案 0 :(得分:0)
试试这个。
var results = from myRow in ds.Table[0].Rows
where myRow.Field<int>("productID") == 23
select myRow;
这应该为您提供所需的行。
答案 1 :(得分:0)
我认为你应该尝试使用CopyToDataTable
ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23).CopyToDataTable();
当您将其转换为Enumerable时,已过滤的列表没有标识ProductID
的标识符,因此网格无法映射列并失败。
或者,您也可以选择使用AsDataView()
代替CopyToDataTable()
。
可以找到更详细的解释Binding DataRows
数据绑定由ListBindingHelper和TypeDescriptor控制 类。绑定到列表时, 调用ListBindingHelper.GetListItemProperties方法来获取 列表中的列。如果列表实现了ITypedList接口, 调用其GetItemProperties方法。否则,它会使用 TypeDescriptor获取列表中第一个项的属性。 (这使用反射)
DataView类(DataTable也绑定,使用 IListSource)实现ITypedList并返回 DataColumnPropertyDescriptors,用于公开表中的列。 这就是您可以绑定到DataView或DataTable并查看列的原因。 但是,绑定到List时,没有ITypedList 可以将列作为属性返回。因此它可以追溯到 反射并显示DataRow类的物理属性。