VB: DataGrid 的列可见问题
我在vb6 中 ,用DataGrid 构造了如下表格,共5列,分别为a1,b2,c3,d4,f5
+——————+—————+——————+————+—————+
|___a1_____|___b2___|____c3_____|__d4___|__f5____|
按钮1,要实现隐藏 a1, c3列,其他列可见,其初步代码为
Private Sub Command1_Click()
Me.DataGrid1.Columns("a1").Visible = False
Me.DataGrid1.Columns("b2").Visible = True
Me.DataGrid1.Columns("c3").Visible = False
Me.DataGrid1.Columns("d4").Visible = True
Me.DataGrid1.Columns("f5").Visible = True
End Sub
按钮2,要实现隐藏 b2, d4列,其他列可见,其初步代码为
Private Sub Command2_Click()
Me.DataGrid1.Columns("a1").Visible = True
Me.DataGrid1.Columns("b2").Visible = False
Me.DataGrid1.Columns("c3").Visible = True
Me.DataGrid1.Columns("d4").Visible = False
Me.DataGrid1.Columns("f5").Visible = True
End Sub
当我按了按钮1,再按按钮2,期望的结果应是"b2, d4列隐藏,其他列可见" ,但实际执行结果却是 f5列可见,其他列都隐藏了,如果你在网格上点击一下,网格的显示效果才和期望的一致。
为什么要点击一下才行啊?难道遇上bug了?还是有什么地方没处理好?
后来经过查看MSDN 关于DataGrid的帮助,尝试了几个属性的设置,最后终于找到解决办法,就是 LeftCol 属性。
LeftCol 属性:返回或设置一个整数,表示DataGrid 控件最左端的可见列,该属性在设计时是只读的。
如果设置 某列是否可见,vb会自动改变LeftCol 属性。
以上代码执行完Command1_Click()后 ,LeftCol = 1; 当继续执行Command2_Click(),LeftCol = 4,正好是f5列,所以第一个可见的列就是 f5。
要实现我期望的效果,代码改成以下,问题解决。
修改后的代码:
Private Sub Command1_Click()
Me.DataGrid1.Columns("a1").Visible = False
Me.DataGrid1.Columns("b2").Visible = True
Me.DataGrid1.Columns("c3").Visible = False
Me.DataGrid1.Columns("d4").Visible = True
Me.DataGrid1.Columns("f5").Visible = True
Me.DataGrid1.LeftCol = Me.DataGrid1.Columns("b2").ColIndex
End Sub
Private Sub Command2_Click()
Me.DataGrid1.Columns("a1").Visible = True
Me.DataGrid1.Columns("b2").Visible = False
Me.DataGrid1.Columns("c3").Visible = True
Me.DataGrid1.Columns("d4").Visible = False
Me.DataGrid1.Columns("f5").Visible = True
Me.DataGrid1.LeftCol = Me.DataGrid1.Columns("a1").ColIndex
End Sub
+——————+—————+——————+————+—————+
|___a1_____|___b2___|____c3_____|__d4___|__f5____|
按钮1,要实现隐藏 a1, c3列,其他列可见,其初步代码为
Private Sub Command1_Click()
Me.DataGrid1.Columns("a1").Visible = False
Me.DataGrid1.Columns("b2").Visible = True
Me.DataGrid1.Columns("c3").Visible = False
Me.DataGrid1.Columns("d4").Visible = True
Me.DataGrid1.Columns("f5").Visible = True
End Sub
按钮2,要实现隐藏 b2, d4列,其他列可见,其初步代码为
Private Sub Command2_Click()
Me.DataGrid1.Columns("a1").Visible = True
Me.DataGrid1.Columns("b2").Visible = False
Me.DataGrid1.Columns("c3").Visible = True
Me.DataGrid1.Columns("d4").Visible = False
Me.DataGrid1.Columns("f5").Visible = True
End Sub
当我按了按钮1,再按按钮2,期望的结果应是"b2, d4列隐藏,其他列可见" ,但实际执行结果却是 f5列可见,其他列都隐藏了,如果你在网格上点击一下,网格的显示效果才和期望的一致。
为什么要点击一下才行啊?难道遇上bug了?还是有什么地方没处理好?
后来经过查看MSDN 关于DataGrid的帮助,尝试了几个属性的设置,最后终于找到解决办法,就是 LeftCol 属性。
LeftCol 属性:返回或设置一个整数,表示DataGrid 控件最左端的可见列,该属性在设计时是只读的。
如果设置 某列是否可见,vb会自动改变LeftCol 属性。
以上代码执行完Command1_Click()后 ,LeftCol = 1; 当继续执行Command2_Click(),LeftCol = 4,正好是f5列,所以第一个可见的列就是 f5。
要实现我期望的效果,代码改成以下,问题解决。
修改后的代码:
Private Sub Command1_Click()
Me.DataGrid1.Columns("a1").Visible = False
Me.DataGrid1.Columns("b2").Visible = True
Me.DataGrid1.Columns("c3").Visible = False
Me.DataGrid1.Columns("d4").Visible = True
Me.DataGrid1.Columns("f5").Visible = True
Me.DataGrid1.LeftCol = Me.DataGrid1.Columns("b2").ColIndex
End Sub
Private Sub Command2_Click()
Me.DataGrid1.Columns("a1").Visible = True
Me.DataGrid1.Columns("b2").Visible = False
Me.DataGrid1.Columns("c3").Visible = True
Me.DataGrid1.Columns("d4").Visible = False
Me.DataGrid1.Columns("f5").Visible = True
Me.DataGrid1.LeftCol = Me.DataGrid1.Columns("a1").ColIndex
End Sub