如何获取 DataGridViewRowSelectedRowCollection 中的列

本文关键字:DataGridViewRowSelectedRowCollection 获取 何获取 | 更新日期: 2023-09-27 17:56:57

好吧,伙计们,我认为这会比现在更容易。

 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 中一行的列。 上面的代码在表上抛出一个 InvalidCast 错误。Columns.Add(column),因为它正在尝试将 DataGridViewColumns 强制转换为 DataTable 列。 我无权访问 DataGridView,因为我处于扩展 DataGridViewSelectedRowCollection 的静态方法中,并且无权访问 DataGridView。

如何将列集合强制转换为数据列对象?

如何获取 DataGridViewRowSelectedRowCollection 中的列

您可以创建一个扩展方法来返回所选网格行后面的数据行,如下所示:

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

然后,要从类型 DataRowrow 变量中获取值,请考虑使用以下选项:

  • row.ItemArray包含所有列值
  • row[index]按索引获取列的值
  • row["column name"]按列名获取列的值
  • row.Table.Columns包含DataTable列的列表