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副本时慢慢爬行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |