VB 读取datagrid光标所在行的记录(但不是一行的内容,就是想读取一个字段里的内容)?请高手们帮帮忙啊!
还有不能用手移动光标,程序运行后自动把光标移到第一条记录,然后读取第一条记录的内容(就读取第一条记录的某个字段的内容)本人不太会VB请高手们写的详细点(函数、对象的定义等...
还有不能用手移动光标,程序运行后自动把光标移到第一条记录,然后读取第一条记录的内容(就读取第一条记录的某个字段的内容)
本人不太会VB 请高手们写的详细点(函数、对象的定义等)
谢谢!!!!!
还有怎么把光标移动啊 ?就是移到下一条记录。用循环语句自动移动的话怎么用啊 ? 展开
本人不太会VB 请高手们写的详细点(函数、对象的定义等)
谢谢!!!!!
还有怎么把光标移动啊 ?就是移到下一条记录。用循环语句自动移动的话怎么用啊 ? 展开
展开全部
DataGrid控件在读取数据的时候,会发生读取数据不正确的情况,这是由于控件本身决定的,一般是用控件的DataGrid1_Click事件读取数据,为什么呢?经过昨天一天的探讨,知道了DataGrid控件的Row和Col值是不确定的,我读取过记录的Row和Col值,发现在控件拉动滚动条时,控件的Row和Col值的确是在发生变化的。
后来资料介绍,可以用控件的DataGrid1_RowColChange事件读取数据,但是这种读取数据的方法只能读取被点击的记录的字段值,而不能读取整个DataGrid控件显示的所有字段:
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Text1(0).Text = DataGrid1.Text
End Sub
在Text1(0).Text文本框显示的是你刚刚点击的记录字段值(注意只是一个字段的值),如果你认为用控件的Row和Col属性来读取,上面说过由于它的Row和Col值不确定,因此控件是不能支持这种读取方法。
那么有没有可以读取DataGrid控件的方法呢?有的:
方法1:用DataGrid控件的DataGrid1_Click事件单击事件读取,但是必须对读取记录进行双击:
Private Sub DataGrid1_Click()
Text1(0).Text = Adodc1.Recordset.Fields(0)
Text1(1).Text = Adodc1.Recordset.Fields(1)
Text1(2).Text = Adodc1.Recordset.Fields(2)
Text1(3).Text = Adodc1.Recordset.Fields(3)
Text1(4).Text = Adodc1.Recordset.Fields(4)
End Sub
方法2:用按钮的Command1_Click单击事件读取,方法是首先点击DataGrid控件的记录,然野数后再点击按钮:
Private Sub Command1_Click()
'判断是否选择了表中的一行
If Adodc1.Recordset.EOF = True Or Adodc1.Recordset.BOF = True Then
MsgBox "请选择要显示的行"
Exit Sub
End If
'读取数据
Text1(0).Text = Adodc1.Recordset.Fields(0)
Text1(1).Text = Adodc1.Recordset.Fields(1)
Text1(2).Text = Adodc1.Recordset.Fields(2)
Text1(3).Text = Adodc1.Recordset.Fields(3)
Text1(4).Text = Adodc1.Recordset.Fields(4)
End Sub
后来想到MSFlexGrid控件,既然DataGrid控件的Row和Col值是不确定的,那么MSFlexGrid控件的Row和Col值呢,这个不要我说,大家都清楚,它的Row和Col值是唯一的确定值,那么何不用MSFlexGrid控件?,因此我在一个窗体中加载了DataGrid和MSFlexGrid控件,添加了Adodc控件,链接了数据库和数据表,由于MSFlexGrid控件不雀脊孝支持Adodc数据源,必须添加Data数据源,这个想来大家都比我熟悉,好了闲话少说,窗体名称取作“DataGrid和MSFlexGrid控件读取数据的比较”添加了二组TextBox控件数组,分别是Text1(0).Text到Text1(4).Text和Text2(0).Text到Text2(4).Text,共同链接同样的数据源,然后添加了MSFlexGrid控件的MSFlexGrid1_Click事件,发现MSFlexGrid控件读取数据的能力比DataGrid控件强,而且MSFlexGrid控件能够修改控件的外观属性,制作出比较美观的控件外表,因顷稿此我认为如果仅仅是显示和读取数据用MSFlexGrid控件比较合理,下面是MSFlexGrid控件MSFlexGrid1_Click事件的代码:
Private Sub MSFlexGrid1_Click()
If Val(Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 6))) <> 0 Then
SID = Val(Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 6)))
Text2(0).Text = Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 1))
Text2(1).Text = Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 2))
Text2(2).Text = Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 3))
Text2(3).Text = Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 4))
Text2(4).Text = Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5))
End If
End Sub
注意:MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 6)是数据表值的ID字段值。
对了,在将MSFlexGrid控件和Data数据源绑定后在窗体的Form_Load事件中必须设定MSFlexGrid控件列的显示大小:
Private Sub Form_Load()
MSFlexGrid1.Cols = 7
With MSFlexGrid1
.ColWidth(0) = 0
.ColWidth(1) = 1500
.ColWidth(2) = 1500
.ColWidth(3) = 800
.ColWidth(4) = 800
.ColWidth(5) = 2200
.ColWidth(6) = 0
End With
End Sub
.ColWidth(0) = 0是不显示这个列,现在列一共定义了7个列。
其实我比较喜欢用MSFlexGrid控件,因为这个控件在随时可以更新控件显示内容,你可以通过编程的方法加载不同数据源的显示方法,同样你也可以用ADO通过代码来显示数据表中的数据。
后来资料介绍,可以用控件的DataGrid1_RowColChange事件读取数据,但是这种读取数据的方法只能读取被点击的记录的字段值,而不能读取整个DataGrid控件显示的所有字段:
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Text1(0).Text = DataGrid1.Text
End Sub
在Text1(0).Text文本框显示的是你刚刚点击的记录字段值(注意只是一个字段的值),如果你认为用控件的Row和Col属性来读取,上面说过由于它的Row和Col值不确定,因此控件是不能支持这种读取方法。
那么有没有可以读取DataGrid控件的方法呢?有的:
方法1:用DataGrid控件的DataGrid1_Click事件单击事件读取,但是必须对读取记录进行双击:
Private Sub DataGrid1_Click()
Text1(0).Text = Adodc1.Recordset.Fields(0)
Text1(1).Text = Adodc1.Recordset.Fields(1)
Text1(2).Text = Adodc1.Recordset.Fields(2)
Text1(3).Text = Adodc1.Recordset.Fields(3)
Text1(4).Text = Adodc1.Recordset.Fields(4)
End Sub
方法2:用按钮的Command1_Click单击事件读取,方法是首先点击DataGrid控件的记录,然野数后再点击按钮:
Private Sub Command1_Click()
'判断是否选择了表中的一行
If Adodc1.Recordset.EOF = True Or Adodc1.Recordset.BOF = True Then
MsgBox "请选择要显示的行"
Exit Sub
End If
'读取数据
Text1(0).Text = Adodc1.Recordset.Fields(0)
Text1(1).Text = Adodc1.Recordset.Fields(1)
Text1(2).Text = Adodc1.Recordset.Fields(2)
Text1(3).Text = Adodc1.Recordset.Fields(3)
Text1(4).Text = Adodc1.Recordset.Fields(4)
End Sub
后来想到MSFlexGrid控件,既然DataGrid控件的Row和Col值是不确定的,那么MSFlexGrid控件的Row和Col值呢,这个不要我说,大家都清楚,它的Row和Col值是唯一的确定值,那么何不用MSFlexGrid控件?,因此我在一个窗体中加载了DataGrid和MSFlexGrid控件,添加了Adodc控件,链接了数据库和数据表,由于MSFlexGrid控件不雀脊孝支持Adodc数据源,必须添加Data数据源,这个想来大家都比我熟悉,好了闲话少说,窗体名称取作“DataGrid和MSFlexGrid控件读取数据的比较”添加了二组TextBox控件数组,分别是Text1(0).Text到Text1(4).Text和Text2(0).Text到Text2(4).Text,共同链接同样的数据源,然后添加了MSFlexGrid控件的MSFlexGrid1_Click事件,发现MSFlexGrid控件读取数据的能力比DataGrid控件强,而且MSFlexGrid控件能够修改控件的外观属性,制作出比较美观的控件外表,因顷稿此我认为如果仅仅是显示和读取数据用MSFlexGrid控件比较合理,下面是MSFlexGrid控件MSFlexGrid1_Click事件的代码:
Private Sub MSFlexGrid1_Click()
If Val(Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 6))) <> 0 Then
SID = Val(Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 6)))
Text2(0).Text = Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 1))
Text2(1).Text = Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 2))
Text2(2).Text = Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 3))
Text2(3).Text = Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 4))
Text2(4).Text = Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5))
End If
End Sub
注意:MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 6)是数据表值的ID字段值。
对了,在将MSFlexGrid控件和Data数据源绑定后在窗体的Form_Load事件中必须设定MSFlexGrid控件列的显示大小:
Private Sub Form_Load()
MSFlexGrid1.Cols = 7
With MSFlexGrid1
.ColWidth(0) = 0
.ColWidth(1) = 1500
.ColWidth(2) = 1500
.ColWidth(3) = 800
.ColWidth(4) = 800
.ColWidth(5) = 2200
.ColWidth(6) = 0
End With
End Sub
.ColWidth(0) = 0是不显示这个列,现在列一共定义了7个列。
其实我比较喜欢用MSFlexGrid控件,因为这个控件在随时可以更新控件显示内容,你可以通过编程的方法加载不同数据源的显示方法,同样你也可以用ADO通过代码来显示数据表中的数据。
2011-05-20
展开全部
核心算法:
Form_Load()时或者程序运行时
.......
Adodc1.Recordset.MoveFirst '--获取DataGrid的第一行第一列元素
.......
如果你想将记录保存在Text中,例如控件Text1
只需 在Form_Load()时或者Command_Click()时
Set Text1.DataSource = Adodc1(你的ADO控件名称,这里暂为Adodc1)
Text1.DataField = "XXX" '---其中XXX为你数据库中表的某一元素/字段
PS:这样你的Text1中就显示当前光标所指的记录的某个字段的内容
你也可添加多个Text控件显示多个哗茄字段,我测试过了。
循旅芦敏环遍历获取数据,可以考虑加入延时程序,放慢光标的移动速度
.......
'--循环遍历DataGrid中的记录,你会看到光标在不停的往下移动,直拆枝到最后一条
For c = 0 To DataGrid1.Columns.Count - 1 '----Dim c As Integer
DataGrid1.Col = c
Next c
Adodc1.Recordset.MoveNext
Loop
.......
Form_Load()时或者程序运行时
.......
Adodc1.Recordset.MoveFirst '--获取DataGrid的第一行第一列元素
.......
如果你想将记录保存在Text中,例如控件Text1
只需 在Form_Load()时或者Command_Click()时
Set Text1.DataSource = Adodc1(你的ADO控件名称,这里暂为Adodc1)
Text1.DataField = "XXX" '---其中XXX为你数据库中表的某一元素/字段
PS:这样你的Text1中就显示当前光标所指的记录的某个字段的内容
你也可添加多个Text控件显示多个哗茄字段,我测试过了。
循旅芦敏环遍历获取数据,可以考虑加入延时程序,放慢光标的移动速度
.......
'--循环遍历DataGrid中的记录,你会看到光标在不停的往下移动,直拆枝到最后一条
For c = 0 To DataGrid1.Columns.Count - 1 '----Dim c As Integer
DataGrid1.Col = c
Next c
Adodc1.Recordset.MoveNext
Loop
.......
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Text1.Text = DataGrid1.Text
End Sub
Text1.Text = DataGrid1.Text
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询