如何在DataGridViewRowSelectedRowCollection中获取列

时间:2016-07-13 14:10:52

标签: c# winforms datagridviewcolumn

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

 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对象?

1 个答案:

答案 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
  • 列的列表