求助,我用sql2000+vb做了一个交费程序,用2个datagrid显示2个表:用户信息表,交费记录表。 表如下:  
用户信息表                                 交费记录表  
id    name     address               id   year   cash(元) re  
1     李         长春                     1    2005   50        已交  
2     张         长春                     1    2006   0         未缴  
3     钱         北京                     2    2005   30      已交     
                                           2    2006   40      已交  
程序应该是这样的运行的: 
datagrid1 
  id    name     address                
^ 1     李         长春     ----点击一次datagrid1这一行datagrid2应该出现下面 datagrid2 
        id   year   cash(元) re  
         1    2005   50        已交  
          1    2006   0         未缴  
  
但是现在是点击  ^ 时,程序正常.
但是要是点击一次姓名(name)或者地址(address)时显示的上一个记录的信息,必须再点一次才能正确显示
 
datagrid1 
  id    name     address                
^ 2     张        长春     ----点击一次datagrid1中的name或者address则datagrid2还显示上一次的信息 datagrid2 显示如下:
        id   year   cash(元) re  
         1    2005   50        已交  
          1    2006   0         未缴 
 
只有再点一次才能显示出正确数据 
              id   year   cash(元) re  
             2    2005   30      已交     
               2    2006   40      已交  
  
那位高人帮看看到底差再那里? 感激不尽!! 
程序如下: 
Private Sub DataGrid1_Click() 
    '判断表格控件中的记录数是否为空 
   If Adodc1.Recordset.RecordCount  < > 0 Then 
       '将对应记录合同编号字段的值赋给全局变量htbh 
      htbh = DataGrid1.Columns("0").Text 
   End If 
Adodc2.ConnectionString = connectstring 
Adodc2.CommandType = adCmdText 
Adodc2.RecordSource = "select  id ,year,cash,re from   UserData  where id = '" & htbh & " '" 
Adodc2.Refresh 
Set DataGrid2.DataSource = Adodc2 
DataGrid2.ReBind 
End Sub 
Adodc1对应DataGrid1 
Adodc2对应DataGrid2 
剩下的分再这里
http://topic.csdn.net/u/20071019/21/ad50d46a-019a-4c92-accf-a2392097fba5.html

解决方案 »

  1.   

    htbh = DataGrid1.Columns("0").Text  我觉得可能是在这一行有问题,你指定了列,但没有指定行,所以很可能是在控件焦点切换时丢失了行的数值,而默认始终是第一行.
      

  2.   

    Adodc2.Refresh  放在DataGrid2.ReBind   下面试试
      

  3.   

    to yaozha 
    Adodc2.Refresh  放在DataGrid2.ReBind   下面试试 
    问题还是存在。to xghim 
    htbh = DataGrid1.Columns("0").Text 
    这条语句只是为了获得每一行的第一列的数字,用这个数字去找DataGrid2中的对应的数据
      

  4.   

    htbh 的获得方法有问题,你这种方法不提倡。
    应该通过与datagrid1绑定的数据集来获得这个值(假设为recordset1),应该是:
    htbh = recordset1.fields("id").value
    因为datagrid1是和recordset1绑定的,所以记录的选择是同步的。
    还有,你最好把你的代码写在recordset1的某个适当事件中,而不是现在的datagrid1的click事件。
      

  5.   

    我好苯哦,连htbh = DataGrid1.Columns("0").Text  这样的语句都不能理解?我以前可能也遇到你这样的问题,所以我的建议是把行数也取出来放在变量里,通过行和列的绝对值来取值,这样可能可以解决问题.
      

  6.   

    to xghim  
    我不是那个意思。对不起了,可能是我的语言组织有问题,令你误会了,向你道歉可是,我不知道怎么把行数取出来,要不也不会用这么笨的方法了to yuvotesyg518 多谢你的建议“你最好把你的代码写在recordset1的某个适当事件中”
    程序中确实是需要点击一次datagrid1这一行datagrid2相应的数据出现下面  某个适当事件是指什么样的事件,能举一下例子吗?
      

  7.   

    现在的问题是,我必须得点击2次datagrid1的单元格才能够在datagrid2看到相应数据
    如果只点击一次的话就是上一次的数据
      

  8.   

    比如MoveComplete 事件,表示当前记录从一条记录变成了另一条记录。
    我不知道你用的是ado的组件还是那个adodc控件,但都应该会有相应的事件的。
      

  9.   

    弄好了,谢谢大家to xghim   
    实在是不好意思,令你误会了,再次向你道歉to yuvotesyg518多谢你的指教 请你到这里来发个帖子,我给你分,也好结贴http://topic.csdn.net/u/20071019/21/ad50d46a-019a-4c92-accf-a2392097fba5.html