Datagridview如何将选定的行转换为自定义对象

时间:2014-05-07 14:11:39

标签: c# sql-server winforms

我在MSSQL数据库中使用c#winforms。 我在数据库“Pilots”中有表 ,我使用Pilots表中的数据填充datagridview“dgvPilots”。

dgvPilots.DataSource = Connection.dm.Pilots.ToList();

我启用了多选。 现在我需要从datagridview获取多选数据。 如何将多选行转换为“Pilots”对象并获取PilotsID。

我当前的错误是“无法将对象类型DataGridViewRow转换为类型”.Data.Pilots“...

我也尝试像这样投射

dgvPilots.SelectedRows.Cast<Pilots>().ToList();

但它返回DataGridViewRow项类型。

7 个答案:

答案 0 :(得分:16)

您将需要迭代集合并继续处理作为基础数据的DataBoundItem属性。

var pilots = new List<Pilots>(grid.SelectedRows.Count);

for(int index = 0; index < grid.SelectedRows.Count; index++)
{
   var selectedRow = grid.SelectedRows[index];
   var pilot = (Pilots)selectedRow.DataBoundItem;

   pilots.Add(pilot);
}

上面的代码展示了如何实现这一点,(我为代码提供了免费的语法错误)。

以下是DataBoundItem属性上的msdn文章:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewrow.databounditem(v=vs.110).aspx

答案 1 :(得分:5)

我不知道你的数据库结构是什么,但是

var selectedPilots = dgvPilots.SelectedRows.Cast<Pilots>().ToList();

是正确的方法。但是我怀疑Pilots在你的情况下是DataTable,你需要的是将这些项目投射到正确的Class类型 - 如果我必须拍摄,我&# 39; d说你有一个Pilot(单数)课程,你应该投入。

答案 2 :(得分:1)

List<int> indexes = DataGrid1.SelectedRows.Cast<DataGridViewRow>().Select(x => x.Index).ToList();

            foreach (i in indexes)
            {
                Pilots Pilot = (Pilots)DataGrid1.Rows[i].DataBoundItem;
            }

答案 3 :(得分:1)

这个简单的通用扩展方法是我一直使用的方法:

    public static List<T> ToList<T>(this DataGridViewSelectedRowCollection rows)
    {
        var list = new List<T>();
        for (int i = 0; i < rows.Count; i++)
            list.Add((T)rows[i].DataBoundItem);
        return list;
    }

使用:dgvPilots.SelectedRows.ToList<Pilots>()

答案 4 :(得分:1)

首先,等待三年的答案。

其次,请不要迭代。

var selectedPilots = 
            (from DataGridViewRow cada in dgvPilots.SelectedRows select cada.DataBoundItem)
            .Select(x => (Pilots)x).ToList();

答案 5 :(得分:0)

不确定这是否仍然有用,但是我发现了这一点:

IList<Pilots> pilots = (BindingList<Pilots>)((BindingSource)dataGridView1.DataSource).List; 

答案 6 :(得分:0)

这是您无需显式遍历SelectedRows即可完成的操作

dgvPilots.SelectedRows.Cast<DataGridViewRow>().Select(row => row.DataBoundItem as Pilots);

dgvPilots.SelectedRows.Cast<DataGridViewRow>().Select(row => (Pilots) row.DataBoundItem);