有关msflexgrid的一个问题

nibo0021 2003-03-28 11:51:19
我在搞一个学生的成绩管理系统。我的意图是有listbox显示所有的表,用鼠标点击任意个表的名字,在msflexgrid上显示这个表的内容。我的问题是:
1):msflexgrid可否根据不同的表的内容来,变换行和列的数目,如能的话应怎样实现;
2):如我要对某一表进行添加或删除,msflexgrid里面没有提供如add,delete之类的方法,我是否在data上进行操作;
不胜感激!!!!!!!!
...全文
30 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xks 2003-04-01
我用的是sstab控件

我们是三年制

这样的话就有六个学期

设置sstab为6个选项页!

点击一个查询对应表!
回复
jessezappy 2003-03-31
hehe .... 我来晚了。。他们已经给出了很好的解决方法。。
回复
jessezappy 2003-03-29
1和2都可以实现!就是代码比较复杂,等我写一下看看,发给你看。
回复
2sword 2003-03-29
可以可以!!不过要写很多代码,因为你的表是不定的。
回复
hzybc 2003-03-29
用msflexgrid控件,要用循环来显示数据,比较麻烦
用datagrid控件,只要设定源就可以了,简单多了
回复
dragon525 2003-03-29
简单
1.用Rst.Fields.Count得到表的字段数目,即可以然后定义表的列数(msflexgrid.cols=Rst.Fields.Count)
用Rst.recordcount的到表的记录条数,来定义表的行数
(msflexgrid.rows=Rst.recordcount)

2.第一个实现了,这个就更简单了,先对数据库进行操作,然后用addItem和removeItem方法给表格添加行或删除行。
回复
oxfordxyc 2003-03-29
当然可以,我给你一个我写的函数,你自己修改一下就可以用了

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 Function

Public 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
回复
相关推荐
发帖

1187

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2003-03-28 11:51
社区公告
暂无公告