VB   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了vb.net – 将选中的行显示到另一个DataGridView中大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个DataGridView填充了DataTable.
我添加了一个checkBoxcolumn来选择一些行.

我的目标是仅将选定的行显示到另一个DataGridView中

我尝试使用SELEct并将结果添加到新的DataTable来完成此操作,但SELEct不起作用,因为缺少checkBoxcolumn.

这是我用来填充第一个DataGridView并添加checkBoxcolumn的代码:

Dim chk0 As New DataGridViewcheckBoxcolumn()
With chk0
    .AutoSizeMode = DataGridViewAutoSizecolumnMode.columnHeader
    .HeaderText = "Sel"
    .Name = "Sel"
End With
With Me.DataGridView1
    .columns.Clear()
    .Datasource = DT_Events
    .columns.Insert(0,chk0)
    .columns("Event").AutoSizeMode = DataGridViewAutoSizecolumnMode.AllCells
End With

然后,在检查了一些行之后,我尝试将选定的行显示到另一个DataGridView中:

Using DT_checked As DataTable = CType(Me.DataGridView1.Datasource,DataTablE).SELEct("Sel = 1").CopyToDataTable
    if DT_checked.Rows.Count > 0 Then
        With Me.DataGridView2
            .Visible = True
            .Datasource = DT_checked
        End With
    Else
        MsgBox("No rows to show",MsgBoxStyle.Critical,"Error")
    End If
End Using

我尝试了没有SELEct的代码,它没有显示checkBoxcolumn.
该怎么办
我怎么能这样做呢?

将行复制到新的DataTable是浪费的,因为两者之间唯一真正的区别是某个布尔值是True还是false.由于您绑定到DataTable,因此您只需更改每个DGV中显示的视图即可.

标题中显示的概念,显示已检查的行…与将代码尝试执行时将行复制到另一个控件不同.这将显示如何使用一个Datasource显示每个DGV中的某些行.

如果您的数据来自数据库,则可以在SQL中添加一列:

' Access version
Dim sql = "SELECT a,b,c,false AS SELEcted FROM SAMPLE"

这将为所有行添加一个初始化为false的布尔列,并将在DGV中显示为checkBox.

如果数据以其他方式进入DataTable,请手动添加列:

dtSample.columns.Add("SELEcted",GetType(Boolean))
dtSample.columns("SELEcted").DefaultValue = false

' we need to loop and set a value
' if you manually add a column
For Each r As DataRow In dtSample.Rows
    r("SELEcted") = false
Next

要在一个网格(或列表框或组合)中显示行,或者根据该值显示另一个网格,此代码将使用2个DataView.如果您正在使用视图,那么您经常需要随意更改RowFilter,因此请为表单创建一些全局:

Private dtSample As DataTable          ' base table for BOTH DGVs
Private dvsource As DataView           ' ALL or SELEcted = false view
Private dvDest As DataView             ' SELEcted only
...
' build datatable and add the SELEcted Row (if needed)
...
' create source DV as SELEcted = false
dvsource = New DataView(dtSample,"SELEcted=false","",DataViewRowState.CurrentRows)

' create SELECTED DV as SELEcted = True
dvSELEcted = New DataView(dtSample,"SELEcted=True",DataViewRowState.CurrentRows)

dgv1.Datasource = dvsource
dgv2.Datasource = dvSELEcted

dvsource是可选的.如果您希望在第一个DGV中显示所有行,那么您就是DataView(根据问题,这似乎是这种情况).

为了便于说明,设置此项以便在DGV1中检查项目时它们会“消失”(因为它们不再符合SELEcted = false标准),并自动出现在DGV2中(因为现在它们符合该标准.结果:

在底部DGV中未选中/未选中的行将滑回到顶部DGV.

这很经济.您不仅不必运行任何代码来向第二个DGV添加或移动行,而且您不会复制DataRows和新的DataTable来执行此操作.通过TaskManager(粗略但指示性),内存量与SELEcted Rows的变化大致相同;当手动复制它们时,它会在您创建包含相同相同数据的DataRows副本时慢慢爬行.

大佬总结

以上是大佬教程为你收集整理的vb.net – 将选中的行显示到另一个DataGridView中全部内容,希望文章能够帮你解决vb.net – 将选中的行显示到另一个DataGridView中所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。