各位:
   
    用vb编写程序时,对于数据的处理,特别是 来自数据库的数据,常用到类似表格的控件,我在“部件”添加了以下三个 Activex 控件:
   DataGrid控件
   MSFlexGrid 控件
   MSHFlexGrid 控件   虽然参阅了msdn 帮助,感到很生涩!但对这三个控件的用处、异同点不是太了解!
  
   请问,谁能比较通俗的解释一下!
 
    不胜感激!

解决方案 »

  1.   

    Microsoft Hierarchical FlexGrid (MSHFlexGrid) 控件对表格数据进行显示和操作。在对包含字符串和图片的表格进行分类、合并以及格式化时,具有完全的灵活性。当绑定到 Data 控件上时,MSHFlexGrid 所显示的是只读数据。
    说明
    可以将文本、图片,或者文本和图片,放在MSHFlexGrid 的任意单元中。Row 和 Col 属性指定了MSHFlexGrid 中的当前单元。程序员可以在代码中指定当前单元,也可以在运行时,使用鼠标或者方向键来对其进行修改。Text 属性引用当前单元的内容。
    如果单元的文本过长而不能在该单元中显示,而且 WordWrap 属性被设置为 True,那么文本就会换行到同一单元内的下一行。为了显示换行的文本,可能需要增加单元的列宽度(ColWidth 属性)或者行高度(RowHeight 属性)。
    可以用 Cols 和 Rows 属性来决定MSHFlexGrid 控件中的列数和行数。
    DataGrid说明
    该数据识别的DataGrid控件看起来与Grid控件类似。但是,您可以设置DataGrid控件的DataSource属性为一个Data控件,以自动填充该控件并且从Data控件的Recordset对象自动设置其列标头。这个DataGrid控件实际上是一个固定的列集合,每一列的行数都是不确定的。
    DataGrid 控件的每一个单元格都可以包含文本值,但不能链接或内嵌对象。可以在代码中指定当前单元格,或者用户可以使用鼠标或箭头键在运行时改变它。通过在单元格中键入或编程的方式,单元格可以交互地编辑。单元格能够被单独地选定或按照行来选定。
    如果一个单元格的文本太长,以致于不能在单元格中全部显示,则文本将在同一单元格内折行到下一行。要显示折行的文本,必须增加单元格的Column对象的Width属性和/或DataGrid控件的RowHeight属性。在设计时,可以通过调节列来交互地改变列宽度,或在Column对象的属性页中改变列宽度。
    使用DataGrid控件的Columns集合的Count属性和Recordset对象的RecordCount属性,可以决定控件中行和列的数目。DataGrid控件的可包含的行数取决于系统的资源,而列数最多可达32,767列。选择一个单元格,则ColIndex属性被设置,也就是选择了DataGrid对象的Columns集合中的一个Column对象。Column对象的Text和Value属性引用当前单元格的内容。使用Book属性能够访问当前行的数据,它能够提供对下一级Recordset对象中记录的访问。DataGrid控件中的每一列都有自己的字体、边框、自动换行、和另外一些与其他列无关的能够被设置的属性。在设计时,您可以设置列宽和行高,并且建立对用户不可见的列。您还能阻止用户在运行时改变格式。
    MSFlexGrid说明文本和图片可以同时或者单独放在 MSFlexGrid 的任何一个单元格中。Row 和 Col 属性指定了当前的 MSFlexGrid 单元格。程序员可以在代码中改变当前单元格,用户可以在运行时使用鼠标或者箭头键改变它。Text 属性提供了当前单元格内容的参考信息。如果单元格中的文本过长,无法全部显示在单元格的一行中,而且 WordWrap 属性被设置为 True,那么文本将回绕到同一单元格的下一行。如果需要显示被回绕的文本,需要增加单元的列宽(ColWidth 属性)或行高(RowHeight 属性)。使用 Col 和 Row 属性可以分别确定 MSFlexGrid 中列与行的个数。注意   在应用程序中使用 MSFlexGrid 之前,首先必须将 MSFlxGrd.ocx 文件添加到工程中。如果希望自动地将文件包含在过程之中,请将它放在 Autoload 文件中。在发布应用程序的时候,应该在用户的 Microsoft Windows System 目录下安装 MSFlxGrd.ocx 文件。关于如何在工程中添加 ActiveX 控件的详细说明,请参阅《Visual Basic 程序员指南》中的“标准 ActiveX 控件”。
      

  2.   


    谢谢!楼主的详细解答!    我要访问的数据库文件是 access 文件,它在我的系统的位置是固定的, X;\mysys\mydb.mdb ,也就是说安装盘符可能是 C; 或 D; ,其余路径是固定的 。
       
        我的问题是对该 库文件 mydb.mdb 中的两个用户表 tab1和tab2 中部分字段要绑定到同一个grid 控件,不知是否可行,要注意什么?
      

  3.   

    可以用sql的select * from 表1 inner join 表2 on 1=1把两个表连接为一个表,再把记录集绑定到grid控件就可以了
      

  4.   

    理解3个控件的本质,很简单的话去说DataGrid控件:不存在真实网格式,只是Recordset的反映,支持绑定,所以别妄想对它进行太多设置。在它上面的操作就是对Recordset的操作MSFlexGrid 控件:存在真实网格,但是不支持Recordset的绑定,只能把数据一个个读进自身网格,不支持编辑,不能直接对Recordset操作MSHFlexGrid 控件:MSFlexGrid 控件的加强版,支持绑定
      

  5.   

    谢谢daisy8675(莫依) 答复!你的答复,我比较明白了!我很喜欢!    1.我想用 Recordset 对象把数据读入到 datagrid 控件中,并按需要进行修改,并将对表中数据统计后将结果按规定格式编制业务专用的电码到 另一个textbox 控件中,但不希望在 datagrid 中对数据的操作反映到数据源上(就是不希望改变数据库文件的内容!)!
        这个可行吗?
      
        2.你所说的 "MSFlexGrid 控件只能把数据一个个读进自身网格",是指可以用 Recordset 对象把数据一个个读入到 MSFlexGrid 指定的单元格内吧???     对于我的问题,是用哪个控件好呢?
      

  6.   

    问题1:在ado的打开方式上,用批次打开就可。问题2:看你的能力能驾御哪个就用哪个
      

  7.   

    请问:daisy8675(莫依) (问题1:在ado的打开方式上,用批次打开就可。是什么意思?能详细解释一下吗?