VB6 datagrid控件 如何才能根据内容自动调整列宽?急!
RT我写了个代码(如下),但是显示出来的列宽还是没有根据内容来,有的太宽了又的太窄了。请高手帮忙!DimCurLenAsSingle,MaxLenAsSingle,ias...
RT
我写了个代码(如下),但是显示出来的列宽还是没有根据内容来,有的太宽了又的太窄了。请高手帮忙!
Dim CurLen As Single, MaxLen As Single,i as Integer
Dim CellLen(0 To 9) As Single
SqlStr1 = "select * from dbo.代码 where " & TjDm & TjPh & TjXh & TjDw
Set rs1 = cn1.Execute(SqlStr1)
If Not rs1.EOF Then
For i = 0 To rs1.Fields.Count - 1
CurLen = 0
MaxLen = LenB(StrConv(CStr(rs1.Fields(i).Name), vbFromUnicode)) * 120
rs1.MoveFirst
Do While Not rs1.EOF
If IsNull(rs1(i)) = True Then
CurLen = 0
Else
CurLen = LenB(StrConv(Trim(CStr(rs1(i).Value)), vbFromUnicode)) * 120
End If
If CurLen > MaxLen Then MaxLen = CurLen
rs1.MoveNext
Loop
CellLen(i) = MaxLen
Next
Set DataGrid1.DataSource = rs1
For i = 0 To rs1.Fields.Count - 1
DataGrid1.Columns(i).Width = CellLen(i)
Next
我的思路就是这样的,上面的代码也就是根据这个思路写出来的,可是调出来的列宽不对啊。。。。
=============================================
我用的是MSSQLServer,源文件发了还得弄数据库,麻烦,这段的代码就是上面那么写的。请大侠帮忙! 展开
我写了个代码(如下),但是显示出来的列宽还是没有根据内容来,有的太宽了又的太窄了。请高手帮忙!
Dim CurLen As Single, MaxLen As Single,i as Integer
Dim CellLen(0 To 9) As Single
SqlStr1 = "select * from dbo.代码 where " & TjDm & TjPh & TjXh & TjDw
Set rs1 = cn1.Execute(SqlStr1)
If Not rs1.EOF Then
For i = 0 To rs1.Fields.Count - 1
CurLen = 0
MaxLen = LenB(StrConv(CStr(rs1.Fields(i).Name), vbFromUnicode)) * 120
rs1.MoveFirst
Do While Not rs1.EOF
If IsNull(rs1(i)) = True Then
CurLen = 0
Else
CurLen = LenB(StrConv(Trim(CStr(rs1(i).Value)), vbFromUnicode)) * 120
End If
If CurLen > MaxLen Then MaxLen = CurLen
rs1.MoveNext
Loop
CellLen(i) = MaxLen
Next
Set DataGrid1.DataSource = rs1
For i = 0 To rs1.Fields.Count - 1
DataGrid1.Columns(i).Width = CellLen(i)
Next
我的思路就是这样的,上面的代码也就是根据这个思路写出来的,可是调出来的列宽不对啊。。。。
=============================================
我用的是MSSQLServer,源文件发了还得弄数据库,麻烦,这段的代码就是上面那么写的。请大侠帮忙! 展开
展开全部
自动调整列宽这个控件没有这个直接的功能,如果使用代码控制的话应该是可以达到的。
我说一下思路,具体代码就不写了,比较麻烦。给你说一下我的思路,你明白了自己根据实际情况编写代码吧。
整体调整查询的功能语句我不知道有没有,我只想到了逐条记录去判断。
1。从第一条记录开始,有多少个列就定义多少个变量,用来存储当前记录的字符个数,
2。然后逐条的读取一下各列的字符个数,然后以最大的那个数存在变量里。
最后全部读取一遍之后,变量所存储的就是最大列宽的字符个数了。你就根据这个字符个数,安照一定的比例代码设置各列的列宽。
你把源代码发 给我可以吗?我看看,
qq260210087
改完了,下面的代码你试试如何。注意新增加的变量,与我修改之后的逻辑
'*******************************
Dim CurLen As Single
Dim MaxLen As Single
Dim i As Integer
Dim CellLen(0 To 9) As Single
Dim tt(0 To 9) As Single '这里多一个数组,用来存放各列的临时宽度。
'SqlStr1 = "select * from dbo.代码 where " & TjDm & TjPh & TjXh & TjDw
'Set rs1 = cn1.Execute(SqlStr1)
If Not Rs1.EOF Then
Rs1.MoveFirst '这句没什么用,可以留着,可以删了。
'标题宽度先存储在宽度数组里。以下要对比判断用。
For i = 0 To Rs1.Fields.Count - 1
CellLen(i) = LenB(StrConv(CStr(Rs1.Fields(i).Name), vbFromUnicode)) * 120
Next
Do While Not Rs1.EOF
For i = 0 To Rs1.Fields.Count - 1
tt(i) = LenB(StrConv(Trim(CStr(Rs1(i).Value)), vbFromUnicode)) * 120
If tt(i) > CellLen(i) Then CellLen(i) = tt(i) '留下大的数字。
Next
Rs1.MoveNext
Loop
Set DataGrid2.DataSource = Rs1
For i = 0 To Rs1.Fields.Count - 1
DataGrid2.Columns(i).Width = CellLen(i)
Next
End If
我说一下思路,具体代码就不写了,比较麻烦。给你说一下我的思路,你明白了自己根据实际情况编写代码吧。
整体调整查询的功能语句我不知道有没有,我只想到了逐条记录去判断。
1。从第一条记录开始,有多少个列就定义多少个变量,用来存储当前记录的字符个数,
2。然后逐条的读取一下各列的字符个数,然后以最大的那个数存在变量里。
最后全部读取一遍之后,变量所存储的就是最大列宽的字符个数了。你就根据这个字符个数,安照一定的比例代码设置各列的列宽。
你把源代码发 给我可以吗?我看看,
qq260210087
改完了,下面的代码你试试如何。注意新增加的变量,与我修改之后的逻辑
'*******************************
Dim CurLen As Single
Dim MaxLen As Single
Dim i As Integer
Dim CellLen(0 To 9) As Single
Dim tt(0 To 9) As Single '这里多一个数组,用来存放各列的临时宽度。
'SqlStr1 = "select * from dbo.代码 where " & TjDm & TjPh & TjXh & TjDw
'Set rs1 = cn1.Execute(SqlStr1)
If Not Rs1.EOF Then
Rs1.MoveFirst '这句没什么用,可以留着,可以删了。
'标题宽度先存储在宽度数组里。以下要对比判断用。
For i = 0 To Rs1.Fields.Count - 1
CellLen(i) = LenB(StrConv(CStr(Rs1.Fields(i).Name), vbFromUnicode)) * 120
Next
Do While Not Rs1.EOF
For i = 0 To Rs1.Fields.Count - 1
tt(i) = LenB(StrConv(Trim(CStr(Rs1(i).Value)), vbFromUnicode)) * 120
If tt(i) > CellLen(i) Then CellLen(i) = tt(i) '留下大的数字。
Next
Rs1.MoveNext
Loop
Set DataGrid2.DataSource = Rs1
For i = 0 To Rs1.Fields.Count - 1
DataGrid2.Columns(i).Width = CellLen(i)
Next
End If
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询