C# 使用DataGridView.SelectedRows作为另一个DataGridView的数据源
我想使用用户从一个DataGridView中选择的行作为第二个DataGridView的数据源。注意,两个DataGridView将具有相同的列 显然,我可以迭代选定的行,获取键值,并重新查询数据库,以获得一个列表,用作第二个网格的数据源,但这似乎是站不住脚的C# 使用DataGridView.SelectedRows作为另一个DataGridView的数据源,c#,winforms,datagridview,C#,Winforms,Datagridview,我想使用用户从一个DataGridView中选择的行作为第二个DataGridView的数据源。注意,两个DataGridView将具有相同的列 显然,我可以迭代选定的行,获取键值,并重新查询数据库,以获得一个列表,用作第二个网格的数据源,但这似乎是站不住脚的 当然有一种优雅的方法可以简单地将SelectedRows集合重新用作数据源?您不能直接将数据行的集合设置为数据源,您可以从 用传统的方式做(比特)怎么样 var dt = ((DataTable)dataGrid1.DataSource)
当然有一种优雅的方法可以简单地将SelectedRows集合重新用作数据源?您不能直接将
数据行的集合设置为数据源,您可以从
用传统的方式做(比特)怎么样
var dt = ((DataTable)dataGrid1.DataSource).Clone();
foreach (DataGridViewRow row in dataGrid1.SelectedRows)
{
dt.ImportRow(((DataTable)dataGrid1.DataSource).Rows[row.Index]);
}
dt.AcceptChanges();
dataGrid2.DataSource = dt;
另一种方法是使用
谢谢你的回复。似乎没有一个非常简单的方法
我是这样做的:
MyDatGridView.SelectedRows.Cast<DataGridViewRow>().Select(dgvr => (int)dgvr.Cells[0].Value).ToList());
MyDatGridView.SelectedRows.Cast().Select(dgvr=>(int)dgvr.Cells[0].Value.ToList());
然后我尝试将结果列表与.Where子句中的.Contains一起使用。SelectedRows
是一个没有通知的简单集合(与BindingSource
相比),因此在任何情况下,当事件发生更改时,您都必须处理它(由DataGridView
引发)至少要更新BindingSource
。我得到:无法将类型“System.Windows.Forms.DataGridViewSelectedRowCollection”隐式转换为“System.Data.DataRow[]”抱歉,我们的时区似乎不同。好吧,你可以做一个cast
。刚刚更新了我的答案,而且您已经有了使用linq的解决方案:)如果您已经有了DataRow
object fromDataGridViewRow
Asdt.ImportRow((DataRow)row.DataBoundItem),为什么要使用index代码>?
MyDatGridView.SelectedRows.Cast<DataGridViewRow>().Select(dgvr => (int)dgvr.Cells[0].Value).ToList());