vb.net连接数据库后,运行程序时如何让DataGridView1不显示数据库表的数据,当点击显示下一行按钮,DataGridView1就显示表的第一行数据,再点击下一行就显示下一行数据,DataGridView1只显示一行数据。上一行同理,求大神教。

解决方案 »

  1.   

    用sqldataadapter查出数据填充到datatable1里。
    然后,定义一个变量rowno作为行号,上一行/下一行 这两个按钮的点击事件里
    定义一个临时 datatable2
    dim datatable2 as datatable=datatable1.clone '复制表结构
    datatable2.rows.add(datatable1.rows(rowno).itemarray) '复制rowno对应行的数据
    datagridview1.datasource=datatable2  //把这个临时datatable绑定到datagridview上因为你这个需求有点特殊,其实一般不会这么做,而是通过设置dataview的filter属性来筛选datatable的内容,再将datagridview的数据源设置为这个dataview。如果你能按行号去筛选,也可以尝试一下dataview的做法。
      

  2.   

    dataview的filter属性来筛选的话应该怎么填,表的所有列都在。。
      

  3.   

    因为对LINQ不熟,所以没有介绍。我写了几个示例,可以作为参考
            Dim dtSource As New DataTable   'dtSource是需要绑定到datagridview的datatable,作为示例。
            With dtSource.Columns                  '建表结构,填数据
                .Add("col1")
                .Add("col2")
                .Add("col3")
            End With
            dtSource.Rows.Add({"r1c1", "r1c2", "r1c3"})
            dtSource.Rows.Add({"r2c1", "r2c2", "r2c3"})
            dtSource.Rows.Add({"r3c1", "r3c2", "r3c3"})
            dtSource.Rows.Add({"r4c1", "r4c2", "r4c3"})        'DefaultView是datatable的默认视图,当需要同时展示同一张表的不同
            '内容时也可以自己定义几个DataView。
            '这个筛选示范的是 应用一个 col1 = "r3c1" 的筛选到DefaultView。
            '如果这儿有办法直接按行号筛选,就可以写在这
            'dtSource.DefaultView.RowFilter = "col1='r3c1'"        '绑定视图到DataGridView
            'DataGridView1.DataSource = dtSource.DefaultView
            '如果没找到按行号筛选的办法,可以有两个办法
            '办法1,查询的时候,添加上行号(确定好排序规则)
            'SQL语句类似于 '        'select *,
            'ROW_NUMBER() over (order by 排序字段 asc) as RowNo 
            'from devices        '别的操作都和上面一样。
            'DefaultView.RowFilter = "RowNo = " & 记录行号的变量
            '然后绑定        '方法2,正常查询,得到dtSource后,再增加一列,遍历每一行,把行号赋给这一列
            dtSource.Columns.Add("RowNo")
            Dim rowno As Integer = 0
            For Each dr As DataRow In dtSource.Rows
                rowno += 1
                dr("RowNo") = rowno
            Next
            dtSource.DefaultView.RowFilter = "RowNo=3"
            DataGridView1.DataSource = dtSource.DefaultView
      

  4.   

    上面的还是太罗嗦了,不过做法并没有问题。刚才试了一下LINQ,一句话就可以把数据从datatable里抽出来。        Dim dtSource As New DataTable
            With dtSource.Columns
                .Add("col1")
                .Add("col2")
                .Add("col3")
            End With
            dtSource.Rows.Add({"r1c1", "r1c2", "r1c3"})
            dtSource.Rows.Add({"r2c1", "r2c2", "r2c3"})
            dtSource.Rows.Add({"r3c1", "r3c2", "r3c3"})
            dtSource.Rows.Add({"r4c1", "r4c2", "r4c3"})        '下面两句等效,Skip方法的参数,表示需要跳过多少条以后,然后在剩下的序列里,Take第1条。
            'DataGridView1.DataSource = dtSource.AsEnumerable.Skip(1).Take(1).CopyToDataTable()
            DataGridView1.DataSource =
                (From r In dtSource Select r).Skip(1).Take(1).CopyToDataTable()