模块里:Option Explicit
Private conn As ADODB.Connection
Private rs As ADODB.Recordset
窗体里:
Private Sub Form_Load()
Dim apppath As String
Dim dbfilename As String
Dim ConnectString As String
Dim i As Integer
Set conn = New ADODB.Connection
dbfilename = App.Path + "\item.mdb"
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbfilename & ";Persist Security Info=False;"
conn.Open ConnectString
conn.CursorLocation = adUseClientSet rs = New ADODB.Recordset
rs.Open "select 地图,怪物名称,等级,怪物类型,不可交易,不可重复,物品名称,重量,类型,伤害,延迟,距离,防御,性别,种族,职业,属性 from item where 职业 like '%药%'", conn, adOpenKeyset, adLockOptimistic
If rs.EOF Then
Exit Sub
End If
Set DataGrid1.DataSource = rs
End Sub这样运行一切正常~~
但是DataGrid1的部分列宽,我觉得不满意,而且我让他自动换行,我就在DaraGrid1属性里调整了“布局”的一些参数。然后再次运行, DataGrid1就空了!什么都没有!再改回来也不行。必须删除窗体上的DataGrid1,重新拖一个新的才行~再改,又空了!我这24小时了!就卡在这里。我的机器是Windows2000,XP下也这样, VB都是企业版,安装了ServicePack6的!DataGrid来自Windows\system32\MSDATGRD.OCX.有没有什么解决方法啊!!换别的Grid也行,但是一定要给我确实能用的代码。谢谢了~~~~

解决方案 »

  1.   

    该句conn.CursorLocation = adUseClient应该在放在conn.Open ConnectString连接之前,
      

  2.   

    我这边没有问题不行就代码设置吧
    DataGrid1.Columns("订单号").Width = 1200你可以使用MSHFlexGrid控件,直接记录集绑定
      

  3.   

    datagrid 的每一个列都要设置哦、
      

  4.   


    DataGrid1.Columns("订单号").Width = 1200就是用这种方法来设置DataGrid每一列的列宽,如果你在程序运时自己重新调整列宽,你可以在窗体关闭时加一些代码,将每列的列宽存入注册表或一个.inf文件中,下次再打开窗体就重新读取。
      

  5.   

    ........
    Do While DataGrid1.Columns.Count < rs.Fields.Count
    DataGrid1.Columns.Add DataGrid1.Columns.Count
    Loop
    For i = 0 To rs.Fields.Count - 1
    DataGrid1.Columns(i).DataField = rs.Fields(i).Name
    DataGrid1.Columns(i).Caption = rs.Fields(i).Name
    Next i
    Set DataGrid1.DataSource = rs