用Formal One 很容易实现这个需求!!

解决方案 »

  1.   

    对 Hierarchical FlexGrid 中的数据进行合并与排序
    在本节的应用方案介绍了如何对 Hierarchical FlexGrid 中的数据进行排序和合并。在大多数情况下,可以通过将数据库下载到 Hierarchical FlexGrid 的方式来访问数据。不过,在这里示例数据通过“代码编辑器”窗口填写到 Hierarchical FlexGrid 的行与列中。要建立数据显示 设置 Hierarchical FlexGrid 的各种属性。
    建立数据。
    定义各种子程序,以计算索引值和进行排序。
    定义子程序,将数据(来自第二步)填入 Hierarchical FlexGrid。
    允许控件切换到数据组织视图。 
    要完成本方案,请依次执行本节中的各个步骤。设置控件的各种属性
    使用下表中的设置值,设置列数与行数、字体信息,并为 Hierarchical FlexGrid 创建列标头。MSHFlexGrid 控件属性 设置值 
    Name Fg1 
    Cols 4 
    Rows 20 
    MergeCells 2 – Restrict Rows 
    FormatString <Region |<Product |<Employees |>Sales 
    FontName Arial 
    数据的排序与合并
    使用下面的过程完成 Hierarchical FlexGrid 中的数据排序与合并。排序与合并数据 创建一个数组用来存储数据。为此,首先在“代码编辑器”窗口的 Form_Load 事件中加入下面的子程序: 
    Sub Form_Load ()
    Dim I As Integer
    '创建数组。
    For i = Fg1.FixedRows To Fg1.Rows - 1
    '地区。
    Fg1.TextArray(fgi(i, 0)) = RandomString(0)
    '产品。
    Fg1.TextArray(fgi(i, 1)) = RandomString(1)
    '雇员。
    Fg1.TextArray(fgi(i, 2)) = RandomString(2)
    Fg1.TextArray(fgi(i, 3)) = _
    Format(Rnd * 10000, "#.00")
    Next'设置合并。
    Fg1.MergeCol(0) = True
    Fg1.MergeCol(1) = True
    Fg1.MergeCol(2) = True'排序以查看效果。
    DoSort
    ' Format Grid
    Fg1.ColWidth(0) = 1000
    Fg1.ColWidth(1) = 1000
    Fg1.ColWidth(2) = 1000
    Fg1.ColWidth(3) = 1000End Sub
    计算一个索引并完成排序。要这样做,请定义一个例程来计算索引并排序。该索引时同 TextArray 属性一起使用来对数据排序。插入下列例程计算索引: 
    Function Fgi (r As Integer, c As Integer) As Integer
    Fgi = c + Fg1.Cols * r
    End FunctionSub DoSort ()
    Fg1.Col = 0
    Fg1.ColSel = Fg1.Cols - 1
    Fg1.Sort = 1    '一般为升序。
    End Sub
    将数据输入到您的 Hierarchical FlexGrid。要这样做,请定义一个例程使用示例数据充填 Hierarchical FlexGrid: 
    Function RandomString (kind As Integer)
    Dim s As String
    Select Case kindCase 0    '地区。
    Select Case (Rnd * 1000) Mod 5
    Case 0: s = "1. Northwest"
    Case 1: s = "2. Southwest"
    Case 2: s = "3. Midwest"
    Case 3: s = "4. East"
    Case Else: s = "5. Overseas"
    End SelectCase 1    '产品。
    Select Case (Rnd * 1000) Mod 5
    Case 0: s = "1. Chai"
    Case 1: s = "2. Peppermint"
    Case 2: s = "3. Chamomile"
    Case Else: s = "4. Oolong"
    End SelectCase 2    '雇员。
    Select Case (Rnd * 1000) Mod 4
    Case 0: s = "Clare"
    Case 1: s = "Tiffany"
    Case 2: s = "Sally"
    Case Else: s = "Lori"
    End Select
    End Select
    RandomString = s
    End Function
    如果在此时运行工程,则将显示窗体如下:接着,您需要允许用户重新组织数据。也就是说,您必须允许 Hierarchical FlexGrid 切换数据组织视图。通过添加下列例程重新组织数据,该例程将列拖动到新的位置。当用户按下鼠标按钮来触发 MouseDown 事件时,该例程用 Tag 属性保存列数目: 
    Sub Fg1_MouseDown (Button As Integer, _
    Shift As Integer, X As Single, Y As Single)
    Fg1.Tag = ""
    If Fg1.MouseRow <> 0 Then Exit Sub
    Fg1.Tag = Str(Fg1.MouseCol)
    MousePointer = vbSizeWE
    End Sub添加下列例程以重新调整,当用户释放鼠标按钮触发 MouseUp 事件时,该例程重新调整列并将数据排序: 
    Sub Fg1_MouseUp (Button As Integer, Shift As _
    Integer, X As Single, Y As Single)
    MousePointer = vbDefault
    If Fg1.Tag = "" Then Exit Sub
    Fg1.Redraw = False
    Fg1.ColPosition(Val(Fg1.Tag)) = Fg1.MouseCol
    DoSort
    Fg1.Redraw = True
    End Sub一旦完成了该方案中的过程,则当您在运行时无论合适将列拖动到新位置时,数据都重新组织。例如,如果您将 Employee 列拖动到左边,它将会以如下方式出现:
      

  2.   

    To:wei97081116(韦小宝)请查收邮件
      

  3.   

    to netcar
    我是这个意思
    +---+---+            +------+-----+
    |  1|  1|            |            |
    +---+---+    ===〉   |      1     |
    | 1 |  1|            |            |
    +---+---+            +------+-----+
      

  4.   

    用FlexGrid控件好像不好达到目的
    用MSHFlexGrid控件,它在对包含字符串和图片的表格进行分类、合并及格式化时,具有完全的灵活性。但要讲得更具体点就太麻烦了。我只能给你一个提示,自己找找这个控件的资料吧
      

  5.   

    用MSHFlexGrid是对的。关键的用法是MsHFlexGrid.MergeCells = RestrictRows '2
    MsHFlexGrid.MergeCol(0) = True
    查一查帮助里MergeCol的用法吧。Copy那么多帮助有什么用呢?
      

  6.   

    to : hongtao924(浮云) bisc_sunny(中子) 
    还是不对 :( 
    m_grid.SetRows(10);
    m_grid.SetCols(0,10);
    m_grid.SetFixedRows(2);
    m_grid.SetFixedCols(2);
    //
    m_grid.SetMergeCells(2);
    m_grid.SetMergeCol(0,true);
    m_grid.SetMergeCol(1,true);
    m_grid.SetMergeRow(0,true);
    m_grid.SetMergeRow(1,true);
    //
    m_grid.SetRow(0);
    m_grid.SetCol(0);
    m_grid.SetText("123");
    m_grid.SetRow(0);
    m_grid.SetCol(1);
    m_grid.SetText("123");
    m_grid.SetRow(1);
    m_grid.SetCol(0);
    m_grid.SetText("123");
    m_grid.SetRow(1);
    m_grid.SetCol(1);
    m_grid.SetText("123");
      

  7.   

    我说一个简单的例子。不用写代码,希望能给你一点帮助。
    我介绍用数据环境设计器创建一个层次结构,作为MSHFlexGrid控件的显示对象。
    1、添加一个DATA ENVIRONMENT(数据环境设计器),点击CONNECTION->属性,建立数据连接,如NWIND.MDB。然后给CONNECTION添加COMMAND对象。
    2、创建CUSTOMERS表和ORDER表之间的一个关系层次结构。这两个表是一对多的关系。后者的每个定单都对应着前者的一个客户。
    3、数据源面板定义COMMAND对象的数据源,选择表->CUSTOMERS。
    4、选择“添加子命令“,创建CUSTOMERS COMMAND对象的子COMMAND对象,它的数据源选为“ORDERS“。
    5、在属性对话框中选择“关联“标签,在“父命令“框中选择CUSTOMERS COMMAND对象,在关联定义面板的父字段和子字段/参数都选择为CUSTOMERID对象,单击“添加“,这时创建的关联出现在下面的文本框中。这时我们就建立好了COMMAND对象的层次结构
    6、把MSHFLEXGRID控件的DATASOURCE属性赋给数据环境即DATAENVIRONMENT1。最后关键的一步在快捷菜单中选择"检索结构“,这时在此控件中出现了COMMAND对象的层次结构。
    7、运行工程,就可以清楚的从窗体中查看建立的层次结构了。我说太麻烦了嘛。你最好去找这个控件的帮助看看。我这里没有这个控件的代码。所以
      

  8.   

    What i said is MSHFlexGrid, MSFlexGrid Do not support Merge cells.I have no chinese input method, sorry