public static DataRowCollection ToRows(this DataGridViewSelectedRowCollection Rows)
{
DataTable table = new DataTable();
foreach (DataColumn column in Rows[0].DataGridView.Columns)
{
table.Columns.Add(column);
}
foreach (DataGridViewRow row in Rows)
{
DataRow newRow = ((DataRowView)row.DataBoundItem).Row;
table.ImportRow(newRow);
}
return table.Rows;
}
我正在尝试在DataGridViewSelectedRowCollection中获取行的列。上面的代码在table.Columns.Add(列)上抛出InvalidCast错误,因为它试图将DataGridViewColumns转换为DataTable列。我没有访问DataGridView,因为我在一个静态方法,扩展DataGridViewSelectedRowCollection并且无法访问DataGridView。
如何将列集合强制转换为DataColumns对象?
答案 0 :(得分:1)
您可以创建一个扩展方法,以这种方式返回所选网格行后面的数据行:
public static class DataGridViewExtensions
{
public static List<DataRow> ToDataRows(this DataGridViewSelectedRowCollection Rows)
{
if (Rows == null || Rows.Count == 0)
return null;
return Rows.Cast<DataGridViewRow>()
.Where(x => x.DataBoundItem is DataRowView)
.Select(x => ((DataRowView)(x.DataBoundItem)).Row).ToList();
}
}
然后要从类型为row
的{{1}}变量中获取值,请考虑使用以下选项:
DataRow
包含所有列值row.ItemArray
按索引row[index]
获取列名row["column name"]
包含row.Table.Columns