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

Srđ*_*vić 5 c# sql-server winforms

我在MSSQL数据库中使用c#winforms.我在数据库"飞行员"中有表格,我用数据库表中的数据填充datagridview"dgvPilots".

dgvPilots.DataSource = Connection.dm.Pilots.ToList();
Run Code Online (Sandbox Code Playgroud)

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

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

我也尝试像这样投射

dgvPilots.SelectedRows.Cast<Pilots>().ToList();
Run Code Online (Sandbox Code Playgroud)

但它返回DataGridViewRow项类型.

Pet*_*ter 17

您将需要迭代集合并继续作为基础数据的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);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码展示了如何实现这一目标,(我对代码进行了解释,因此原谅了任何语法错误).

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


Tar*_*rec 5

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

var selectedPilots = dgvPilots.SelectedRows.Cast<Pilots>().ToList();
Run Code Online (Sandbox Code Playgroud)

是这样做的正确方法.但是我怀疑Pilots在你的情况下是一个DataTable,而你需要的是将这些物品投射到合适的Class类型 - 如果我必须射击,我会说你有一个Pilot(单数)类,你应该施展到.