将所有行从一个数据网格复制到另一个数据网格

本文关键字:数据 网格 数据网 一个 复制 另一个 | 更新日期: 2023-09-27 18:32:39

我正在尝试将所有选定的行从一个数据网格复制到另一个数据网格。以下是我到目前为止一直在尝试做的事情:

private void btnFeedbackSelectSupplier_Click(object sender, RoutedEventArgs e)
{
    dgFeedbackAddCost.SelectAll();
    IList list = dgFeedbackAddCost.SelectedItems as IList;
    IEnumerable<ViewQuoteItemList> items = list.Cast<ViewQuoteItemList>();
    //Example of how I want to access the data from the first datagrid and add it to
    //the second one.
    var item = (new ViewQuoteItemList
    {
        Item = items.Item,
        Supplier = items.Cost
    });
    //Example
    dgFeedbackSelectSupplier.Items.Add(item);
}

我的问题在这里:

var item = (new ViewQuoteItemList
{
    Item = items.Item,
    Supplier = items.Cost
});

我收到错误:

'System.Collections.Generic.IEnumerable' 不包含"项目"的定义,也没有扩展方法 接受类型第一个参数的"项目" 'System.Collections.Generic.IEnumerable' 可以找到(您是否缺少使用指令或程序集 参考?

现在我知道我做错了,只是我不知道我还能如何向你展示我想用代码片段实现的目标。

所以我的问题是,我如何能够从items转换访问该数据并将其添加到我的第二个数据网格的ViewQuoteItemList中?

将所有行从一个数据网格复制到另一个数据网格

您可以使用 LINQ 获取所有新项目:

var items2 = (from i in items
           let a = new ViewQuoteItemList { Item = i.Item, Supplier = i.Cost }
           select a).ToList();
foreach(var item in items2)
    dgFeedbackSelectSupplier.Items.Add(item);

这将满足您仅将所选行添加到数据表的需要。然后,如果您只想将它们加在一起,您可以合并 2 个数据表 - 然后将源重新绑定到第二个网格。

DataTable dt = new DataTable();
foreach (DataGridViewColumn column in dataGridView1.Columns)
    dt.Columns.Add(column.Name, column.CellType);
for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
{
     dt.Rows.Add();
     for (int j = 0; j < dataGridView1.Columns.Count; j++)
     {
         dt.Rows[i][j] = dataGridView1.SelectedRows[i].Cells[j].Value;
     }
 }

参考这里