您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > vb中mshflexgrid和datagrid的区别
vb中mshflexgrid和datagrid的区别msflexgrid是老版本的,不能用ADOmshflexgrid是新版本的,可以用ADO,而且还能做合并单元格之类的,功能强,但非常复杂,datagrid可以实现普通的表格,而且几乎不用编程,最简单,当然功能没有上一个强.mshflexgrid是一个纯sheet的表格DataGrid和另外两个控件最大的区别在于DataGrid允许用户修改数据,而另外两个不允许。如果你要用户修改数据,你应该使用DataGrid。如果只是显示数据,应该使用MSFlexGrid或者MSHFlexGrid,因为这两个控件显示的选项更多,更好看。而MSFlexGrid和MSHFlexGrid之间的区别,主要是MSHFlexGrid支持绑定ADODC控件,而MSFlexGrid只支持Data控件。MSFlexGrid引用方法:工程-部件-MicrosoftFlexGridControl6.0MSHFlexGrid引用方法:工程-部件-MicrosoftHierarchicalFlexGridControl6.0MSHFlexGrid控件的一个主要特性是它能显示层次结构记录集—以层次结构方式显示的关系表。创建层次结构记录集的最容易的方法是使用数据环境设计器并把MSHFlexGrid控件的DataSource属性赋给数据环境。您也可以用Shape命令作为ADODataControl的RecordSource在代码中创建层次结构记录,如下面的示例:'创建ConnectionString.DimstrCnAsStringstrCn=Provider=MSDataShape.1;DataSource=Nwind;&_ConnectTimeout=15;DataProvider=MSDASQL'创建Shape命令.DimstrShAsStringstrSh=SHAPE{SELECT*FROM`Customers`}ASCustomers&_APPEND({SELECT*FROM`Orders`}ASOrdersRELATE&_CustomerIDTOCustomerID)ASOrders'把ConnectionString赋给ADODataControl的'ConnectionString属性,Shape命令以及'控件的RecordSource属性.WithAdodc1.ConnectionString=strCn.RecordSource=strShEndWith'把HflexGrid控件的DataSource属性设置到'ADOData控件。SetHFlexGrid1.DataSource=Adodc1DataGrid控件是一种类似于电子数据表的绑定控件,可以显示一系列行和列来表示Recordset对象的记录和字段。可以使用DataGrid来创建一个允许最终用户阅读和写入到绝大多数数据库的应用程序。DataGrid控件可以在设计时快速进行配置,只需少量代码或无需代码。当在设计时设置了DataGrid控件的DataSource属性后,就会用数据源的记录集来自动填充该控件,以及自动设置该控件的列标头。然后您就可以编辑该网格的列;删除、重新安排、添加列标头、或者调整任意一列的宽度。在运行时,可以在程序中切换DataSource来察看不同的表,或者可以修改当前数据库的查询,以返回一个不同的记录集合。注意DataGrid控件与VisualBasic5.0中的DBGrid是代码兼容的,除了一个例外:DataGrid控件不支持DBGrid的“解除绑定模式”概念。DBGrid控件包括在VisualBasic98的Tools目录中。可能的用法查看和编辑在远程或本地数据库中的数据。与另一个数据绑定的控件(诸如DataList控件)联合使用,使用DataGrid控件来显示一个表的记录,这个表通过一个公共字段链接到由第二个数据绑定控件所显示的表。使用DataGrid控件的设计时特性可以不编写任何代码,只通过使用DataGrid控件的设计时特性来创建一个数据库应用程序。下面的说明概要地说明了在实现DataGrid控件的典型应用时的一般步骤。完整的循序渐进的指示,请参阅主题“DataGrid方案1:使用DataGrid控件创建一个简单数据库应用程序”。要在设计时实现一个DataGrid控件为您希望访问的数据库创建一个Microsoft数据链接(.UDL)文件。请参阅“创建NorthwindOLEDB数据链接”主题,以获得一个示例。在窗体上放置一个ADOData控件,并将其ConnectionString属性设置为在第1步中所创建的OLEDB数据源。在这个AdoData控件的RecordSource属性中输入一条将返回一个记录集的SQL语句。例如,Select*FromMyTableNameWhereCustID=12在窗体上放置一个DataGrid控件,并将其DataSource属性设置为这个ADOData控件。右键单击该DataGrid控件,然后单击“检索字段”。右键单击该DataGrid控件,然后单击“编辑”。重新设置该网格的大小、删除、或添加网格的列。右键单击该DataGrid控件,然后单击“属性”。使用“属性页”对话框来设置该控件的适当的属性,将该网格配置为所需的外观和行为。在运行时更改显示的数据在创建了一个使用设计时特性的网格后,也可以在运行时动态地更改该网格的数据源。下面介绍实现这一功能的通常方法。更改DataSource的RecordSource更改所显示的数据的最通常的方法是改变该DataSource的查询。例如,如果DataGrid控件使用一个ADOData控件作为其DataSource,则重写RecordSource、刷新该ADOData控件、都将改变所显示的数据。'ADOData控件连接的是Northwind数据库的'Products表。新查询查找所有'SupplierID=12的记录。DimstrQueryAsStringstrQuery=SELECT*FROMSuppliersWHERESupplierID=12Adodc1.RecordSource=strQueryAdodc1.Refresh更改DataSource在运行时,可以将DataSource属性重新设置为一个不同的数据源。例如,您可能具有若干个ADOData控件,每个控件连接不同的数据库,或设置为不同的RecordSource属性。可以简单地将DataSource从一个ADOData控件重新设置为另一个ADOData控件:'将DataSource重新设置为一个连接到Pubs数据库的、'使用Authors表的ADOData控件。SetDataGrid1.DataSource=adoPubsAuthors重新绑定DataSource当将DataGrid控件用于一个远程数据库,诸如SQLServer时,可以改变表的结构。例如,可以给这个表添加一个字段。在这种情形时,可以调用Rebind方法根据新的结构来重新创建该网格。注意,如果已经在设计时改变了这个列的布局,DataGrid控件将会试图重新创建当前的布局,包括任何空的列。不过,通过首先调用ClearFields方法,可以强制该网格重新设置所有的列。从DataGrid返回值在DataGrid被连接到一个数据库后,可能想要监视用户单击了哪一个单元。您可以使用RowColChange事件—而不是Click事件—如下所示,:PrivateSubDataGrid1_RowColChange(LastRowAsVariant,ByValLastColAsInteger)'显示用户所单击的单元的文字、行和列的信息。Debug.PrintDataGrid1.Text;DataGrid1.Row;DataGrid1.ColEndSub使用CellText和CellValue方法当一个列使用NumberFormat属性设置格式后,CellText和CellValue属性是很有用的。NumberFormat属性不必更改实际的数据的格式就可以更改任何包含数字的列的格式。例如,给定一个网格,其中包含一个名为ProductID的、包含整数的列。下面的代码将使DataGrid以P-0000的格式来显示数据。换句话说,尽管在ProductID字段中所包含的实际数值为3,但该网格所显示的值将是P-0003。PrivateSubForm_Load()DataGrid1.Columns(ProductID).NumberFormat=P-0000EndSub要返回数据库中所包含的实际值,应使用CellValue方法,如下所示:PrivateSubDataGrid1_RowColChange(LastRowAsVariant,ByValLastColAsInteger)Debug.Print_DataGrid1.Columns(ProductID).CellValue(DataGrid1.Bookmark)EndSub注意上面所用的CellValue和下面所用的CellText值,都需要将bookmark属性作为一个参数,功能才正确。相反地,如果要返回该字段的格式化的值,应使用CellText方法:PrivateSubDataGrid1_RowColChange(LastRowAsVariant,ByValLastColAsInteger)Debug.Print_DataGrid1.Columns(ProductID).CellText(DataGrid1.Bookmark)EndSub注意上面的CellText方法等价于使用DataGrid控件的Texr属性。现成本系统已用DataGrid显示数据了.我想只从DataGrid取数据就可以了.发现不是那么简单了.Rows笔据取不到.用grid.VisibleRows只能取显示的行数.行不通.又想到分页.方法如下:ifKgrid.VisibleRowsthengrid.Scroll0,grid.VisibleRowsK=0endifgrid.row=k这样存在一个问量,每下一页,就grid.VisibleRows+1的数据取不到,不知道什么原因,也不去研究了.后来就用以下的方法了.增加一个类模块:clsComm代码如下:PublicFunctionExpFromGrid(ByValgridAsDataGrid,ByValadorsAsADODB.Recordset,ByValpathAsString,ByValtitleAsString)AsBoolean'OnErrorResumeNextDimexlAppAsExcel.ApplicationDimExlBookAsExcel.WorkbookDimExlSheetAsExcel.WorksheetDimtRow,tColAsInteger'-----------保存文件'OnErrorGoToOnErrSetexlApp=NewExcel.ApplicationWithexlApp.Visible=False.SheetsInNewWorkbook=1EndWithSetExlBook=exlApp.Workbooks.AddSetExlSheet=ExlBook.Worksheets(1)WithExlSheet.Name=title.Cells(1,1)=title.Cells(2,1)=序号FortCol=0Togrid.Columns.Count-1.Cells(2,2+tCol)=grid.Columns.Item(tCol).CaptionNexttColadors.MoveFirsttRow=0DoWhileNotadors.EOF.Cells(2+tRow+1,1)=tRow+1FortCol=0Togrid.Columns.Count-1.Cells(2+tRow+1
本文标题:vb中mshflexgrid和datagrid的区别
链接地址:https://www.777doc.com/doc-2853979 .html