我在搞一个学生的成绩管理系统。我的意图是有listbox显示所有的表,用鼠标点击任意个表的名字,在msflexgrid上显示这个表的内容。我的问题是:
1):msflexgrid可否根据不同的表的内容来,变换行和列的数目,如能的话应怎样实现;
2):如我要对某一表进行添加或删除,msflexgrid里面没有提供如add,delete之类的方法,我是否在data上进行操作;
不胜感激!!!!!!!!

解决方案 »

  1.   

    简单
    1.用Rst.Fields.Count得到表的字段数目,即可以然后定义表的列数(msflexgrid.cols=Rst.Fields.Count)
    用Rst.recordcount的到表的记录条数,来定义表的行数
    (msflexgrid.rows=Rst.recordcount)2.第一个实现了,这个就更简单了,先对数据库进行操作,然后用addItem和removeItem方法给表格添加行或删除行。
      

  2.   

    用msflexgrid控件,要用循环来显示数据,比较麻烦
    用datagrid控件,只要设定源就可以了,简单多了
      

  3.   

    当然可以,我给你一个我写的函数,你自己修改一下就可以用了Public Function RecordSum(rsDataSet As Object) As Long
        If Not TypeOf rsDataSet Is Recordset And Not TypeOf rsDataSet Is ADODB.Recordset Then Exit Function
        If rsDataSet.RecordCount > 0 Then
            rsDataSet.MoveLast
            rsDataSet.MoveFirst
        End If
        RecordSum = rsDataSet.RecordCount
    End FunctionPublic Sub DrawGrid(rsDataSet As Object, rsGrid As Object)
        If Not TypeOf rsDataSet Is Recordset And Not TypeOf rsDataSet Is ADODB.Recordset Then Exit Sub
        If Not TypeOf rsGrid Is MSFlexGrid Then Exit Sub
        rsGrid.Cols = rsDataSet.Fields.Count
        Dim fStr As String
        fStr = ""
        Dim I As Long
        For I = 0 To rsDataSet.Fields.Count - 2
            fStr = fStr & "<" & rsDataSet.Fields(I).name & "|"
        Next
        fStr = fStr & "<" & rsDataSet.Fields(I).name
        rsGrid.FormatString = fStr
        rsGrid.Rows = RecordSum(rsDataSet) + 1
        If rsGrid.Rows > 1 Then
            rsGrid.FixedRows = 1
        End If
        If RecordSum(rsDataSet) = 0 Then Exit Sub
    '    ///////////////////////////////////
        rsDataSet.MoveFirst
        Dim J As Long
        For J = 0 To RecordSum(rsDataSet) - 1
            For I = 0 To rsDataSet.Fields.Count - 1
                If I = 1 Or I = 2 Or I = 3 Then
                    rsGrid.ColWidth(I) = 567 * 5
                Else
                    rsGrid.ColWidth(I) = 567 * 2.4
                End If
                If rsDataSet.Fields(I).Type = adDate Or rsDataSet.Fields(I).Type = 8 Or rsDataSet.Fields(I).Type = adDBTimeStamp Then
                    If rsDataSet.Fields(I).Value >= 1 Then
                        rsGrid.TextMatrix(J + rsGrid.FixedRows, I) = IIf(IsNull(rsDataSet.Fields(I).Value), "", Format(rsDataSet.Fields(I).Value, "yyyy-mm-dd"))
                    Else
                        rsGrid.TextMatrix(J + rsGrid.FixedRows, I) = IIf(IsNull(rsDataSet.Fields(I).Value), "", Format(rsDataSet.Fields(I).Value, "Long Time"))
                    End If
                ElseIf rsDataSet.Fields(I).Type = 5 Then '//货币
                    rsGrid.TextMatrix(J + rsGrid.FixedRows, I) = IIf(IsNull(rsDataSet.Fields(I).Value), "", "¥" & Abs(rsDataSet.Fields(I).Value))
                Else
                    rsGrid.TextMatrix(J + rsGrid.FixedRows, I) = IIf(IsNull(rsDataSet.Fields(I).Value), "", rsDataSet.Fields(I).Value)
                End If
            Next I
            rsDataSet.MoveNext
        Next J
    End Sub
      

  4.   

    hehe .... 我来晚了。。他们已经给出了很好的解决方法。。
      

  5.   

    我用的是sstab控件我们是三年制这样的话就有六个学期设置sstab为6个选项页!点击一个查询对应表!