我用vb6.0+SQL Server 2000 作一个成绩管理系统
在数据库里有个成绩表我是这样设计的依次有这样几项
学号,姓名,课程名,成绩,说明
现在我想在一个控件里显示这样效果:
每一行显示一个学生的“学号”,“姓名”,还有各门功课的成绩
例如:
 学号    姓名   大学语文    普通物理  线性代数 ........
2000123  李某   78          89         67      .......
 .         .     .          .           .       .  
 .         .     .          .           .       .  
用什么控件比较好一点是datagrid 还是Msflexgrid 好一点
那位大哥教教小弟看应该怎么做,最好是详细一点

解决方案 »

  1.   

    选一个图片做窗体背景。表格画在上面。
    文字内容从数据库读出来,显示在窗体上特定位置(透明lable上)就可以了。这样比较简单,效果也不错。
      

  2.   

    差不多!个人喜好!
    datagrid支持和ado绑定,可以直接修改数据库,也可以在单元格内直接编辑
    mshflexgrid也支持与ado绑定,但是不支持直接修改数据库和直接编辑
      

  3.   

    两个都可以,就是编辑的时候MSFLEX麻烦点。
    如果想更好点的话,建议用其他的表格控件,如SPREAD,或者VASpread可以直接编辑
    接受很多额外的功能。
      

  4.   

    能不能教我怎样写这一段SQL代码
      

  5.   

    我不是想知道哪个控件功能强大
    而是想知道究竟应该怎样用SQL语句来实现
    我说的那种效果
    可能我开始问问题的时候没说清楚
    搞的大家把问题的重心搞错了
    现在纠正
      

  6.   

    select xh as 学号,xm as 姓名,Chinese as 大学语文,... from table where...楼主不就是要显示字段标题吗?用as语句搞定。
      

  7.   

    还没搞懂我的意思
    我的意思是我的数据库是这样的:
    第一个字段  student_ID
    第二个字段  student_name
    第三个字段  course_name 
    第四个字段   chenji
    在数据库里是这样显示的:
    student_id     student_name    course_name   chenji
    2003445        李某             大学语文      78
    2003446        王某             大学物理      76我现在想在一个datagrid或者mshflexgrid显示象我题目所描述的那种效果
    请问应该怎么做?????????????????
      

  8.   

    在fixedcols  和fixedrows都等于一  martrixtext(0,1)=student-id  matrixtext(0,2)=student-name ....照这样做  不知道对你有用吗
      

  9.   

    sql="select * from table order by student_id"
    rst.open sql,conn,1,3
    set dtgrid.datasource=rst
    dtgrid.refresh
      

  10.   

    这样可以吗?先填加表头,也就是上面的各个字段名
    dim cnn as adodb.connection
    cnn.open".........数据库"
    dim mrc as adodb.recordset
    mrc.open"select ......",cnn
       MSFlexGrid1.Rows = mrc.RecordCount + 1
           If mrc.RecordCount = 0 Then
                MSFlexGrid1.Rows = 2
           End If
                MSFlexGrid1.Cols = mrc.Fields.Count
                MSFlexGrid1.FixedRows = 1
             For i = 0 To mrc.Fields.Count - 1
                MSFlexGrid1.TextMatrix(0, i) = mrc.Fields(i).Name
            Next i
    到这里表头就填加好了。接下来就是往表里填加数据了
    If mrc.EOF = False Then
              With MSFlexGrid1
                   .Rows = 1
                   Do While Not mrc.EOF
                      .Rows = .Rows + 1
                      For i = 0 To mrc.Fields.Count - 1
                          .TextMatrix(.Rows - 1, i) = mrc.Fields(i) & ""
                      Next i
                      mrc.MoveNext
                   Loop
             End With
     End If
    这下你该满足了吧
    再有问题我帮你顶
    MSFLEXGRID不能个性的问题也好办你只需加上以下代码就OK
    先在通用里面声明如下两下变量
    dim wgridcol%,wgridrow%
    Private Sub msflexgrid1_RowColChange()
        WgridCol% = MSFlexGrid1.Col
        WgridRow% = MSFlexGrid1.Row
    End SubPrivate Sub msflexgrid1_KeyPress(KeyAscii As Integer)
        MSFlexGrid1.Col = WgridCol%
        MSFlexGrid1.Row = WgridRow%
         If KeyAscii = 8 Then 'keyascii=8为退格删除键
            If MSFlexGrid1.Text <> "" Then MSFlexGrid1.Text = Mid$(MSFlexGrid1.Text, 1, Len(MSFlexGrid1.Text) - 1) '除最后一个字符
            Else
               MSFlexGrid1.Text = MSFlexGrid1.Text + Chr$(KeyAscii)
            End If
    End Sub
    有了上面的代码一样也可能在表里面填加删除修改
      

  11.   

    到这里表头就填加好了。接下来就是往表里填加数据了
    dim mrcData as adodb.recordset
    mrcData.open"select ......where name=@name",cnn
    If not mrcData.EOF Then
              With MSFlexGrid1
                   .Rows = 1
                      .Rows = .Rows + 1
                      .TextMatrix(.Rows - 1, i) = mrcData.Fields(i) & ""
                      if not mrcData.Eof then
                       mrcData.MoveNext
                       else
                       exit sub
                       end if
             End With
     End If如果你会写存储过程就更简单了。
      

  12.   

    错了,
                With MSFlexGrid1
                      i = 2
                      i = i+ 1
                      .TextMatrix( 2, i) = mrcData.Fields(成绩)
                      if not mrcData.Eof then
                       mrcData.MoveNext
                       else
                       exit sub
                       end if
      

  13.   

    为什么不直接用ADO呢?直接用ADO的优点是:移植性好,不用改代码,只要改数据库的连接就可以改用其他数据库,如access等等。
      

  14.   

    用listview比较直观,看起来比较好看。
    用其它的数据库组件也有好处,一般要看你的数据量大不大,如果很大的话,还是用datagrid比较好,比较少的话,用listview比较好看。个人观点!
      

  15.   

    谢谢各位提点
    该问题已经解决
    现在又有个新问题
    我已经开贴希望那位仁兄不吝赐教,继续帮助我
    http://expert.csdn.net/Expert/topic/1813/1813947.xml?temp=.2555963