太感谢gzbandit了,这个问题纠结了我很久了,数据库中的字段类型是没有问题,我用的是数据绑定的方式到c1flexgrid上,但始终解决不了这个问题,绑定之后,强制转换为val类型也不能。 不进行数据绑定,将数据表按行、按列读取出来,请放到表格中去,再排序就可以了。 with c1flexgrid1 .Rows.Count = Db.Rows.Count + 1 .Cols.Count = Db.Columns.Count + 1 For i = 0 To .Rows.Count For j = 0 To .Cols.Count If j = 2 Then .Rows(i + 1)(j + 1) = Db.Rows(i)(j) Else .Rows(i + 1)(j + 1) = IIf(Val(Db.Rows(i)(j)) = 0, "", Val(Db.Rows(i)(j))) End If Next Next .TopRow = 1 end with
正常情况下,数据库里也有一些字段是字符型数字,比如学号或手机号,它们往往是字符型或文本型,它们一样也能排序,不会出现你那种情况。
我看了你的提问后,我建立一个空的vsflexgrid,然后在grid输入带引号的数字,比如"1"、"11"、"4"、"2",再排序,便出现你那种奇怪的现象。
"4"
"2"
"11"
"1"
这种情况,需要你预处理字符了,不然,你解决不了排序问题吧。
如果你的数据保存在数据库里,你先在数据库里查看它们的数据类型,通过sql语句排序,看结果是什么。 我估计,十有八九,你的数据有问题。在装入vsflexgrid前,把它转换成数字型吧,再排序,不会有什么奇怪问题。
正常数字(不管是字符型数字型),排序不会有什么奇怪现象。
比如,你在空的c1flexgrid输入前后带空格的数字,再排序,就会象你那样了。
4
2
11
1
不进行数据绑定,将数据表按行、按列读取出来,请放到表格中去,再排序就可以了。
with c1flexgrid1
.Rows.Count = Db.Rows.Count + 1
.Cols.Count = Db.Columns.Count + 1 For i = 0 To .Rows.Count
For j = 0 To .Cols.Count
If j = 2 Then
.Rows(i + 1)(j + 1) = Db.Rows(i)(j)
Else
.Rows(i + 1)(j + 1) = IIf(Val(Db.Rows(i)(j)) = 0, "", Val(Db.Rows(i)(j)))
End If
Next
Next
.TopRow = 1
end with