C# 使用DataGridView.SelectedRows作为另一个DataGridView的数据源

C# 使用DataGridView.SelectedRows作为另一个DataGridView的数据源,c#,winforms,datagridview,C#,Winforms,Datagridview,我想使用用户从一个DataGridView中选择的行作为第二个DataGridView的数据源。注意,两个DataGridView将具有相同的列 显然,我可以迭代选定的行,获取键值,并重新查询数据库,以获得一个列表,用作第二个网格的数据源,但这似乎是站不住脚的 当然有一种优雅的方法可以简单地将SelectedRows集合重新用作数据源?您不能直接将数据行的集合设置为数据源,您可以从 用传统的方式做(比特)怎么样 var dt = ((DataTable)dataGrid1.DataSource)

我想使用用户从一个DataGridView中选择的行作为第二个DataGridView的数据源。注意,两个DataGridView将具有相同的列

显然,我可以迭代选定的行,获取键值,并重新查询数据库,以获得一个列表,用作第二个网格的数据源,但这似乎是站不住脚的


当然有一种优雅的方法可以简单地将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 from
DataGridViewRow
As
dt.ImportRow((DataRow)row.DataBoundItem),为什么要使用index
MyDatGridView.SelectedRows.Cast<DataGridViewRow>().Select(dgvr => (int)dgvr.Cells[0].Value).ToList());