我一直用的是datagrid控件,
请问我想在msflexgrid ,mshflexgrid中实现
1.奇偶行不同的背景颜色,表头不同的颜色,当前单元格又是另外一种颜色.
2.msflexgrid如何绑定显示一个记录集?如何实现对其基本的增删改操作?如何让一次只显示30条记录呢?
不好意思,内容实在太多,请贴源码或者发相关例子到  [email protected]!贴一下相关的datagrid中的操作.以便让各位少写些代码,'提数据事件
    Set conn = New Connection
    conn.CursorLocation = adUseClient
    conn.Open "联接字符串"                           ##########################################    Set RS = New Recordset
    
    RS.Open "SELECT * FROM 表", conn, adOpenStatic, adLockOptimistic
    '赋值给 DataGrid 表
    Set DataGrid1.DataSource = RS
    '表刷新
    DataGrid1.Refresh    '若绑定TextBox(数组):
    'Text1(0).DataField = 字段1
    'Text1(1).DataField = 字段2
    '.........
    Dim oText As TextBox 'TextBox
    For Each oText In Me.Text1
        Set oText.DataSource = RS
    Next
'添加事件和保存
    RS.AddNew
    '保存
    RS![字段a] = text1.Text
    RS![字段b] = text2.Text
    RS.UpdateBatch adAffectAll'删除
    RS.Delete
    '重新赋值给表
    RS.Requery
    Set DataGrid1.DataSource = RS
    DataGrid1.Refresh    '其他相关操作:
    '上一条
    If Not RS.BOF Then RS.MovePrevious
    If RS.BOF And RS.RecordCount > 0 Then
         '已到最后返回
         RS.MoveFirst
    End If
    '下一条
    If Not RS.EOF Then RS.MoveNext    '下一条
    If RS.EOF And RS.RecordCount > 0 Then
          '已到最后返回
          RS.MoveLast
    End If
    '第一条
    If Not RS.BOF Then RS.MoveFirst
    '最末
    If Not RS.EOF Then RS.MoveLast
_____________________________________________
这里没有问题1和问题2中关于限定显示记录数的代码?
再次表示感谢!解决立即送分!!!!

