每个单元格内带有自定义对象的 DataGridView

Posted

技术标签:

【中文标题】每个单元格内带有自定义对象的 DataGridView【英文标题】:DataGridView with custom object inside each cell 【发布时间】:2013-10-23 20:17:54 【问题描述】:

在 C# 中,我有 DataGridView 和我的自定义类“Thing”,它们覆盖了 toString() 方法。 我要做的就是用 Thing 类型的对象填充 DataGridView,这样 Thing 对象就可以在 DataGridView 上自行显示。

public class Thing

  public string text get;set;
  public int id get;set;

  public Thing(string text, id)
  
     this.text = text;
     this.id = id;
  

  public override string ToString()
  
     return text;
  
 

例如,我正在尝试填充 DataGridView:

DataTable dt = new DataTable();
int Xnum = 100;
int Ynum = 100;

for (int i = 0; i < Xnum; i++)
  dt.Columns.Add(i.ToString(), typeof(Thing));                        

for (int i = 0; i < Ynum; i++)
  dt.Rows.Add();

然后

在某个循环中,我尝试在 dt 中填充已创建单元格的值:

//loop
(dt.Rows[x][y] as Thing).text = "some text from loop";
(dt.Rows[x][y] as Thing).id = "some id from loop";
//end loop

最后:

DataGridView1.DataSource = dt;

网格正确地填充了单元格和行,但它们是空的。我希望他们在 Thing.text 字段中显示可见的文本。

我需要使用自定义对象来做这件事,因为我希望将来可以使用的东西很少。

那么如何做类,以便 DataGridView 可以以某种方式使用它来获取文本值以显示在每个单元格上?

【问题讨论】:

【参考方案1】:

这行得通:

for (int x = 0; x < Xnum; ++x) 
  for (int y = 0; y < Ynum; ++y) 
    dt.Rows[y][x] = new Thing("Cell " + x.ToString() + ", " + y.ToString(), -1);
  

确保使用“事物”填充表格。

【讨论】:

对我不起作用。我无法将类型 myProject.Class.myClass 隐式转换为 System.Windows.Forms.DataGridViewCell。 @DarrylHoar 我在这里看不到你的代码。 @DarrylHoar 但我的代码将数据提供给 DataTable,而不是 DataGridView。问题中的 DataGridView 使用 DataTable 作为它的数据源。也许这就是不同的地方。

以上是关于每个单元格内带有自定义对象的 DataGridView的主要内容,如果未能解决你的问题,请参考以下文章

自定义单元格内的 UIImageView 中没有图像

如何根据自定义单元格内的 UILabel 设置单元格高度

使用相对于活动单元格的单元格内容作为自定义 If 函数中的条件的问题

Cocoa:如何让表格视图在每个单元格中绘制自定义视图

点击单元格内的按钮时如何显示更改?

选择单元格内的自定义 UITextView 时选择单元格