【问题标题】:working with the selected DataGridView row in C#在 C# 中使用选定的 DataGridView 行
【发布时间】:2011-11-03 13:33:09
【问题描述】:

有没有办法将数据网格视图中当前选定的行转换/转换为自定义对象?

例如,我正在尝试将选定的行转换为类型为 Client 的对象,但是,我无法使用此方法执行此操作。

DataGridViewSelectedRowCollection rows = dgvClient.SelectedRows;
foreach (DataGridViewRow r in rows)
{
    DataRow myRow = (r.DataBoundItem as DataRowView).Row;
    Client current = (Client)myRow;
}

【问题讨论】:

  • A DataGridViewRow 不继承自 Client,那为什么你能转换成它呢?
  • 你不能将某些东西从它是什么东西变成它不是什么东西。
  • 您应该发布您正在使用的 DataGrid(工具包或 .NET 4.0)

标签: c# object datagridview


【解决方案1】:

您还可以使用隐式和显式运算符 例如

class Client
{
   public static explicit operator Client(DataRow dr)
   {
      // code to convert from dr to Client
   }
}

Client current = (Client)myRow;

同样你可以重载隐式。使用隐式运算符,您将自动进行转换而无需强制转换

【讨论】:

  • 基本上,这就是我建议的在类中使用 DataRow 作为参数的构造函数。 +1 为显式运算符,虽然 ... ;)
【解决方案2】:

不,因为 DataRowClient 没有关系 - 即 Client 不是从 DataRow 派生的。
编辑:我已更正,您可以提供一个明确的转换方法正如@Anand 解释的那样。如果无法访问 Client 源,我会推荐这个。否则...

我在 VB.Net 中有一个项目,它使用 List 作为 DataGridView 的数据源。有趣的是我能够将选定的行转换为SomeEntity

我建议提供一个构造函数,在本例中为 Client,它接受 DataRow 作为参数。从行中分配值并完成它:

Client current = new Client(myRow);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多