none
vb.net2008中表格控件的问题 RRS feed

  • 问题

  • VB.NET2008中有哪种控件可以象vb6.0中MSFlexGrid控件一样,不需要绑定数据源,即可在程序里对它进行行列操作,用于在窗体上显示数据?

    2012年6月9日 9:00

答案

全部回复

  • 你直接使用DataGridView也可以,拖拽一个DataGridView到WinForm上,然后点击右上角的小箭头,弹出一个框框,点击“添加列”,随便添加若干列,然后点击确定,运行程序,直接就可以往里边随意添加数据了!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月9日 9:06
    版主
  • 首先感谢您的回答,因为DataGridView控件只能在运行的时候加载行的表格,所以当打开程序Load时,我用到三十六行一行一行的添加好象花了几秒种,而我使用Timer(Interval=100)首先就到取取设备的数据,以至更新的时候,因为行尚未建立而出错,但VB6的MsflexGrid是在设计的时候就可以设置行数,所以不会有问题,请问是否有更好的控件或办法呢?(MsflexGrid控件的缺点是不支持鼠标滚轮而且也不是.netframwork的控件),不想等到这么多的延迟再更新数据,而且给用户视觉上一种电脑慢呑呑的感觉,尽管这并非如此.


    2012年6月9日 14:51
  • 考虑到直接往DataGridView加数据不是很好的方案,建议你还是绑定数据源为好。

    【示例】

    Public class MyClass
      Public Property Value As String
    End Class
    
    '绑定代码
    Dim myclasses As New List(Of MyClass)
    '添加变量
    myclasses.Add(New MyClass With{.Value="a"})
    …………
    '绑定
    DataGridView1.DataSource = myclasses

    另外你用Timer加数据?怎么添加的?


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月9日 23:46
    版主
  • 您上面所说的这种绑定数据源的方法,我没有用过,看不太懂,您能详细一点地示例一下臂如,有一个字符串数组x(35),如何将它绑定到datagridview,让它在第三例以文本的方式显示出来?

    我原来做的是在窗体的Load事件中:

    DataGridView1.Rows.Add(36)

    在Timer的Tick事件中,更新datagrid行列的数据.

            For I As Integer = 0 To 35
                DataGridView1.Rows.Item(I).Cells(0).Value = I + 1

                ......

               DataGridView1.Rows.Item(I).Cells(3).Value =x(n+1)

               ......

            Next

    感谢您的指导!


    2012年6月10日 15:52
  • 为什么用Timer?我不懂你究竟要干什么?你不能一下子全部遍历然后赋值到dataGridView上吗?难道你的数组还是动态的?

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            '模拟5行数据
            For index = 1 To 5
                DataGridView1.Rows.Add(index, index)
            Next
    
        End Sub
    
        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            '静态局部变量
            Static number() As Integer = {5, 4, 3, 2, 1}
            '循环开始
            For index = 0 To 4
                '只改变第三列!
                DataGridView1.Rows(index).Cells(2).Value = number(index)
            Next
    
        End Sub
    
        Private Sub DataGridView1_Click(sender As Object, e As EventArgs) Handles DataGridView1.Click
            Timer1.Enabled = True
        End Sub
    End Class

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月11日 2:48
    版主
  • 是的,我的程序就是象你上边做的一模一样,得到的结果是在load事件时,窗体上显示的外观是,眼睛看到一行一行的表格在添加,表格添加完了,然后数据才会自动填充进去.(我用Timer的原因是我的数据来自监控的设备,设备上的数据更新速度快,所以将来设备端数据而声明的全局变量用Timer刷新datagridview),另外数组并非动态.数组的维数是datagridview的行数

    我是想麻烦您用你说的这种方法帮忙诠释,好象上面的示例一样:

    Public class MyClass
     
    Public Property Value As String
    End Class

    '绑定代码
    Dim myclasses As New List(Of MyClass)
    '添加变量
    myclasses
    .Add(New MyClass With{.Value="a"})
    …………
    '绑定
    DataGridView1
    .DataSource = myclasses





    2012年6月11日 3:38
  • 你不是不用数据绑定么?怎么用了?!

    >>DataGridView1.DataSource = myclasses

    另外,我关键部分都已经写注释啦!请你自己仔细看吧,好不?


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月11日 3:54
    版主
  • 谢谢大哥,我已经明白您的意思了
    2012年6月11日 8:18
  • 谢谢大哥,我已经明白您的意思了
    不用谢!如果可以的话请标记答案;否则请继续发问或者提供您的反馈意见。欢迎再来,互帮互助!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月11日 8:20
    版主
  • Public class MyClass
     
    Public Property Value As String
    End Class

    '绑定代码
    Dim myclasses As New List(Of MyClass)
    '添加变量
    myclasses
    .Add(New MyClass With{.Value="a"})
    …………
    '绑定
    DataGridView1
    .DataSource = myclasses


    请您继续帮解答一下,用您说的绑定数据源的方法,数据如何更新呢?按您的示例代码绑定数据源后,我不知道该如何在运行时内部数据来源的值发生改变后如何更新数据源的值(这也许就是我原来用Timer的真正原因),因为这个值是随时要更新并且显示的。


    2012年6月11日 10:11