日期:2014-05-18  浏览次数:20490 次

基础知识请教:绑定GridView用DataSet还是DataView作数据源好?什么时候用哪个?
我只一知半解:DataSet表示数据集,内存中的表;DataView数据视图,就像数据库中的表视图一样。但是两者到底分别该用于什么情况,我还不清楚。
以前都一直用DataSet.

------解决方案--------------------
DataSet可以包含多个datatable,是数据集,gridview真正绑定的是DataView(视图),而不是datatable,DataSet,我们在写
InforGridView.DataSource = dt;
其实是
InforGridView.DataSource = dt.DefaultView;
在绑定时如果不对数据视图进行其他操作,用三者都不影响,但是DataView,有很都功能,看看我做过的一个例子,实现GridView双向排序
//ViewState[ "SortOrder "] = "数据主键名 ";
//ViewState[ "OrderDire "] = "desc ";
//dt是从数据库中取到的数据
DataView dv = dt.DefaultView;
string sort = (string)ViewState[ "SortOrder "] + " " + (string)ViewState[ "OrderDire "];
dv.Sort = sort;
GridView1.DataSource = dv;
GridView1.DataBind();
------解决方案--------------------
你绑定数据源时 用dataset 其实是默认为ds.Tables[0].DefaultView[0];
也是用DataView
用dv.RowFilter 想当于where 后面直接写语句就可以
在多条件查询的时候用dataview还是比较方便的 个人认为

------解决方案--------------------
1.
内部始终使用 DataView 作为绑定数据源

2.
假如你给 DataSource 是 DataTable,那么
内部去 DataTable.DefaultView 作为最终绑定数据源

3.
假如你给 DataSource 是 DataSet,那么
假如,你没有设置 DataMember,那么使用 DataSet.Tables[0] 即取第一个表
否则,DataSet.Tables[DataMember]
然后,根据 2 ,会取其 DefaultView

4.
因为创建 DataView 涉及 DataTable 上索引的更新、创建问题,具体见

因此,最佳方式你显示的创建自己的 DataView 付给 DataSource
如 DataView dv = new DataView(DataSet.Tables[0], < <other whatever args> > );

------解决方案--------------------

在线链接一时找不到了, copy MSDN 的说明
你可以搜索 "创建和使用 DataView "


DataView 使您能够创建 DataTable 中所存储的数据的不同视图,这种功能通常用于数据绑定应用程序。使用 DataView,您可以使用不同排序顺序显示表中的数据,并且可以按行状态或基于筛选器表达式来筛选数据。

DataView 提供基础 DataTable 中的数据的动态视图:内容、排序和成员关系会实时反映其更改。此行为不同于 DataTable 的 Select 方法,后者从表中按特定的筛选器和/或排序顺序返回 DataRow 数组,虽然其内容反映对基础表的更改,但其成员关系和排序却则保持静态。DataView 的动态功能使其成为数据绑定应用程序的理想选择。

与数据库视图类似,DataView 为您提供了可向其应用不同排序和筛选条件的单个数据集的动态视图。但是,与数据库视图不同的是,DataView 不能作为表来对待,无法提供联接的表的视图。另外,还不能排除存在于源表中的列,也不能追加不存在于源表中的列(如计算列)。

可以使用 DataViewManager 来管理 DataSet 中所有表的视图设置。DataViewManager 为您提供了一种方便的方法来管理每个表的默认视图设置。在将一个控件绑定到 DataSet 的多个表时,绑定到 DataViewManager 是理想的选择。