解决方案 »

  1.   

    1,
    VERSION 5.00
    Object = "{0ECD9B60-23AA-11D0-B351-00A0C9055D8E}#6.0#0"; "mshflxgd.ocx"
    Begin VB.Form Form1 
       Caption         =   "Form1"
       ClientHeight    =   3195
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   4680
       LinkTopic       =   "Form1"
       ScaleHeight     =   3195
       ScaleWidth      =   4680
       StartUpPosition =   3  '窗口缺省
       Begin MSHierarchicalFlexGridLib.MSHFlexGrid MSHFlexGrid1 
          Height          =   2775
          Left            =   240
          TabIndex        =   0
          Top             =   240
          Width           =   3975
          _ExtentX        =   7011
          _ExtentY        =   4895
          _Version        =   393216
          Rows            =   20
          Cols            =   20
          FixedCols       =   0
          HighLight       =   0
          FillStyle       =   1
          AllowUserResizing=   3
          _NumberOfBands  =   1
          _Band(0).Cols   =   20
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option ExplicitPrivate OldRow          As Long
    Private OldCol          As Long
    Private OldColor        As OLE_COLORPrivate Sub ColFlex()    Dim i           As Integer    With MSHFlexGrid1
            
            .FillStyle = flexFillRepeat
            For i = .FixedRows + 1 To .Rows - 1 Step 2
                .Row = i
                .Col = .FixedCols
                .ColSel = .Cols - 1
                .CellBackColor = vbInfoBackground
            Next i
        
        End With
        
    End SubPrivate Sub Form_Load()    OldRow = 0
        OldCol = 0
        OldColor = MSHFlexGrid1.BackColorFixed
        
        Call ColFlex
        
    End SubPrivate Sub Form_Resize()
        MSHFlexGrid1.Move Me.ScaleLeft, Me.ScaleTop, Me.ScaleWidth, Me.ScaleHeight
    End SubPrivate Sub MSHFlexGrid1_RowColChange()
        
        Dim NowRow              As Long
        Dim NowCol              As Long
        Dim NowColor            As OLE_COLOR
        
        NowCol = MSHFlexGrid1.Col
        NowRow = MSHFlexGrid1.Row
        NowColor = MSHFlexGrid1.CellBackColor
        
        MSHFlexGrid1.Col = OldCol
        MSHFlexGrid1.Row = OldRow
        MSHFlexGrid1.CellBackColor = OldColor
        
        MSHFlexGrid1.Col = NowCol
        MSHFlexGrid1.Row = NowRow
        MSHFlexGrid1.CellBackColor = vbRed
        
        OldCol = NowCol
        OldRow = NowRow
        OldColor = NowColor
        
    End Sub2,太晚了,明天再说
      

  2.   

    自己顶一下。
    goop2002谢谢,第二个问题回答出来就解贴,
    再次感谢!!!
      

  3.   

    2.msflexgrid如何绑定显示一个记录集?如何实现对其基本的增删改操作?如何让一次只显示30条记录呢?msflexgrid绑定需要一个MSRDC控件,设定MSRDC1控件的password和username属性,设定MSRDC1的DataSourceName为已有的数据源。设定msflexgrid控件的DataSource属性为MSRDC1。这样就实现了与数据库的绑定。增删改操作可用记录集来实现。
      

  4.   

    VERSION 5.00
    Object = "{0ECD9B60-23AA-11D0-B351-00A0C9055D8E}#6.0#0"; "MSHFLXGD.OCX"
    Begin VB.Form Form2 
       Caption         =   "双击网格cell设定当前rst对象位置"
       ClientHeight    =   9150
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   7905
       LinkTopic       =   "Form2"
       ScaleHeight     =   9150
       ScaleWidth      =   7905
       StartUpPosition =   3  'Windows Default
       Begin VB.ComboBox Combo1 
          Height          =   315
          Left            =   1080
          Style           =   2  'Dropdown List
          TabIndex        =   1
          Top             =   0
          Width           =   2055
       End
       Begin MSHierarchicalFlexGridLib.MSHFlexGrid MSHFlexGrid1 
          Height          =   8415
          Left            =   240
          TabIndex        =   0
          Top             =   480
          Width           =   5175
          _ExtentX        =   9128
          _ExtentY        =   14843
          _Version        =   393216
          Rows            =   0
          FixedRows       =   0
          FixedCols       =   0
          HighLight       =   0
          AllowUserResizing=   3
          _NumberOfBands  =   1
          _Band(0).Cols   =   2
       End
       Begin VB.Label Label1 
          Alignment       =   1  'Right Justify
          AutoSize        =   -1  'True
          Caption         =   "Page"
          BeginProperty Font 
             Name            =   "MS Sans Serif"
             Size            =   9.75
             Charset         =   0
             Weight          =   400
             Underline       =   0   'False
             Italic          =   0   'False
             Strikethrough   =   0   'False
          EndProperty
          Height          =   240
          Left            =   480
          TabIndex        =   2
          Top             =   0
          Width           =   495
       End
    End
    Attribute VB_Name = "Form2"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option ExplicitPrivate AdoConn         As New ADODB.Connection
    Private AdoRst          As New ADODB.Recordset
    Private Sub Combo1_Click()    Dim i               As Long
        
        AdoRst.AbsolutePage = Combo1.Text
        
        MSHFlexGrid1.Rows = 0
        
        For i = 1 To AdoRst.PageSize
        
            If Not AdoRst.EOF And Not AdoRst.BOF Then
            
                MSHFlexGrid1.Rows = i
                
                MSHFlexGrid1.TextMatrix(i - 1, 0) = AdoRst![OrderID]
                MSHFlexGrid1.TextMatrix(i - 1, 1) = AdoRst![ProductID]
                
                AdoRst.MoveNext
                
            Else
            
                Exit For
                
            End If
                
        Next i
        
    End SubPrivate Sub Form_Load()
        
        Dim i               As Long
        
        With AdoConn
            .CursorLocation = adUseClient
            .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB;Persist Security Info=False"
        End With
        
        With AdoRst
            .CursorLocation = adUseClient
            .CursorType = adOpenKeyset
            .LockType = adLockOptimistic
        End With
        
        AdoRst.PageSize = 30
        AdoRst.Open "Select * from [Order Details]", AdoConn
        
        Combo1.Clear
        For i = 1 To AdoRst.PageCount
            Combo1.AddItem i
        Next i
        Combo1.ListIndex = 0
           
    End Sub
    Private Sub MSHFlexGrid1_DblClick()    Dim i           As Integer
        Dim ls          As String
        
        With MSHFlexGrid1
            
            AdoRst.Filter = "[OrderID] = " & .TextMatrix(.Row, 0) & " AND [ProductID] = " & .TextMatrix(.Row, 1)        For i = 0 To AdoRst.Fields.Count - 1
                ls = ls & vbCrLf & AdoRst.Fields(i).Value
            Next i
            
            MsgBox ls
            
        End With
        
    End Sub
      

  5.   

    双击cell重新定位rst对象,有了当前rst,删除,修改就不难了吧
      

  6.   

    一次只显示30条记录
    可以用For 循环控制
    for i=1 to 30
       msflexgrid1.TextMatrix(i,0)=rs!字段1
       msflexgrid1.TextMatrix(i,1)=rs!字段2
    next i
      

  7.   

    同意楼上那位,不过我要说两句,得及时增加行
    一般是有两个For 语句结合起来写的。把下面这句放在第一个For的结尾就可以了。
    mshflexgrid1.rows=mshflexgrid1.rows+1
      

  8.   

    还有一个小问题.以下一段代码是将一个文本框放到cell中去,然后再将修改过的值送回文本框,
    Private Sub MSHFlexGrid1_EnterCell()
      With MSHFlexGrid1
        If .MouseRow = 0 Or .MouseCol = 0 Then
           Text1.Visible = False
           Exit Sub
        End If
        Text1.Text = ""
        Text1.Visible = False
        Text1.Top = .Top + .CellTop
        Text1.Left = .Left + .CellLeft
        Text1.Width = .CellWidth
        Text1.Height = .CellHeight
        Text1.Text = .Text
        Text1.Visible = True
        Text1.SetFocus
        Text1.SelStart = Len(Trim(Text1.Text))
      End With
    End SubPrivate Sub MSHFlexGrid1_LeaveCell()
       MSHFlexGrid1.Text = Text1.Text
    End SubPrivate Sub Form_Load()MSHFlexGrid1.Row = 1
    MSHFlexGrid1.Col = 1
    MSHFlexGrid1.AllowBigSelection = FalseEnd sub现在的问题是,我的text1初值是空的,但我一启动程序的时候,msflexgrid总是选中了某一行(没有规律),所以当我换个cell的时候,把这个空值赋给了一整行,所以那一行就清空了,
    怎么样让他不选中了,也就是没有焦点在mshflexgrid上呢?
    我修改过后的grid里的数据怎么回写到数据库里面呢???谢谢,麻烦大家了,解决了,我会再开贴谢大家的.
    谢谢!!!
      

  9.   

    1,form_load()/mshflexgrid装数据后,读取mshflexgrid的当前行/列/值
    2,sql语句,根据关键字段更新数据库
      

  10.   

    读取行/列值我试过了,对于我很不方便因为我所有的程序中共用的是一个GRID.
    也就是GRID要20多个表,这样重新赋值就比较困难.
    有没有什么方法让GRID启动时不需要选中某一行呢???先结贴吧,gpo2002能否在结贴后也告知呢??
    谢谢!!!
    留言或者有相关的例子发[email protected]再次感谢!!!