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

8

我使用C# WinForms和MSSQL数据库。我有一个名为“Pilots”的数据库表,我用来填充数据网格视图“dgvPilots”。

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

我启用了多选。 现在我需要从数据网格视图中获取多个选择的数据。 如何将多行选择的行强制转换为“Pilots”对象并获得PilotsID。

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

我还尝试像这样进行转换

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

但它返回的是DataGridViewRow类型的项。

请发布DataGridView的代码。 - Pseudonym
你尝试过使用DataGridViewRow的DataBoundItem属性吗? - sdf
7个回答

25

您需要迭代集合并访问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


5

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

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

这是正确的方法。但是我怀疑在你的情况下,Pilots 是一个 DataTable,你需要将这些项目转换为适当的 Class 类型 - 如果必须选择,我会说你有一个 Pilot(单数)类,你应该转换它。


3

首先,请等待三年以获取您的答案。

其次,请不要迭代。

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

3

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

    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>()

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

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

1
这是如何在不显式迭代SelectedRows的情况下完成的:

或者


0

不确定这是否仍然相关,但我发现了这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接